REST API за пару минут с Lionframe

в 23:06, , рубрики: api, php, rapid application development, rest api, symfony, symfony2

Генераторы кода упрощают жизнь рядового разработчика, во всяком случае призваны это делать, избавляя его от скучного написания однотипного кода. Один из таких генераторов команда Sylius'a представила как подарок для коммьюнити к Рождеству.

Предисловие

Пару недель назад, проходя собеседования, я получил тестовое задание по написанию простенького REST API на чистом PHP и MySQL. На кодирование у меня ушло около четырех часов. Наткнувшись на твит загадочного @Lakion'a о быстром создании REST API, заинтересовался и решил проверить сию новую зверюшку. Вот собственно пара слов о результатах.

Генерация API

Кратчайший путь достижения нашей цели описан в туториале и требует от нас всего трех шагов:

  1. Генерация сущности, которая будет являтся ресурсом нашего сервиса.
  2. Конфигурация SyliusResourceBundle'a.
  3. Конфигурация роутинга.

Такое шаманство приведет к созданию пяти привычных CRUD-методов: index (метод GET), show (GET), create (POST), update (PUT/PATCH), delete (DELETE). Теперь попробуем понять что происходит под капотом.

Итак, создание и маппинг сущности мы отдали на откуп генератору для Doctrine, который создал нам красивую сущность с методами доступа к описанным нами свойства и метаданные в выбранном нами формате. Основой же всей магии является SyliusResourceBundle, конфигурация которого позволяет добавлять пользовательские ресурсы таким образом:

sylius_resource:
    resources:
        my_app.entity_key:
            driver: doctrine/orm   # required
            manager: default
            templates: App:User
            classes:
                model: MyAppEntityEntityName   # required
                interface: MyAppEntityEntityKeyInterface
                controller: SyliusBundleResourceBundleControllerResourceController
                repository: SyliusBundleResourceBundleDoctrineORMEntityRepository

Обязательными являются всего два параметра: driver и classes.model. Если мы не определяем кастомный контроллер, то будет использоваться ResourceController, любезно предоставленный нам Sylius'ом.

Еще один интересный момент Lionframe'a — роутинг. Туториал предлагает нам сконфигурировать его так:

acme_artist:
    resource: acme.artist
    type: sylius.api

Чтобы эти два параметра превратились в пять маршрутов используется ApiLoader и конкретно его метод load, который и создает все пять маршрутов для кажого ресурса. При создании URL'а используется множественная форма названия ресурса (в данном случае — artists). Смысл параметра type в том, чтобы система роутинга могла отличить данные специфические роуты от обычных и соответственно для первых дергать ApiLoader.

Итоги

Создание самого деревянного REST API своими руками — несколько часов, с Lionframe'ом — несколько минут. КО подтверждает что генераторы кода несут добро. Также хотелось бы поинтересоваться у читателей насколько часто используются всяческие генераторы кода в реальных коммерческих проектах и какая часть сгенерированного кода доживает хотя бы до середины проекта?

Ссылки

Автор: hospect

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js