API
PHP
December 2016 29

Платформа для быстрого создания RESTful API

From Sandbox
За последние несколько лет мне пришлось создать много 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) — полёт нормальный.
+13
15.8k 127
Comments 11