RESTful решение пользовательской логики при изменении свойств объекта - PullRequest
0 голосов
/ 23 июня 2019

Каков наилучший (из-за отсутствия лучшего слова) способ реализации дополнительной логики для случая, когда конкретные свойства объекта изменяются? Например, свойство syncing изменено с false на true. Когда клиент PUT получает ресурс с измененным полем, необходимо отправить HTTP-запрос стороннему API, чтобы включить / отключить эту функцию на своем конце.

Я не могу выбрать один из следующих вариантов:

  1. Контроллеры пользовательских операций для переключения значения свойства (например, PUT /room/{id}/syncing, DELETE /room/{id}/syncing)
  2. Контроллер для PUT /room/{id} и для проверки, изменилось ли значение в запросе по сравнению с тем, что существует в базе данных
  3. Прослушиватель событий в событии onKernelController, чтобы обнаружить изменения в свойстве объекта

Ответы [ 3 ]

0 голосов
/ 23 июня 2019

Попробуйте PATCH, в отличие от PUT, это предназначено для обновления только части ресурса.Если ресурс представляет сущность, patch подходит лучше всего, если вы хотите изменить только одно свойство сущности.

PATCH /room/{id}
0 голосов
/ 24 июня 2019

В конце я решил добавить прослушиватель событий на своем уровне доступа к данным для рассматриваемой сущности и выполнить дополнительную логику и сторонний API-запрос onUpdate, onPersist и onRemove. Это казалось наиболее подходящим местом для добавления этой логики, поскольку она будет выполняться везде, где изменяется сущность

0 голосов
/ 23 июня 2019

Согласно стандарту ваш лучший выбор - второй:

PUT /room/{id}

В теле запроса вы добавите значение синхронизации, а в контроллере вы обновите значение в базе данных.

...