REST API за пару хвилин з Lionframe

Генератори коду спрощують життя пересічного розробника, у всякому разі покликані це робити, позбавляючи його від нудного написання однотипного коду. Один з таких генераторів команда 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). Тепер спробуємо зрозуміти що відбувається під капотом.

Отже, створення і маппінг суті ми віддали на відкуп генератора для 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, який і створює всі п'ять маршрутів для кожного ресурсу. При створенні ДО а використовується множинна форма назви ресурсу (в даному випадку — artists). Сенс параметра type в тому, щоб система роутінга могла відрізнити дані специфічні роуты від звичайних і відповідно для перших смикати ApiLoader.

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

Посилання

Як часто ви використовуєте згенерований код?

/>
/>


<input type=«radio» id=«vv64315»
class=«radio js-field-data»
name=«variant[]»
value=«64315» />
Дуже часто, згенерований код живе довго на реальних проектах
<input type=«radio» id=«vv64317»
class=«radio js-field-data»
name=«variant[]»
value=«64317» />
Іноді, використовую генератори на стадії прототипування, коригую згенерований код під свої потреби
<input type=«radio» id=«vv64319»
class=«radio js-field-data»
name=«variant[]»
value=«64319» />
Зрідка, в навчальних і демонстраційних проектах
<input type=«radio» id=«vv64321»
class=«radio js-field-data»
name=«variant[]»
value=«64321» />
Ніколи — генератори від лукавого

Проголосувало 10 осіб. Утрималося 5 чоловік.


Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.