ASP.NET Web API
Фреймворк для работы с данными по HTTP
Андрей Кулешов
ASP.NET Web API – история
▪ Первый релиз – 2012 год
▪ Текущая версия
Web API 2.1 – 20 января 2014 года
▪ Перерождение WCF
Эволюция доступа к данным
▪ RPC (SOAP, WCF) -> REST
▪ От абстракции – возвращение к четко определенному протоколу HTTP
▪ RPC – Remote Procedure Call – удалѐнный вызов кода на серверной стороне
посредством магии
▪ Подход RPC позволяет использовать небольшое количество сетевых
ресурсов с большим количеством методов и сложным протоколом. При
подходе REST количество методов и сложность протокола строго
ограничены, из-за чего количество отдельных ресурсов может быть
большим.
Representational state transfer (REST)
▪ REST (сокр. англ. Representational State Transfer, «передача состояния
представления»[1] или «передача репрезентативного состояния») — стиль
построения архитектуры распределенного приложения. Был описан и
популяризован в 2000 году Роем Филдингом (Roy Fielding), одним из
создателей протокола HTTP. Самой известной системой, построенной в
значительной степени по архитектуре REST, является
современная Всемирная паутина.
▪ Данные в REST должны передаваться в виде небольшого количества
стандартных форматов (например HTML, XML, JSON). Сетевой протокол
(как и HTTP) должен поддерживать кэширование, не должен зависеть от
сетевого слоя, не должен сохранять информацию о состоянии между
парами «запрос-ответ». Утверждается, что такой подход обеспечивает
масштабируемость системы и позволяет ей эволюционировать с новыми
требованиями.
REST <-> HTTP
▪ Методы HTTP, используемые в REST, определяют тип совершаемой
операции
▪ GET – получение существующих сущностей
▪ POST – модификация существующих сущностей
▪ PUT – создание сущностей
▪ PUT DELETE – как слышится, так и пишется
REST
▪ Вызываемый метод определяется адресом URI и методом Verb
▪ Отсутствие состояния у системы (stateless система – в противоположность
statefull системе)
▪ Кэширование
Демо
▪ Совсем простое Web API
▪ Совсем простое клиентское приложение
Контроллеры и методы
▪ Рекомендованный путь – один контроллер на одну сущность данных
BookController
AuthorController
ReaderController
▪ Каждый контроллер содержит множество методов
▪ Имя метода (action) сопоставляется c методом (verb) запроса
EventController: ApiContoller{
public Event GetMyCoolEvent() {
return new Event();
}
}
Данный метод сопоставляется со всеми GET-запросами. Остаток имени
(MyCoolEvent) игнорируется
Если Get*-методов несколько – выбирается первый соответствующий по
параметрам
▪ Параметры могу приходить из URL, в HTTP-заголовках или из тела запроса (для
POST/PUT/DELETE запросов)
Роутинг
▪ При разработке устанавливаются правила соответствия пришедшего
запроса и наших классов *Controller и их методов
▪ В пришедшем запросе (по умолчанию) смотрят на:
o путь (URL)
o HTTP-метод (GET, POST, PUT, UPDATE)
▪ Классический подход, пришедший из ASP.NET MVC – заполнение набора
правил роутинга
▪ Новый подход – установка атрибутов на действия
OData
▪ Стандарт протокола запросов при обращении к данным
▪ Попытка Майкрософт и К стандартизовать язык запросов к REST-сервисам
▪ Задает стандартные операции над сущностями –
фильтрация, сортировка, разбиение на страницы и получение связанных
сущностей
Odata и Web API 2.1
▪ Поддерживаемые Web API v.2.1 операции:
$filter – фильтрация выборки
$orderby - сортировка
$top/$skip – первые N записей и пропуск первых N записей; разбиение на
страницы
$inlinecount – добавляет в ответ информацию о количестве
записей, удовлетворяющих условию
$select – выбор того, какие данные сущности будут возвращены
$expand – позволяет как результат запроса к сущностям одного типа
получить также связанные сущности другого типа (например, при запросе к
данным о книгах – получить в том же запросе ответ об авторах этих книг)
▪ По умолчанию выключены, включаются централизованно либо
для нужных методов через атрибуты
Демо
▪ Включение OData
▪ Фильтрация через параметры URL
Безопасность
▪ Авторизация пользователей
▪ Поддержка CORS (из коробки с версии 2.1 – добавлена как патч от члена
сообщества)
Справка по API
▪ Web API из коробки поддерживает возможность автоматического создания
справочных страниц на основе сгенерированного Web API
▪ Туда собираются данные об известных сущностях, поддерживаемых
операциях и URL-адресах
▪ Если необходима тонкая настройка – возможен непосредственный доступ к
данным через ApiExplorer
Создание справки
▪ Добавление справки в проект
Размещение Web API
▪ Классическое – как часть ASP.NET сайта на IIS
▪ Self-hosting – возможность встроить Web API куда угодно (в разного рода
демонстрациях – в консольное приложение, в реальной жизни – в Windows-
сервисы)
▪ OWIN – то же самое, что и предыдущий пункт, но по-новому
Open Web Interface for .NET
Новая реализация стэка работы с сетью по протоколу HTTP, не привязанная
к IIS вообще и к System.Web.dll в частности
Интересное чтение
▪ Официальный сайт. Документация, примеры и статьи
http://asp.net/web-api
▪ REST на Википедии
▪ ASP.NET MVC 4 and the Web API: Building a REST Service from Start to Finish
by Jamie Kurtz
▪ OData
http://www.odata.org
Интересное видео
▪ ASP.NET Web API – What’s New (версия 2.0)
Вопросы?
Внимательно слушаю! 
Андрей Кулешов
kaa-tula@ya.ru
akuleshov.tula
Специально для http://GetDev.NET

ASP.NET Web API

  • 1.
    ASP.NET Web API Фреймворкдля работы с данными по HTTP Андрей Кулешов
  • 2.
    ASP.NET Web API– история ▪ Первый релиз – 2012 год ▪ Текущая версия Web API 2.1 – 20 января 2014 года ▪ Перерождение WCF
  • 3.
    Эволюция доступа кданным ▪ RPC (SOAP, WCF) -> REST ▪ От абстракции – возвращение к четко определенному протоколу HTTP ▪ RPC – Remote Procedure Call – удалѐнный вызов кода на серверной стороне посредством магии ▪ Подход RPC позволяет использовать небольшое количество сетевых ресурсов с большим количеством методов и сложным протоколом. При подходе REST количество методов и сложность протокола строго ограничены, из-за чего количество отдельных ресурсов может быть большим.
  • 4.
    Representational state transfer(REST) ▪ REST (сокр. англ. Representational State Transfer, «передача состояния представления»[1] или «передача репрезентативного состояния») — стиль построения архитектуры распределенного приложения. Был описан и популяризован в 2000 году Роем Филдингом (Roy Fielding), одним из создателей протокола HTTP. Самой известной системой, построенной в значительной степени по архитектуре REST, является современная Всемирная паутина. ▪ Данные в REST должны передаваться в виде небольшого количества стандартных форматов (например HTML, XML, JSON). Сетевой протокол (как и HTTP) должен поддерживать кэширование, не должен зависеть от сетевого слоя, не должен сохранять информацию о состоянии между парами «запрос-ответ». Утверждается, что такой подход обеспечивает масштабируемость системы и позволяет ей эволюционировать с новыми требованиями.
  • 5.
    REST <-> HTTP ▪Методы HTTP, используемые в REST, определяют тип совершаемой операции ▪ GET – получение существующих сущностей ▪ POST – модификация существующих сущностей ▪ PUT – создание сущностей ▪ PUT DELETE – как слышится, так и пишется
  • 6.
    REST ▪ Вызываемый методопределяется адресом URI и методом Verb ▪ Отсутствие состояния у системы (stateless система – в противоположность statefull системе) ▪ Кэширование
  • 7.
    Демо ▪ Совсем простоеWeb API ▪ Совсем простое клиентское приложение
  • 8.
    Контроллеры и методы ▪Рекомендованный путь – один контроллер на одну сущность данных BookController AuthorController ReaderController ▪ Каждый контроллер содержит множество методов ▪ Имя метода (action) сопоставляется c методом (verb) запроса EventController: ApiContoller{ public Event GetMyCoolEvent() { return new Event(); } } Данный метод сопоставляется со всеми GET-запросами. Остаток имени (MyCoolEvent) игнорируется Если Get*-методов несколько – выбирается первый соответствующий по параметрам ▪ Параметры могу приходить из URL, в HTTP-заголовках или из тела запроса (для POST/PUT/DELETE запросов)
  • 9.
    Роутинг ▪ При разработкеустанавливаются правила соответствия пришедшего запроса и наших классов *Controller и их методов ▪ В пришедшем запросе (по умолчанию) смотрят на: o путь (URL) o HTTP-метод (GET, POST, PUT, UPDATE) ▪ Классический подход, пришедший из ASP.NET MVC – заполнение набора правил роутинга ▪ Новый подход – установка атрибутов на действия
  • 10.
    OData ▪ Стандарт протоколазапросов при обращении к данным ▪ Попытка Майкрософт и К стандартизовать язык запросов к REST-сервисам ▪ Задает стандартные операции над сущностями – фильтрация, сортировка, разбиение на страницы и получение связанных сущностей
  • 11.
    Odata и WebAPI 2.1 ▪ Поддерживаемые Web API v.2.1 операции: $filter – фильтрация выборки $orderby - сортировка $top/$skip – первые N записей и пропуск первых N записей; разбиение на страницы $inlinecount – добавляет в ответ информацию о количестве записей, удовлетворяющих условию $select – выбор того, какие данные сущности будут возвращены $expand – позволяет как результат запроса к сущностям одного типа получить также связанные сущности другого типа (например, при запросе к данным о книгах – получить в том же запросе ответ об авторах этих книг) ▪ По умолчанию выключены, включаются централизованно либо для нужных методов через атрибуты
  • 12.
    Демо ▪ Включение OData ▪Фильтрация через параметры URL
  • 13.
    Безопасность ▪ Авторизация пользователей ▪Поддержка CORS (из коробки с версии 2.1 – добавлена как патч от члена сообщества)
  • 14.
    Справка по API ▪Web API из коробки поддерживает возможность автоматического создания справочных страниц на основе сгенерированного Web API ▪ Туда собираются данные об известных сущностях, поддерживаемых операциях и URL-адресах ▪ Если необходима тонкая настройка – возможен непосредственный доступ к данным через ApiExplorer
  • 15.
  • 16.
    Размещение Web API ▪Классическое – как часть ASP.NET сайта на IIS ▪ Self-hosting – возможность встроить Web API куда угодно (в разного рода демонстрациях – в консольное приложение, в реальной жизни – в Windows- сервисы) ▪ OWIN – то же самое, что и предыдущий пункт, но по-новому Open Web Interface for .NET Новая реализация стэка работы с сетью по протоколу HTTP, не привязанная к IIS вообще и к System.Web.dll в частности
  • 17.
    Интересное чтение ▪ Официальныйсайт. Документация, примеры и статьи http://asp.net/web-api ▪ REST на Википедии ▪ ASP.NET MVC 4 and the Web API: Building a REST Service from Start to Finish by Jamie Kurtz ▪ OData http://www.odata.org
  • 18.
    Интересное видео ▪ ASP.NETWeb API – What’s New (версия 2.0)
  • 19.
    Вопросы? Внимательно слушаю!  АндрейКулешов kaa-tula@ya.ru akuleshov.tula Специально для http://GetDev.NET