У меня есть требование перевести один город из одного штата в другой. Как мне спроектировать конечную точку REST для этой операции?
Насколько я могу судить, здесь нет хорошего ответа.
Обычно полезная эвристика - думать о том, как вы будете делать это на веб-сайте: вы загружаете какую-то форму, используете элементы управления вводом для описания ваших изменений, отправляете форму, а http-клиент POST
формирует форму данные в некоторый URI, указанный сервером.
Так что эта часть достаточно проста - URI может быть «чем угодно», потому что клиенту все равно; он просто использует URI в форме.
Сервер получит сообщение и обработает его. Побочные эффекты, которые изменяют другие ресурсы, возможны по усмотрению сервера, так что все в порядке.
Но история с кешированием не очень хороша. Семантика запроса «переместить» город изменяет представления исходного состояния, целевого состояния, возможно, также самого города. Мы можем расположить форму так, чтобы любой из этих ресурсов был признан недействительным в результате успешного ответа (просто используя этот идентификатор в качестве цели запроса), но у нас нет какого-либо стандартизированного механизма для аннулирования других ресурсов.
Если бы вся древовидная иерархия была описана одним ресурсом, тогда не было бы никакой проблемы - это был бы единственный ресурс, который мы аннулировали.
(Представьте себе википедию - вы вносите изменения на страницу для Boston
, и это также меняет страницу для Massachusetts
. Не существует стандартного способа сообщить клиенту, что обе страницы изменились.)