340 likes | 671 Views
ASP.NET Web API 2— веб-сервисы для веб-сайтов, «современных» и мобильных приложений. Андрей Андреев Эксперт по технологиям разработки , Microsoft. HTTP. Веб Сервисы. Больше клиентов. App. Устройства. Браузеры. Смартфоны. ?. ?. ?. ?. Планшеты. Масштабируемость. App. Устройства.
E N D
ASP.NET Web API 2—веб-сервисы для веб-сайтов, «современных» и мобильных приложений Андрей Андреев Эксперт по технологиям разработки, Microsoft
HTTP ВебСервисы
Больше клиентов App Устройства Браузеры Смартфоны ? ? ? ? Планшеты
Масштабируемость App Устройства Браузеры Смартфоны ? ? ? ? Планшеты
Простота App .config Устройства Браузеры Смартфоны ? ? ? ? Планшеты SOAP
Решение в Web – построение Web APIs App 2 ASP.NET Web API Устройства Браузеры Смартфоны Планшеты
Как начать работать с ASP.NET Web API 2 • Доступно в виде самостоятельных NuGetпакетов • Входит в Visual Studio 2013 Preview • Установите ASP.NET and Web Tools 2013 Preview Refresh, чтобы добавить новые возможности и улучшения • Документация на http://www.asp.net/vnext • Поддерживается .NET 4.5 и выше • Смотрите код на http://aspnetwebstack.codeplex.com
ДЕМО: Ваше первое Web API приложение с ASP.NET Web API 2
Что нового вASP.NET Web API 2 • Маршрутизация атрибутов • Интеграция с OWIN • Упрощённое модульное тестирование (IHttpActionResult) • Портативные Web API клиенты • OData: $select, $expand, $batch • Пакетная обработка запросов • Web API безопасность (CORS, OAuth 2.0)
Маршрутизация атрибутов • Делает Ваши маршрутыближе к ресурсам config.Routes.MapHttpRoute( name: “TodosForTodoList", routeTemplate: "api/todolists/{id}/todos", defaults: new { controller = “todolists”, action = “GetTodos” } ); Controller Selector Action Selector publicIEnumerable<TodoItem> GetTodos() { … }
Маршрутизация атрибутов • Делает Ваши маршрутыближе к ресурсам config.MapHttpAttributeRoutes(); [HttpGet("api/todolists/{id}/todos")] publicIEnumerable<TodoItem> GetTodos(int id) { … }
Маршрутизация атрибутов • Опциональные значения • Значения «по умолчанию» • Встроенные ограничения [HttpGet(“Demographics/{zipcode?}")] publicDemographicsGet(int? zipcode) { … } [HttpGet("Demographics/{zipcode=98052}")] publicDemographicsGet(int zipcode) { … } [HttpGet("people/{id:int}")] publicPerson Get(int id) { … } [HttpGet("people/{name:alpha}")] publicPerson Get(string name) { … }
Подробности здесь http://attributerouting.net
Модульное тестирование Web APIs • Раньше это было сложнее, чем следовало бы . . . • Сейчас для модульного тестирования нужно лишь: • Создать контроллер • Задать свойства, которые нужны (Request, Configuration, и т.д.) • Вызвать действие • ИспользуйтеIHttpActionResultчтобы «упаковать» повторяющуюся логику • Выполняется немедленно после запуска - остальная часть конвейера видит ответное сообщение
OWIN интеграция • OWIN = Open Web Interface for .NET (http://owin.org) • Определяет общий интерфейс, который отделяет веб-приложения от веб-серверов • Вдохновлено любовью к node.js, Rack, WSGI • Промежуточный конвейер находится ... да, в середине • Теперь глубоко интегрирован с ASP.NET конвейером • Пример:Запуск авторизационного промежуточного конвейера во время работы ASP.NET конвейера авторизации • Запускайте ваши Web APIs на любом совместимом с OWIN хосте
ASP.NET Web API OData • Компоненты для реализации OData сервисов • Построители моделей, средства форматирования (Atom/JSON/XML), трассировщики запросов и путей, генератор LINQ выражений, и т.д. • Это не “всё или ничего” – Вы можете использовать столько, сколько Вам нужно • Строится на ODataLib • Та же основа, что и WCF Data Services • Сначала распространялось с Visual Studio 2012 Update 2 • Сейчас поддерживает $select, $expand и $batch!
Web API Безопасность Free • Вы бы доверились такому • приложению? Friends Please give me your password
Проблемы с безопасностью Web API • Пользователи могут не захотеть доверить клиентским приложениям свои учетные данные • Приложения не хотят сохранять учетные данные пользователя • Многие серверы тоже не хотят сохранять учетные данные пользователей • Доступ клиентских приложений к защищённым ресурсам должен быть ограничен • Поддержка браузерных и кросс-браузерных клиентов • Избежать опасности подделки запросов • Нужен дружественный подход для родных и мобильных приложений
Где !?! печенюшки
OAuth 2.0 • Фреймворк для авторизации доступа клиентов кзащищённым ресурсам пользователей • IETF стандарт (RFCs 6749, 6750) • Предназначен для работы с HTTP службами • Множественные профили согласно клиентам и типам доступа • Это не протокол проверки подлинности • …но он может быть создан на этой основе.
OAuth 2.0 Эй, товарищ, можно посмотреть твои фотографии? Клиент Пользователь сказал, что я могу получить доступ к его фото– вот доказательство OK Владелец Ресурса (пользователь) Запрос авторизации Авторизация выдана Выглядит хорошо – вот маркеры, которые можно использовать Вот мой маркер доступа. Фотографии пользователя, пожалуйста. Сервер Авторизации Авторизация получена Маркер доступа Сервер Ресурсов (Web API) OK, пожалуйста Маркер доступа Защищённый ресурс
OAuth 2.0 – получение авторизации Сервер Авторизации Конечная точка авторизации Конечная точка маркера юзер 302 3 CODE Пользователь 2 <Client ID> <Client ID> 302 Защищённый Ресурс Браузер 1 Клиент
OAuth 2.0 – получение маркера Сервер Авторизации Конечная точка авторизации Конечная точка маркера клиент 2 Клиент <Client ID> 1 CODE маркер доступа обновление маркера Защищённый ресурс
OAuth 2.0 – запрос ресурсов Сервер Авторизации Конечная точка авторизации Конечная точка маркера Client маркер доступа Авторизация: Предъявитель обновление маркера 1 Защищённый ресурс 2 Client
OAuth 2.0 – обновление маркера доступа Сервер Авторизации Конечная точка авторизации Конечная точка маркера клиент 2 <Client ID> Клиент 1 маркер авторизации обновление маркера обновление маркера Защищённый ресурс
OAuth 2.0 Поддержка маркеров предъявителя • Авторизация запросов с использованием OAuth 2.0 маркеров Предъявителя • Промежуточный Предъявитель проверяет и конвертирует маркеры в заявки Авторизация Предъявителя × Защищённый Ресурс Клиент
OAuth 2.0 Поддержка маркеров предъявителя • public class Startup • { • public void ConfigureAuth(IAppBuilder app) • { • // Позволяет приложению использоватьOAuth 2.0 маркеры предъявителя для авторизации // пользователей • app.UseOAuthBearerAuthentication(newOAuthBearerAuthenticationOptions()); • } • }
OAuth 2.0 поддержка сервера авторизации • Две опции: • 1. Иметь свой собственный • Простой сервер авторизациив шаблоне Single Page Application • Поддержка сервера авторизации в OWIN слое (в будущем) • 2. Использовать существующий • Windows Azure Active Directory • Active Directory Federation Services в Window Server 2012 R2
Поддержка множества клиентов спортативными библиотеками Web API Windows Phone App Windows Store App Single Page App Portable Web API Client
What’s new in ASP.NET Web API 2 • Маршрутизация атрибутов • Интеграция с OWIN • Упрощённое модульное тестирование (IHttpActionResult) • Портативные Web API клиенты • OData: $select, $expand, $batch • Пакетная обработка запросов • Web API безопасность (CORS, OAuth 2.0)
Ресурсы • Новинки • http://www.asp.net/vnext • http://www.asp.net/webapi • Прогресс • http://aspnetwebstack.codeplex.com • http://katanaproject.codeplex.com