- PVSM.RU - https://www.pvsm.ru -
За последние несколько лет мне пришлось создать много API на PHP. Большая часть из них была RESTful. Первый раз это было интересно — часы обсуждения формата ответа, содержимого ошибок, вариантов авторизации и прочей романтики. Во второй раз не покидало чувство дежавю. На третий раз уже было понятно — надо что-то менять…
Ну и на четвёртый раз, когда передо мной поставили задачу создания API, параллельно разработке основного проекта, я приступил к созданию универсальной платформы для создания API в котором уже будут решены все «главные» вопросы:
Как прагматичный человек сначала я поискал, что же есть готового. Кое-что таки есть.
Сайт: api-platform.com [1]
Очень мощное решение. Сделано на основе php-фреймворка Symfony. Есть всё что нужно и даже больше. Наверно, для тех кто любит программирование через конфигурации и Symfony, это то что нужно. Увы я не отношусь к этой категории.
Сайт: apigility.org [2]
Не менее мощное решение. На этот раз на основе фреймворка Zend. Это даже какая-то CMS для создания API, причём и RESTful и RPC. Наверно, для тех кто любит программирование с помощью мышки, это то что нужно. Увы я и к этой категории не отношусь.
Есть и другие решения, вот неплохая подборочка [3].
Но в итоге ничего милого моему сердцу выбрать не удалось. Зато удалось сформировать несколько принципов и требований к будущему проекту:
Америки я не открыл. Просто взял хорошие компоненты, собрал их вместе, написал весь необходимый 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
Нажмите здесь для печати.