Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Даниил Доронкин «Версионирование API»

Даниил Доронкин «Версионирование API»

В докладе будут расмотрены все тонкости версионирования програмного обеспечения. В частности семантическое версионирование, секрет его популярности и области применения. Конечно, затронем версионирование Web API и практические сценарии его использования. Разберём поддержку в библиотеке Microsoft ASP.NET API Versioning и её интеграцию с пакетом Swagger.

DotNetRu

May 24, 2018
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. 3 Ассоциации ▪ Уникальное имя; ▪ Эволюция ПО; ▪ Стадия

    готовности; ▪ Минимальное документирование. 3
  2. 4 Примеры ▪ C# 7.2, Python 3.6.4; ▪ .net core

    2.0.6, NodeJs 9.7.1; ▪ VueJs 2.0, Swashbuckle 2.3.0; ▪ http://sdb.amazonaws.com?...&Version=2009-04-15&... ; ▪ Corel Draw 11; ▪ Windows 2000; ▪ Delphi XE; ... 4
  3. 8 8

  4. 11 Существующие подходы ▪ Целое число: Corel Draw 10; ▪

    Текст: Delphi XE; ▪ Семантическое версионирование: .net core 2.0.6; ▪ Стадия разработки: AspNet.SignalR.Core 1.0.0-alpha1; ▪ Календарное версионирование: Rider 2018.1 ... 11
  5. 12 SemVer ▪ X.Y.Z, где X, Y и Z –

    неотрицательные целые числа; ▪ X – мажорная версия, Y – минорная версия, Z – патч- версия; 12 1. 5. 4 major minor patch
  6. 16 Расширение номера версии 16 ▪ Суффикс для отображения стадии

    разработки; 1.0.0-beta2 ▪ Сборочные метаданные. 1.0.0-beta+exp.sha.5114f85
  7. 17 Изменения версии ▪ Версия 0.Y.Z до первого релиза; ▪

    После релиза содержимое пакета не изменяется. 17
  8. 19 Функциональность устарела ▪ Увеличьте minor-версию: 1.0.0 -> 1.1.0; ▪

    Увеличьте major-версию после удаления: 1.1.0 -> 2.0.0. 19
  9. 22 Внутренние зависимости обновлены 22 ▪ Могут быть рассмотрены как

    внутренние изменения; ▪ Обновлены для правки багов - patch-релиз.
  10. 23 Breaking changes в minor релизе 23 ▪ Верните обратную

    совместимость в новом minor релизе; ▪ Отразите данную проблему в документации; ▪ Проинформируйте пользователей.
  11. 25 Breaking changes вне спецификации 25 ▪ Ориентируйтесь по ситуации;

    ▪ Попробуйте решить проблему напрямую с клиентом; ▪ Обновите спецификацию в minor релизе и следом опубликуйте major релиз с исправлениями.
  12. 35 URL 35 ▪ https://app.com/api/v1.0/<params> - Отдельная точка доступа под

    каждую версию; - Не REST; + Версия всегда на виду; + Легко тестировать.
  13. 36 Content negotiation 36 ▪ accept, content-type; - Тестировать сложнее;

    - Требуется обработка заголовков; + Один ресурс - одна точка доступа; + REST;
  14. 37 Query parameter 37 ▪ https://app.com/api/<params>?api-version=1.0 - Размер URL; -

    Непрозрачное поведение если Query parameter не передан. + Одна и та же endpoint для всех версий; + Версия видна в адресной строке;
  15. 42 Кастомизация ▪ Способ отправки версии в запросе; ▪ Кастомные

    version-атрибуты; ▪ Переопределение Error response; ... 42
  16. 46 Подводные камни ▪ Media type API version reader; ▪

    Microsoft.AspNetCore.OData; ▪ Issues на Github. 46