- PVSM.RU - https://www.pvsm.ru -
Генераторы кода упрощают жизнь рядового разработчика, во всяком случае призваны это делать, избавляя его от скучного написания однотипного кода. Один из таких генераторов команда Sylius'a представила как подарок для коммьюнити к Рождеству.
Пару недель назад, проходя собеседования, я получил тестовое задание по написанию простенького REST API на чистом PHP и MySQL. На кодирование у меня ушло около четырех часов. Наткнувшись на твит загадочного @Lakion'a [1] о быстром создании REST API, заинтересовался и решил проверить сию новую зверюшку. Вот собственно пара слов о результатах.
Кратчайший путь достижения нашей цели описан в туториале [2] и требует от нас всего трех шагов:
Такое шаманство приведет к созданию пяти привычных 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
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/78199
Ссылки в тексте:
[1] @Lakion'a: https://twitter.com/Lakion
[2] туториале: http://lakion.com/lionframe
[3] Документация SyliusRestBundle'а: http://docs.sylius.org/en/latest/bundles/SyliusResourceBundle/index.html
[4] Пример реализации REST API с использованием Lionframe: https://github.com/holyspecter/lionframe-test
[5] Источник: http://habrahabr.ru/post/246827/
Нажмите здесь для печати.