iproger
@iproger
Безответственный гений

Как в Symfony работать с Rest?

Требуется работать с api в Symfony 4. Надо только получать данные, без update, delete.
Нашел подходящую либу DoctrineRestDriver для работы с rest api как с базой. Других каких-то серьезных решений не встречал для Symfony. Изучаю фрейм и не знаю многих решений.

Проблема.
В моем случае формат ответов api вообще не совпадает с предлагаемым в DoctrineRestDriver. Вместо условного body есть meta и data. В data уже хранится сам ответ. Поизучав либу, понял что не могу как-то кастомизировать поведение парсера. Внутри все жестко сделано и никак классы нельзя подменить.
В issues проекта есть вопрос: а что делать если формат ответа и запроса разный. Там же отвечают что либа не предназначена для этого. Видимо, кому не подошло - проходим.

Я могу сделать форк и добавить поддержку интерфейсов. Или даже просто переписать либу под себя. Возможно как-то в фрейме переопределить класс. Но не уверен что вообще стоит идти по такому пути. Уж слишком многое не подходит для решения моей задачи. Что если вообще сделать маленькую прослойку с использованием условного gazzle и в репозиториях сделать вызовы?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
prototype_denis
@prototype_denis
Symfony
Хотите с API работать через докрину?

Взгляните на https://github.com/doctrine/skeleton-mapper и на пример реализации https://github.com/Coffreo/ceph-odm

Да, придётся реализовать некоторые вещи, но вы не будете зависить от прибытых гвоздями форматов предлагаемые DoctrineRestDriver

А только имеет ли это смысл?

Если вам необходимо реализовать "смешанные" сущности, например у вас есть Product, а данные этого Product лежат в API - идеальным решением реализовать подгрузку данных на postLoad доктриновского события.

Нужны объекты, а не raw данные из API? Посмотрите в сторону того же JMS или симфониевского сериалайзера, которого с головой хватает в большинстве случаев.

Но всё это оправдано в том случае, если вам действительно нужно воткнуть работу с API под доктриновскую абстракцию...

> Что если вообще сделать маленькую прослойку с использованием условного gazzle и в репозиториях сделать вызовы?

Встречавшиеся мне реализации в реальных проектах - в 99% случаев именно так и поступают. (В некоторых - к сожалению, а в некоторых к счастью, потому что крайне просто поддерживать)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
21 июл. 2019, в 00:52
80000 руб./за проект
20 июл. 2019, в 19:38
10000 руб./за проект
20 июл. 2019, в 17:55
15000 руб./за проект