Подтвердить что ты не робот

Структура клиента Symfony2 ReST

Я пытаюсь создать образец лучшей практики для клиентов ReST в Symfony 2, поскольку это очень распространенная работа для нас в моей компании, где у нас есть приложения Symfony на фронте интерфейса, говорящие на основе Java на основе HTTP/ReST.

Мое мышление заключается в том, что эти сервисы заполняют роль "Репозиторий" в DDD для конкретного домена. Основываясь на соглашениях, определенных Doctrine, они будут находиться в классах репозитория, которые возвращают объекты Entity.

Я думаю, что такое же соглашение может работать и здесь, клиент ReST реализует класс репозитория, используя библиотеку, такую ​​как Guzzle или просто прямой Curl, не имеет значения, как, а затем в коде существуют базовые преобразования из XML или JSON из и назад к объектам Entity для разработчика вверх по течению для управления. Это согласуется с шаблонами в других случаях использования Symfony 2 и имеет смысл с точки зрения DDD.

Кто-нибудь видит проблему с этим или лучший способ сделать это?

4b9b3361

Ответ 1

Ниже приведена лучшая статья для разработки REST API в symfony2:
http://welcometothebundle.com/symfony2-rest-api-the-best-2013-way/

FOSRestBundle и NelmioApiDocBundle - хороший выбор для быстрого развития api. Вы можете посетить официальную документацию, чтобы узнать, как ее установить, настроить и использовать.

Ответ 2

Мне нравится подход, который вы наметили. Вы можете представить свои хранилища как уровень защиты от коррупции, который изолирует ваш код клиента ReST от вашей модели домена.

Ответ 3

Это работает, если вы правильно рассмотрите все задействованные слои кэширования, чтобы убедиться, что ваш репозиторий не будет кэшировать за пределами TTL объекта REST, который вы извлекаете (как установлено etags или expire headers или независимо от того, что использует сервер REST).

Определенно Repository - это правильный уровень, хотя, возможно, в Symfony вы хотите перейти на один уровень выше и считать его менеджером сущностей, поскольку он позволит вам абстрагироваться от операций на этом уровне, таких как сохранение, удаление и очистка.

Ответ 4

Я думаю, что вы неправильно используете репозитории в Symfony, если вы планируете использовать их так. Было бы лучше иметь сеттеры и геттеры внутри вашего репозитория и обработку с помощью gzzle/curl, чтобы сделать в службе.

Контроллер/Команда → Сервисные методы → Репозиторий

Затем, в зависимости от ваших потребностей, вы можете написать команду/контроллер, чтобы разоблачить методы в службе на основе ваших потребностей.