Pull to refresh

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

Reading time 2 min
Views 18K
Генераторы кода упрощают жизнь рядового разработчика, во всяком случае призваны это делать, избавляя его от скучного написания однотипного кода. Один из таких генераторов команда 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: MyApp\Entity\EntityName   # required
                interface: MyApp\Entity\EntityKeyInterface
                controller: Sylius\Bundle\ResourceBundle\Controller\ResourceController
                repository: Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository

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

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

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

Итоги


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

Ссылки


Only registered users can participate in poll. Log in, please.
Как часто вы используете сгенерированный код?
14.52% Очень часто, сгенерированный код живет долго на реальных проектах 35
33.2% Иногда, использую генераторы на стадии прототипирования, корректирую сгенерированный код под свои нужды 80
18.67% Изредка, в учебных и демонстрационных проектах 45
33.61% Никогда — генераторы от лукавого 81
241 users voted. 96 users abstained.
Tags:
Hubs:
+8
Comments 9
Comments Comments 9

Articles