Как стать автором
Обновить

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

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

Ссылки


Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Как часто вы используете сгенерированный код?
14.52% Очень часто, сгенерированный код живет долго на реальных проектах35
33.2% Иногда, использую генераторы на стадии прототипирования, корректирую сгенерированный код под свои нужды80
18.67% Изредка, в учебных и демонстрационных проектах45
33.61% Никогда — генераторы от лукавого81
Проголосовал 241 пользователь. Воздержались 96 пользователей.
Теги:
Хабы:
Всего голосов 12: ↑10 и ↓2+8
Комментарии9

Публикации

Истории

Работа

PHP программист
199 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн