API

Cредства разработки

Сергей Маковеев / @sergeymakoveev

Тенденции

  • применение SPA в качестве архитектуры веб-приложений подразумевает выделение API в качестве обязательной структурной единицы приложения, наряду с frontend и backend

  • более высокая значимость API в SPA-приложениях по-сравнению с приложениями классической архитектуры

  • повысились требования к разработке API – его проектирование, моделирование, документирование и реализацию стали выделять в отдельные этапы

Практика

  • в начале процесса разработки приложения frontend и backend реализуют “наброски” API каждый собственными средствами

  • функциональные и интеграционные тесты frontend, backend и api зачастую требуют наличия “эталоной” реализации API

  • выделение API как равноправной части приложения подразумевает применение специализированных средств разработки (стандарты, языки, инструменты)

Необходима единая “площадка” для проектирования, документирования, моделирования и коммуникации со спецификацией API

Площадки для разработки API

  • документированный код встроенными средствами языка
    Javadoc (Java), JSDoc (Node JS/JavaScript), Docstring (Python)
    – механизм изначально предназначен не для проектирования
    – привязка к коду и языку

  • специализированные фреймворки
    JSON Server (NodeJS), Eve (Python)
    ✚ изначально предназначены для эмуляции
    ✚ позволяют реализовать эмуляцию API почти без кодирования
    ✚ используют синтаксис JSON
    – привязка к фреймворку

  • стандартизированные/специфицированные описания
    API Blueprint, Open API (Swagger), RAML
    ✚ изначально предназначены для полного стека разработки API
    ✚ используют доступный и общепринятый синтаксис (XML/JSON/YAML/Markdown)
    ✚ позволяют сосредоточится на проектировании
    ✚ поддержка в виде библиотек для различных языков и фреймворков
    ✚ множество инструментов и сервисов (клиенты, редакторы, эмуляторы, валидаторы)

Внимание!

Для корректной работы примеров в Chrome необходимо отключить:

  • контроль кросс-доменных запросов
  • контроль загрузки небезопасного контента

сhrome --disable-web-security --allow-running-insecure-content

API Blueprint GitHub starsa powerful high-level API description language for web APIs

  • преимущества:
    – наглядность, самодокументируемость
    – определен media type “text/vnd.apiblueprint”, расширение файлов “.apib”
    поддерживается GitHub
    – отличный онлайн-сервис app.apiary.io
  • недостатки:
    – синтаксис: поддерживается только Markdown, сложность восприятия структуры
    – авторизация/аутентификация: не реализовано
    – модульность: не реализовано
    – разработка: недостаточно активная

API Blueprint GitHub starsa powerful high-level API description language for web APIs

Инструменты:

Open API (Swagger) GitHub starsa simple yet powerful representation of your RESTful API

  • преимущества:
    – синтаксис: поддерживаются стандартные JSON и YAML
    – модульность, наследование, полиморфизм: реализовано
    – авторизация/аутентификация: реализовано
    – разработка: активная
    – редактор: прекрасная реализация
    – поддерживается Postman, app.apiary.io
  • недостатки:
    – отсутствует реализация эмулятора, для работы которого достаточно указать файл описания API

Open API (Swagger) GitHub starsa simple yet powerful representation of your RESTful API

Инструменты (core tools, community tools):

  • Swagger Editor GitHub stars npm, пример
    – редактор с подсветкой и валидацией синтаксиса
    – документированное представление с интерактивным клиентом
  • Swagger UI GitHub stars npm, пример
    – документированное представление с интерактивным клиентом

RAML GitHub stars
RESTful API Modeling Language

  • недостатки:
    – поддерживается только нестандартный Raml

RAML GitHub stars
RESTful API Modeling Language

Инструменты:

  • API Designer GitHub stars
    – редактор с подсветкой и валидацией синтаксиса
    – документированное представление с интерактивным клиентом
    пример, Instagram API zip
  • API Console GitHub stars
    – документированное представление с интерактивным клиентом
    пример

Заключение

Cуществуют развитые стандарты и спецификации, предназначенные для описания и документирования API с использованием доступного и общепринятого синтаксиса (XML/JSON/YAML/Markdown).

Для многих из них разработаны средства, позволяющие на основе этого описания:

  • генерировать документацию
  • моделировать API в виде независимого сервиса
  • генерировать код контроллеров для наиболее популярных фреймворков
  • настраивать роутинги и валидацию данных запросов внутри приложения
  • валидировать данные, которыми обмениваются backend и frontend

Ссылки