В чем преимущество использования Fractal перед toArray () в PHP

1

Я наткнулся на PHP Fractal, который показывает, что целью является обеспечение формата вывода между хранилищем и выходом (клиентом).

Я работаю с API уже более года, и я создал функции toArray() для большинства моих объектов, которые я хочу вернуть. С помощью Eloquent вы можете перегрузить функцию toArray() и украсить оттуда также, если вы привязали свою модель сущности к модели Eloquent.

Пример:

public function toArray()
{
    $array = parent::toArray();
    $array['extra'] = true;
    ...
    return $array;
}

Если Apis должен быть быстрым и легким, какие преимущества делает PHP League Fractal над реализацией toArray() или функцией формата ($ data) из репозитория/менеджера? Это связано с ООП? если так, может кто-нибудь показать пример?

Теги:
oop

1 ответ

0

Для меня преимущества следующие:

  • согласованный формат ответа, обеспечиваемый прохождением моделей через объекты ресурса Fractal
  • способность довольно легко изменять формат ответа во всем приложении с помощью простого переключателя сериализатора (например, от json-api до hal и, возможно, больше). Для json-api он делает скучные вещи, такие как разделение фактических данных ответа и корневых метаданных. Также вы можете легко изменить ответ в зависимости от заголовка Accept, который может быть сложнее с массивом (вам нужно будет его перестроить, и, конечно же, вы не хотите, чтобы этот беспорядок в вашем контроллере).
  • автоматизация генерации ссылок, например, для разбивки на страницы

Я думаю, что первые два не являются исключительными для Fractal, но будут целью иметь любую абстракцию для форматирования ответов.

Что для меня непонятно, где же что-то вроде Фрактала? Я большой поклонник представления о том, что модель должна быть способна представлять себя, как и с __toString. Но опять же можно утверждать, что это скорее проблема презентации, чем модель. С использованием фрактальной разбивки на страницы поддержка встраивания становится еще менее ясной, потому что (для меня) немного отстает от самой презентации.

Скорее всего, конечно, актуально, но вы можете оптимизировать в другом месте, например, путем кэширования всего содержимого ответа на что-то вроде лака или какого-либо пакета laravel, который выполняет аналогичную роль, если у вас нет инфраструктуры (остерегайтесь, что она не применима для каждого использования случай, авторизованные или разнообразные ответы, специфичные для пользователя).

Что касается примеров, я могу рекомендовать два, помимо документов пакета:

Хотелось бы увидеть некоторые записи о том, как что-то вроде Fractal может вписаться в более крупный, структурированный проект.

  • 1
    Спасибо за ваш ответ, я буду искать две рекомендуемые ссылки, потому что я не смог найти ничего существенного, что могло бы показать мне преимущество перед toArray (). Если я смогу обернуть это вокруг головы - я постараюсь написать небольшое продолжение, чтобы посмотреть, можно ли это использовать в более широкой картине.
  • 0
    С нетерпением жду этого. Я опубликовал связанный вопрос , так как не могу решить, как лучше абстрагировать форматирование ответов в API на основе Laravel.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню