February 2, 2016

Дизрапт недели: Swagger

Прошу любить и жаловать новую рубрику: "Дизрапт недели". В рубрике я рассказываю о самых прорывных технологиях, которые существенно меняют правила игры в тех или иных сферах.

Дизрапт этой недели — Swagger (читается "свогер") — это спецификация описания АПИ веб-сервисов.

Зачем это нужно? Т. к. спецификация машинно-читаемая, то на ее основе можно делать разные полезные вещи:

а) автоматически генерировать документацию к веб-сервису;

б) автоматически генерировать АПИ-клиенты к этому сервису;

в) автоматически генерировать шаблоны веб-сервисов;

Это очень актуально для микросервисных архитектур, где один микросервис может эксплуатироваться другими микросервисами, написанными на разных языках.

Спецификация описывается на YAML или JSON. Я предпочитаю первый вариант, потому что он самый понятный для человека. Вот так выглядит спецификация:

Вот так выглядит фрагмент документации, построенной по этой спецификации:

А теперь самое интересное: есть генератор АПИ-клиентов для множества языков:

android, async-scala, csharp, dart, flash, python-flask, java, javascript, jaxrs, inflector, jmeter, nodejs, objc, perl, php, python, qt5cpp, ruby, scala, scalatra, silex-PHP, sinatra, slim, spring-mvc, dynamic-html, html, swagger, swagger-yaml, swift, tizen, typescript-angular, typescript-node, akka-scala, CsharpDotNet2, clojure

Вот небольшой фрагмент АПИ-клиента для языка Objective-C:

Детали реализации обмена данными по HTTP протоколу скрыты от разработчика. Не нужно сосредотачиваться на таких деталях. Уже есть готовые высокоуровневые методы работы с веб-сервисом. Можно описать АПИ один раз и генерировать сразу два клиента, например, для мобильного приложения и для веб-сайта.

Такой способ описания АПИ сервера и генерация клиентов повышает производительность разработчика минимум в 10 раз.