Upload
eleksdev
View
2.433
Download
1
Embed Size (px)
Citation preview
eleks.com eleks.com
Asp.NET. Web Services.ASP.NET Core. RESTfull Web Services
• Протокол передачі даних, що використовується
в компютерних мережах.
• Належить до протоколів моделі OSI 7-го прикладного рівня
• Основним призначенням протоколу HTTP є передача веб-сторінок
• Кожен запит/відповідь складається з трьох частин:• стартовий рядок;• заголовки;• тіло повідомлення, що містить дані запиту, запитаний ресурс або опис проблеми,
якщо запит не виконано.
HTTP (Hyper Text Transfer Protocol)
• Сервер, що приймає HTTP-запити від клієнтів, зазвичай веб-браузерів,
видає їм HTTP-відповіді, зазвичай разом з HTML-сторінкою,
зображенням, файлом, медіа-потоком або іншими даними
• Клієнти дістаються веб-сервера за URL-адресою потрібної їм веб-
сторінки або іншого ресурсу
Веб-сервер
• Набір серверів для декількох служб Інтернету від компанії Майкрософт.
IIS поширюється з операційними системами родини Windows NT.
• Основний компонент IIS — веб-сервер, який дозволяє розміщувати в
Інтернеті сайти.
• Підтримує протоколи HTTP, HTTPS, FTP, POP3, SMTP, NNTP
• IIS 7.0 має модульну архітектуру.
• Конфігураційна інформація зберігається виключно в конфігураційних
XML
IIS (Internet Information Services)
• Являє собою групування URL-адрес, які пересилається до одного або
декількох робочих процесів
• Оскільки пули додатків визначають набір веб-додатків, які
використовують один або кілька робочих процесів, вони забезпечують
зручний спосіб адміністрування набору веб-сайтів і додатків і
відповідних робочих процесів
• Пули додатків значно підвищити як надійність і керованість веб-
інфраструктури.
Application Pool
eleks.com
Демонстрація 1• IIS
IIS request processing pipeline
• Технологія створення веб-додатків та веб-сервісів
ASP.NET
• Коли ми інсталюємо .NET, у відповідних директоріях C:\WINDOWS\Microsoft.NET\
Framework\ поміщається також файл aspnet_isapi.dll.
• Це - ISAPI-розширення, і призначене воно для отримання запитів, адресованих ASP
.NET-додаткам (* .aspx * .asmx і т.д.), а також для створення робочих процесів
aspnet_wp.exe, які обробляють запити.
• Інтернет-сервер - IIS або вбудований в WebMatrix і в Visual Studio Cassini -
використовують це розширення, коли їм треба обробити звернення до сторінок з
розширенням ASPX.
Як працює ASP.NET
Як працює ASP.NET• IIS завантажує додаток в пам’ять• Для кожного запиту створюється новий потік
• Процес або код, який відповідає на HTTP запит• Прикладpublic class MyHttpHandler : IHttpHandler{ public void ProcessRequest(HttpContext context) { context.Response.Write("I am а HTTP handler."); }
public bool IsReusable { get { return false; } }}
• Реєстрація в web.config<configuration><system.webServer><handlers> <add verb="*" path="*.my" name=“My HTTP handler" type=“MyHttpHandler"/></handlers></system.webServer></configuration>
HTTP Handlers
• HTTP Модулі - це класи, що реалізують інтерфейс IHttpModule і обробні
події часу виконання (Runtime).
• HTTP-модулі - це механізм, який дозволяє виконувати різні дії на будь-
якому етапі життєвого циклу сторінки або додатку.
• У HTTP-модулі можна підписатися на будь-яку подію життєвого циклу і
обробляти його, реалізуючи при цьому якусь свою логіку. Зазвичай,
модулі використовують як фільтри програми.
HTTP modules
• Кожен модуль запускається методом Init.
• У цьому методі кожен HTTP-модуль підписується на події життєвого
циклу додатка (BeginRequest, AuthenticateRequest ... - всього 26).
Після цих дій всі завантажені модулі HTTP залишаються в пам'яті і
вивантажуються тільки тоді, коли вивантажується домен додатка.
• При кожному циклі обробки запиту відпрацьовують ті чи інші події, на
які підписані різні HTTP-модулі. Саме в цей момент можна додати
необхідну логіку.
HTTP modules
• Для того щоб створити власні HTTP-модулі необхідно створити клас,
який реалізує інтерфейс IHttpModule.
• В рамках цього інтерфейсу присутні два методу - Init () і Dispose ().
• Останній метод необхідний для того, щоб в потрібний момент очистити
займані ресурси. Зазвичай, цей метод залишається порожнім.
HTTP modules
• Метод Init () викликається в момент завантаження HTTP-модуля і має
параметр типу HttpApplication.
• Цей параметр дозволяє підписатися на події життєвого циклу обробки
запиту програми.
• Метод модуля Init () спрацьовує лише один раз - при створенні домена
додатку..
HTTP modules
• Файл Global.asax (Global Class Application), або файл програми ASP.NET,
є додатковим файлом, що містить код для відгуку на події рівня
додатка і рівня сеансу, створюваний додатком ASP.NET або модулями
HTTP.
• Файл Global.asax додається в кореневу папку програми ASP.NET.
• Під час виконання цей файл аналізується і компілюється в динамічно
створюваний клас .NET Framework, похідний від базового класу
HttpApplication.
Global.asax
• Середовище ASP.NET налаштовується таким чином, що будь-який
безпосередній URL-запит до файлу Global.asax автоматично
відхиляється, а зовнішні користувачі не можуть завантажувати або
переглядати код в ньому.
• Даний файл не є обов'язковим. Він створюється тільки в тому випадку,
якщо необхідна обробка подій додатка або сеансу.
Global.asax
• Application_Start - виникає коли створюється екземпляр класу HttpApplication.
• Session_start - виникає на початку кожного сеансу, тут можна форматувати
змінні сеансу.
• Application_BeginRequest - ініціюється на початку кожного окремого запиту.
• Application_EndRequest - ініціюється в кінці запиту.
• Session_End - ініціюється в кінці кожного сеансу.
• Application_End - ініціюється перед видаленням екземпляра HttpApplication.
• Application_Error - ініціюється при будь-якому необробленому вийнятку в
додатку.
Часто використовувані події
• Визначає параметри для ASP.NET веб-додатку, такі як DB connection
strings, HTTP handlers, modules, assembly bindings
• Може зберігати кастомні налаштування
• Зміни в файлі не вимагають рестарту
• Можна мати кілька конфіг файлів - один глобальний і кілька для різних
папок
• Web.config наслідується з глобального Web.config і з machine.config
Web.config
• Web.debug.config• Локальні налаштування для дебагу• Напиклад локальна база даних для тестування
• Web.Release.config• Налаштування для деплою на продакшн
Web.config
ASP.NET Core 1.0
• Попередня назва ASP.NET 5
• Кросс-платформний фреймворк з відкритим вихідним кодом.
• Оптимальний для хмарних веб-додатків
ASP.NET Core 1.0
• Новий легка та модульна магістраль HTTP запитів
• Можливість хоститингу на IIS або само-хостинг і вашому власному процесі
• Будується на .NET Core, яке підтримує справжню side-by-side версійність програм
• Повністю постачається як NuGet пакет
• Інтегрована підтримка для створення і використання NuGet пакетів
• Одно-вирівняний веб стек для Web UI та Web APIs
• Базова конфігурація середовища готова для хмарних рішень
• Вбудована підтримка інєкції залежностей
• Нові засоби що спрощують сучасну веб розробку
• Компіляція та виконання крос-платворменних ASP.NET додатків на Windows, Mac
and Linux
• Відкритий вихідний код
eleks.com
Переривчик 5хв
• Мережева технологія, що забезпечує міжпрограмну взаємодію на основі
веб-стандартів
• Програмна система, розроблену для підтримки інтероперабельнї
міжкомп’ютерної взаємодії через мережу
Веб сервіс
• Протокол, доступу до обєктів, оснований на обміні структурованими
повідомленнями
• Може використовуватись з будь яким протоколом прикладного рівня
( SMTP, FTP, HTTP)
• Використання SOAP для передавання повідомлень збільшує їхній обсяг і
знижує швидкість обробки.
SOAP (Simple Object Access Protocol)
• Ідентификатор повідомлення (локальне ім’я).
• Опціональний елемент Header (заголовок):
Нуль або більше посилань на використовувані простори імен;
Нуль або більше властивостей, досткупних в цьому просторі імен
• Обовязковий елемент Body (тіло повідомлення)
Нуль або більше посилань на використовувані простори імен
Дочірні елементи тіла повідомлення
Структура протоколу SOAP
ПрикладЗапит:
Відповідь:
• Мова опису зовнішніх інтерфейсів і доступу до них, основана на XML
WSDL (Web Services Description Language)
• Щоб згенерувати WSDL файл для сервісу потрібно додати до урла
сервісу “?WSDL”: http://localhost/HelloService.asmx?WSDL
• Для використання сервісу в Visual Studio, його слід додати через Add
Service References…
• Якщо є тільки WSDL файл, використовуйте тулзу WSDL.exe
WSDL
• Інструмент для розміщення описів веб сервісів (WSDL) для пошуку їх
іншими організаціями і інтеграції в свої системи
• Кросплатформне пз основане на XML
• Призначений для запитів SOAP повідомленнями і забезпечення доступу
до WSDL документів, які описують привязки протоколів і форматів
повідомлень, потрібних для взаємодії з веб-послугами, які є в їхньому
каталозі
UDDI (Universal Description Discovery & Integration)
eleks.com
Демонстрація 1• IIS
• Набір клієнтських бібліотек, що дозволяють застосункам на базі
відкритої платформи .NET Core взаємодіяти з сервісами WCF,
відправляючи повідомлення між сервісами в асинхронному режимі.
• WCF надає єдину інфраструктуру розробки, що підвищує
продуктивність і знижує витрати на створення веб-служб. Закладені в
неї принципи інтероперабельності дозволяють легко добиватися
взаємодії з іншими платформами
WCF (Windows Communication Foundation)
• В основі три базових складники:• Address - визначає куди слід відправляти повідомлення;• Binding - визначає як необхідно відправляти повідомлення;• Contract - визначає що має містити повідомлення.
• Web.config
WCF
• Клас служби WCF не може існувати самостійно. Кожна служба WCF
повинна перебувати під управлінням деякого процесу Windows, званого
хостової процесом. Існують кілька варіантів хостингу:• Автохостинг (хост-процесом являється консольний або графічний
Windows додаток)• Хостинг в одній з служб Windows• Хостинг з використанням IIS або WAS
Хостинг WCF
• Клас служби WCF не може існувати самостійно. Кожна служба WCF
повинна перебувати під управлінням деякого процесу Windows, званого
хостової процесом. Існують кілька варіантів хостингу:• Автохостинг (хост-процесом являється консольний або графічний
Windows додаток)• Хостинг в одній з служб Windows• Хостинг з використанням IIS або WAS
Хостинг WCF
• REpresentational State Transfer (назва не відповідає суті)
• Архітектурний паттерн, а не стандарт
• Стано-незалежний (Stateless), клієнт-серверний, кешований протокол
звязку
• Використання HTTP запитів для відправки, читання і видалення даних
• Полегшений
• Іменники як URI, дієслова як HTTP метод
REST
• Ресурси• Все, що досить важливо щоб мати власне посилання.
• Може бути фізичний об’єкт або абстрактний концепт.
• Кожен ресурс має принаймні одне ім’я
• Ресурси можуть бути контейнерами інших ресурсів• Контейнери завжди є ресурсами
• Паттерн Композит (Composite design pattern)
Ресурси і контейнери
• Дозволяє створити структуру дерева і задати кожному елементу в
структурі дерева, виконати завдання.
Composite design pattern
• Репрезентація ресурсів• Будь яка корисна інформація про стан ресурсу
• Визначається за допомогою певного URL або узгодження контенту через заголовки канонічного
URI ресурсів.
• Канонічний URI ресурсів• Незалежно від формату або локальної мови
• Може бути визначено в Content-Location заголовку репрезентативної відповіді
Репрезентація ресурсів
• GEThttp://www.example.com/v1/hr/employees/19328389
• POSThttp://www.example.com/v1/hr/employees
• DELETEhttp://www.example.com/v1/hr/employees/14283949
• PUThttp://www.example.com/v1/hr/employees/14283949
Приклади URI
• Адресація• Ресурси ідентифікуються по URI
• Відсутність станів• Відсутність станів звязку, що утримуються між REST викликами
• Звязність• Ресурси повинні бути повязані разом в їхньому представленні
• Однаковий інтерфейс• HTTP GET, PUT, POST, DELETE, HEAD, OPTIONS• HTTP method header• HTTP status codes
Ресурсно-орієнтовна архітектура
• Ім’я і адреса ресурсу• Оглядова інформація про ресурс• Принципи адресації
• Повинна бути описова
• Унікальні URI незахищені для кожного ресурсу доступні з RESTful
системи• Кожен URI позначає рівно один ресурс
• URIs доступними для ваших клієнтів
Адресація через URI
• Відсутність станів, що зберігаються на сервері
• Кожен HTTP запит виконується на сервері в повній ізоляції
• Спрощене проектування і розвиток
• Полегшене масштабування
• Уникайте використання HTTP сесій і куків
• Відсутність побічних ефектів
Відсутність станів
• Стандартизовані• GET• POST• PUT• DELETE• HEAD• OPTIONS
• Репрезентують виклик дії
• Ресурси відображають однаковий інтерфейс
HTTP методи (дії)
GETClient Browser
GET /v1/users/10548
HTTP Status: 200 (ОК)Response headersRequested representation
Web Server
HEADClient Browser
HEAD /v1/users/10548
HTTP Status: 200 (ОК)Response headers
Web Server
PUTClient Browser
PUT /v1/users/10548
HTTP Status: 200 (ОК)Response headers
Web Server
DELETEClient Browser
DELETE /v1/users/10548
HTTP Status: 200 (ОК)Response headers
Web Server
POST
Client Browser
POST /v1/users/10548Representation in entity body
HTTP Status: 201 (Created)Response headers
Web Server
• Основні засоби звітів про результати REST операції
• Використовуйте тіло об'єкта, щоб додати допоміжні визначники до результату
• Не відправляйте назад репрезентацію ресурсів на жоден з методів окрім GET,
задля забезпечення відсутності негативного впливу на оптимізацію
продуктивності
HTTP статус коди
• 100 Continue
• 200 OK
• 201 Created
• 204 No Content
• 304 Not Modified
• 400 Bad Request
• 401 Unauthorized
• 400 Bad Request
• 404 Not Found
• 409 Conflict
• 500 Internal Server Error
Топ 10 HTTP статус кодів
• GET I HEAD запити не повинні викликати жодних катастрофічних
ефектів на серверній стороні
• Відсутність побічних ефектів• Клієнт не повинен робити запитів тільки для погашення побічних ефектів
• Уникайте впливу небезпечних (unsafe) операцій через GET
Безпека
• Багаторазовий виклик результатів операцій дає той самий результат в
тому ж результуючому стані, як і результат одного виклику
• Ідемпотентні методи: GET, HEAD, PUT, DELETE , OPTIONS
• Не ідемпотентні: POST
Ідемпотентність
• Під час створення і оновлення ресурсів• PUT, якщо, і тільки якщо, ви можете повністю вказати повний вміст ресурсу
• POST, якщо ви відправляєте команду, щоб створити або оновити один або кілька підлеглих
зазначеного ресурсу
• За допомогою POST, сервер буде визначати URI ресурсу
• Використовуйте заголовок Location в POST запиті, щоб вказати нові URI
езурсів, якщо доступно
PUT vs POST
• HTTPS i SSL сертифікату валідація
• 5 головних HTTP методів: GET, HEAD, POST, PUT, DELETE
• Кастомізація даних, що відправляються в тілі обєкту PUT або POST
запиту
• Доступ до статус коду та заголовків відповіді
• Комунікація через HTTP проксі
Вимоги до HTTP клієнта
• Передача і обробка стиснених даних• Запит: заголовок Accept Encoding • Відповідь: заголовок Encoding
• Кешування відповідей на запит• Запити GET з станом
• Загальна форма HTTP аутентифікації (Basic, Digest, WSSE)
• Прозоре слідування HTTP переадресації
Опціональна функціональність HTTP клієнта
• Ієрархічна• Кодуй дані в «змінні шляху» в URI• http: //maps.example.com/Earth/Europe/France/Paris
• Не ієрархічна• Комбінуються в одну змінну шляху, розділені комою або крапкою з комою• Використовуй кому, коли порядок важливий, крапку з комою в іншому випадку• http: //maps.example.com/Earth/24,158,89,515
• Алгоритмічні ресурси• Використання змінних запиту• http://www.google.com/search?q=rest
Побудова URI
• Версія вашого сервісу
• Вбудова версії в URI• GET /v1/users/234234
• Репрезентація також повинна підлягати версійності• Втавляйте інформацію про версію в репрезентацію
Версійність REST API
• Більшість ресурсів не сильно змінюється
• Зберігає клієнтський і серверний час виконання і пропускну здатність
мережі
• Реалізовано використовуючи HTTP заголовки• Заголовки відповіді: Last-Modified i Etag• Заголовки запиту: If-Modified-Since i If-None-Match
Conditional GET
Conditional GET
Client Browser
GET /v1/users/10548If-Modified-Since: <cached Last-Modified value>If-None-Match: <cached Etag value>
HTTP Status: 304 (Not Modified)Response headers
Web Server
Continue to used cached representation
1
23
• Ресурси можуть зберігатись в різних репрезентаціях (XML, JSON, HTML...)
• Методи узгодження контенту:• Заголовки (Accept або Content-Type)
• Query parameter (GET /v1/users/10505?format=json)
• URI extension (GET /v1/users/10505.xml)
Узгодження контенту
• Використання REST як RPC-подібний механізм
• Надмірне використання POST
• Вставляння дій в URI
• Маскування сервісу як ресурсу
• Управління сесіями на сервері
Загальні помилки
eleks.com
Summary
eleks.com
Демонстрація 5• Events
© Denys Prylutskyi, 2015
Практичне завдання