[Из песочницы] Платформа для быстрого создания RESTful API

За последние несколько лет мне пришлось создать много API на PHP. Большая часть из них была RESTful. Первый раз это было интересно — часы обсуждения формата ответа, содержимого ошибок, вариантов авторизации и прочей романтики. Во второй раз не покидало чувство дежавю. На третий раз уже было понятно — надо что-то менять…

Ну и на четвёртый раз, когда передо мной поставили задачу создания API, параллельно разработке основного проекта, я приступил к созданию универсальной платформы для создания API в котором уже будут решены все «главные» вопросы:

  1. Формат ответа (в том числе и ошибок)
  2. Форматирование даты
  3. Ведение документации
  4. Авторизации и аутентификации
  5. Валидация запросов
  6. и многое другое

Как прагматичный человек сначала я поискал, что же есть готового. Кое-что таки есть.

api-platform


Сайт: api-platform.com
Очень мощное решение. Сделано на основе php-фреймворка Symfony. Есть всё что нужно и даже больше. Наверно, для тех кто любит программирование через конфигурации и Symfony, это то что нужно. Увы я не отношусь к этой категории.

apigility


Сайт: apigility.org
Не менее мощное решение. На этот раз на основе фреймворка Zend. Это даже какая-то CMS для создания API, причём и RESTful и RPC. Наверно, для тех кто любит программирование с помощью мышки, это то что нужно. Увы я и к этой категории не отношусь.

Есть и другие решения, вот неплохая подборочка.

Но в итоге ничего милого моему сердцу выбрать не удалось. Зато удалось сформировать несколько принципов и требований к будущему проекту:

  1. Код, а не аннотации и конфигурации
  2. Никаких UI
  3. Создание полностью готового API одной командой
  4. Автогенерация документации. Желательно по коду, а не из аннотаций
  5. Простота
  6. Минимум велосипедов

Моё решение


Америки я не открыл. Просто взял хорошие компоненты, собрал их вместе, написал весь необходимый boilerplate-код для работы и собрал composer проект.

Краеугольный камень — это стандарт представления jsonapi. С помощью него решены почти все «холиварные» вопросы. Мне осталось только принять решение по формату запросов с фильтрацией, сортировкой и постраничной навигацией. За вывод отвечает пакет json-api от neomerx (Кстати, не так давно он тоже собрал свой api starter pack).

В качестве основы я выбрал Slim3. Грамотно спроектированный, быстрый, легко расширяемый и простой.

Для работы с БД ORM Eloquent. Удобная, сравнительно быстрая и простая.

Работу с правами и контролем доступа построил на основе Zend ACL. На удивление простой пакет для работы с правами.

Авторизация на основе JWT токенов

Документацию генерирую по комментариям написанным в коде с помощью ApiDocJS. Почему не Swagger? Пробовал и его, но мне apidoc понравился больше.

Код размещён на github, проект доступен на packagist.

Сразу после установки у вас будет полностью готовое API со всем необходимым. Буду рад, если кто-то применит пакет в работе. Я уже успел сделать 1 проект на нём (+ тот проект, который делал параллельно с bootstrapi) — полёт нормальный.

Комментарии (1)

  • 29 декабря 2016 в 14:16

    0

    Раз уж были упомянуты решения на базе Symfony и Zend, я бы хотел дополнить список решением на Laravel — DreamFactory. Позиционируется как BaaS решение. Есть как онлайн сервис (без установки у себя на сервере), так и бесплатная/платные standalone версии, умеет генерировать API как к популярным СУБД, так и другим API, файлохранилищам и т.д. Есть примеры интеграции с Android / iOS / React / Angular 1&2.

© Habrahabr.ru