PUT означает, что спецификация HTTP определяет это значение. Клиенты и серверы не могут изменить это значение. Если клиенты или серверы используют PUT таким образом, который противоречит его определению, может произойти, по крайней мере, следующее:
Путь по определению идемпотент. Это означает, что клиент (или посредник!) Может повторять PUT любое количество раз и быть уверенным, что эффект будет таким же. Предположим, что посредник получает запрос PUT от клиента. Когда он пересылает запрос на сервер, возникает проблема с сетью. Посредник по определению знает, что он может повторить PUT, пока не добьется успеха. Если сервер использует PUT без идемпотентного способа, эти потенциальные множественные вызовы будут иметь нежелательный эффект.
Если вы хотите выполнить частичное обновление, используйте PATCH или POST для подресурса и верните 303 См. Другое для основного ресурса, например
POST /account/445/owner/address
Content-Type: application/x-www-form-urlencoded
street=MyWay&zip=22222&city=Manchaster
303 See Other
Location: /account/445
РЕДАКТИРОВАТЬ: На общий вопрос, почему частичные обновления не могут быть идемпотентными:
Частичное обновление вообще не может быть идемпотентом, потому что идемпотентность зависит от семантики типа носителя. Таким образом, вы можете указать формат, который допускает идемпотентные пластыри, но нельзя гарантировать, что PATCH будет идемпотентным для каждого случая. Поскольку семантика метода не может быть функцией типа носителя (по причинам ортогональности), PATCH необходимо определить как неидемпотентный. И PUT (определяемый как идемпотент) не может использоваться для частичных обновлений.