REST API за пару минут с Lionframe
Генераторы кода упрощают жизнь рядового разработчика, во всяком случае призваны это делать, избавляя его от скучного написания однотипного кода. Один из таких генераторов команда Sylius’a представила как подарок для коммьюнити к Рождеству.ПредисловиеПару недель назад, проходя собеседования, я получил тестовое задание по написанию простенького REST API на чистом PHP и MySQL. На кодирование у меня ушло около четырех часов. Наткнувшись на твит загадочного @Lakion’a о быстром создании REST API, заинтересовался и решил проверить сию новую зверюшку. Вот собственно пара слов о результатах.Генерация API Кратчайший путь достижения нашей цели описан в туториале и требует от нас всего трех шагов: Генерация сущности, которая будет являтся ресурсом нашего сервиса. Конфигурация SyliusResourceBundle’a. Конфигурация роутинга. Такое шаманство приведет к созданию пяти привычных 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’ом — несколько минут. КО подтверждает что генераторы кода несут добро. Также хотелось бы поинтересоваться у хабражителей насколько часто используются всяческие генераторы кода в реальных коммерческих проектах и какая часть сгенерированного кода доживает хотя бы до середины проекта? Ссылки
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
