geektimes

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

  • суббота, 27 декабря 2014 г. в 02:11:36
http://habrahabr.ru/post/246827/

Генераторы кода упрощают жизнь рядового разработчика, во всяком случае призваны это делать, избавляя его от скучного написания однотипного кода. Один из таких генераторов команда 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'ом — несколько минут. КО подтверждает что генераторы кода несут добро. Также хотелось бы поинтересоваться у хабражителей насколько часто используются всяческие генераторы кода в реальных коммерческих проектах и какая часть сгенерированного кода доживает хотя бы до середины проекта?

Ссылки


Как часто вы используете сгенерированный код?

Проголосовал 141 человек. Воздержалось 64 человека.

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