Платформа для быстрого создания 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) — полёт нормальный.
Поделиться публикацией

Похожие публикации

Комментарии 11

    0
    Раз уж были упомянуты решения на базе Symfony и Zend, я бы хотел дополнить список решением на Laravel — DreamFactory. Позиционируется как BaaS решение. Есть как онлайн сервис (без установки у себя на сервере), так и бесплатная/платные standalone версии, умеет генерировать API как к популярным СУБД, так и другим API, файлохранилищам и т.д. Есть примеры интеграции с Android / iOS / React / Angular 1&2.
      0
      swagger хорош
        0
        Ну некоторые прям в БД реализовывают. Прикольно, конечно, но не более того.
          0
          Кстати, почему нет?
            0
            Если нужен только доступ к данным, то без проблем, но, как правило, на бэкенде ещё есть некая логика: авторизация, валидация данных с клиента, очередь задач… Это всё можно сделать и хранимками (в pgadmin4 даже дебаггер есть), но проще прикрутить какой-нибудь Django или Yii. Так решение получится более сопровождаемое.
              0
              Именно поэтому и сделан bootstrapi. Тонкая надстройка для имплементации бизнес-логики над уровнем данных. Ну и кроме всего прочего — полностью готовая к работе после установки, все типовые вещи повторяющиеся из проекта в проект уже включены и настроены.
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            Тот случай, когда думаешь о том же, а уже кто-то реализовал. Спасибо, попробую ваш продукт в своём проекте.
              0
              А чем это отличается от Yii Rest например?
                0
                Во-первых bootstrapi уже полностью готов к работе после установки, а Yii Rest это модуль и вам нужно будет его «приготовить». Это ключевая разница. Во-вторых в bootstrapi настроен jsonapi, с Yii Rest вам нужно будет либо самостоятельно изобретать формат, либо имплементировать jsonapi. Вопрос с документацией опять же придётся решать.
                Кстати, первое API, которое я упоминал в статье я делал на Yii1, а второе на Yii2 с этим модулем. Это очень хороший инструмент.
                0
                Сижу и пытаюсь придумать свой такой же велосипед для одного нового проекта. То есть тоже выбираю наиболее подходящие компоненты (и более близкие мне) под новое решение. И только поэтому внимательно разобрал всю статью. Было бы неплохо какой-то пример добавить создания на базе этого решения пары сущностей. Это могло бы заинтересовать больше читателей, как мне кажется, а то приведен стек технологий без особого понимания, как это далее «готовить»…

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое