Построение успешных API
Андрей Чебукин
The Secret Circle Solutions
КА ШАГ
Построение
успешных API
Андрей Чебукин
The Secret Circle Solutions / КА ШАГ
Андрей Чебукин
•Student Partner
•MCSD: Windows 8 C#
•Преподаватель:
КА ШАГ
•Соучредитель:
The Secret Circle Solutions
•Интересы: F#, functional programming,
ALM, Azure
О чём
•Что такое API
•Какие API успешны в использовании
•Как сделать
успешные в использовании API
Как расшифровывается
API?
•Application
•Programming
•Interface
•интерфейс
программирования
приложений
•интерфейс
прикладного
программирования
Что такое API
•Структуры/типы данных
•Операции
•Сценарии использования
Какие API успешные?
1.Лёгкие в употреблении (TTFSC, TTFHW)
2.Понятно как нужно, нельзя как не нужно
3.Ничего не ломается при обновлении
4.Getting started,
Multi-language code samples,
SDKs
https://www.slideshare.net/biztalk360/everybody-loves-swagger
Как узнать API?
•Исходники
•Метаданные
•Документация
•IDL
https://www.slideshare.net/whitlockjc/building-apis-
with-nodejs-and-swagger
Документи-
рование API
https://github.com
/nazar-pc
/opir.org
/wiki
Interface Description Language
Interface Definition Language
•OMG (Object Management Group, CORBA)
•Microsoft Interface Definition Language
•WADL (Web Application Description Language)
•WSDL (Web Services Description Language)
•RSDL (RESTful Service Description Language)
•Swagger
•Protocol Buffers
•Apache Thrift
Open API
Swagger
Swagger это…
Технология
Спецификация для
•Описания
•Документирования
REST API
Методология
Набор средств для
•Создания
•Употребления
•Визуализации
REST API
https://www.slideshare.net/VictorTrakhtenberg/swagger2
Спецификация Swagger
•JSON, чтобы определять метаданные
•JSON, чтобы определять структуру API
•JSON схема
•Машиночитаемая
•Независимая от языка программирования
Редакторы
•Swagger Editor
•editor.swagger.io
•Editor + swagger.js
•apistudio.io
•Restlet studio
(cross-format editor)
•studio.restlet.com
https://www.slideshare.net/biztalk360/everybody-loves-swagger
DEMO
Swagger Editor
Подходы к разработке
Specification first
1.Реализую API
2.Вставляю
пояснения на месте
Implementation first
1.Пишу JSON
спецификацию
2.Генерирую
заглушки API
3.Реализую APIs
4.Публикую
Swashbuckle
Swagger на ASP.NET
Библиотека авто-
генерации swagger.json
•Использует ApiExplorer
•Автогенерация
•Точки расширения
•Легко найти спецификацию
•Ничего не добавляет в реализацию
Swashbukle
ASP.NET Core
.NETFramework4.5.1/.NETStandard1.6
• Swashbuckle.AspNetCore1.0.0-rc3
• Swashbuckle.AspNetCore.Swagger
• Swashbuckle.AspNetCore.SwaggerGen
• Swashbuckle.AspNetCore.SwaggerUI
ASP.NET Classic
.NETFramework 4.5.1
• Swashbuckle 6.0.0-beta902
• Swashbuckle.Swagger
• Swashbuckle.SwaggerGen
• Swashbuckle.SwaggerUi
200 по умолчанию
Явные ответы
XML комменты -> дока
Ещё
•Версии спецификации
•Фильтры
•Определения способов авторизации
•UI для просмотра и тестирования
•C возможностью изменения и брендинга
•С поддержкой сценариев OAuth 2
DEMO
Swashbuckle
Успешные API
1.Лёгкие в употреблении (TTFSC, TTFHW)
2.Понятно как нужно, нельзя как не нужно
3.Ничего не ломается при обновлении
4.Getting started, Multi language code
samples, SDKs
https://www.slideshare.net/biztalk360/everybody-loves-swagger
Ломающие изменения
•Удаление или переименование
API или параметров API
•Изменения в поведении
для существующего API
•Изменения в кодах ошибки
и контрактах отказа
•Что-либо, что нарушило бы
Принцип наименьшего удивления
ASP.NET Rounting
•Template
•Attribute
Template
Attribute
А если нужно что-
то изменить?
Способы
версионирования
•По параметру строки запроса
•По заголовку
•По сегменту URL пути
ASP.NET Versioning
https://github.com/
Microsoft/aspnet-api-versioning
Способы версионирования
в ASP.NET API Versioning
•По параметру строки запроса api-version=1.0
•По заголовку
•api-version или x-ms-version
•Accept (media type) application/json;q=0.2;v=1.0
•По параметру строки запроса или заголовку
•По сегменту URL пути
Request URL Matched Controller
/api/helloworld?api-version=1.0 HelloWorldController
/api/helloworld?api-version=2.0 HelloWorld2Controller
Request URL Matched Controller Matched Action
/api/v1/helloworld HelloWorldController Get
/api/v2/helloworld HelloWorld2Controller Get
/api/v3/helloworld HelloWorld2Controller GetV3
Независимость от версии
DEMO
ASP.NET API Versioning
Как подружить Swashbuckle
и ASP.NET API Versioning?
•IOperationFilter
•IDocumentFilter
Удалить version параметр
Проставить version в пути
Включить в док по версии
DEMO
Swagger + ASP.NET API Versioning
Успешные API
1.Лёгкие в употреблении (TTFSC, TTFHW)
2.Понятно как нужно, нельзя как не нужно
3.Ничего не ломается при обновлении
4.Getting started, Multi language code
samples, SDKs
https://www.slideshare.net/biztalk360/everybody-loves-swagger
Что прикольного было в
WSDL?
Swagger + ASP.NET API
Versioning = Успешные API
1.Лёгкие в употреблении
2.Понятные
3.Не ломаются
при обновлении
4.Multi-language
generated code
Спасибо за
внимание
GitHub
github.com/xperiandri/
Social
fb.com/xperiandri
vk.com/xperiandri
twitter.com/xperiandri
YouTube
youtube.com/user/
andriicsharp
Спасибо за внимание
fb.com/xperiandri
twitter.com/xperiandri
vk.com/xperiandri
xperiandri@live.ru

Андрей Чебукин "Построение успешных API"

Editor's Notes

  • #8 Time to first successful call Time to first hello word Data formats, authentication, error codes
  • #9 Interface definition language
  • #10 https://github.com/nazar-pc/opir.org/wiki
  • #11 Независим, коммуникация между независимыми программными компонетами
  • #19 Чтобы спецификация соответствовала коду Одна точка обращения на версию
  • #26 Time to first successful call Time to first hello word Data formats, authentication, error codes
  • #27 в эргономике гласит, что если назначение элемента или сочетания неясно, то его поведение должно быть наиболее ожидаемым со стороны пользователя.
  • #33 https://github.com/Microsoft/aspnet-api-versioning
  • #37 Значит любая версия или без версии вообще
  • #45 Time to first successful call Time to first hello word Data formats, authentication, error codes
  • #50 Time to first successful call Time to first hello word Data formats, authentication, error codes