- PVSM.RU - https://www.pvsm.ru -

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

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

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

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


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

api-platform

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

apigility

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

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

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

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

Моё решение

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

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

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

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

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

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

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

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

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

Автор: kot5150

Источник [14]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/227075

Ссылки в тексте:

[1] api-platform.com: https://api-platform.com/

[2] apigility.org: https://apigility.org/

[3] подборочка: https://github.com/ziadoz/awesome-php#api

[4] jsonapi: http://jsonapi.org/

[5] json-api: https://github.com/neomerx/json-api

[6] api starter pack: https://github.com/neomerx/limoncello-flute

[7] Slim3: http://www.slimframework.com/

[8] ORM Eloquent: https://laravel.com/docs/5.3/eloquent

[9] Zend ACL: https://zendframework.github.io/zend-permissions-acl/

[10] JWT токенов: https://github.com/firebase/php-jwt

[11] ApiDocJS: http://apidocjs.com/

[12] github: https://github.com/kot13/bootstrapi

[13] packagist: https://packagist.org/packages/pmurkin/bootstrapi

[14] Источник: https://habrahabr.ru/post/318724/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox