PUT
и PATCH
имеют различную семантику сообщений, но основной контекст («удаленная авторизация») одинаков.В обоих случаях запрос клиента: «Пожалуйста, сервер, сделайте так, чтобы ваше представление этого ресурса совпадало с моей локальной копией».
Например, я GET
документ JSON с сервера.Я делаю локальные правки к нему.Теперь я хочу «сохранить» свои изменения на сервере.Если документ скромный по размеру, я мог бы просто отправить весь пересмотренный документ по сети.Если документ очень большой, а мои изменения скромные, то вместо этого я мог бы вместо этого отправить патч.
Если вы представляете себе использование HTTP для публикации изменений веб-страниц HTML на сервере, то у вас естьправильная система отсчета.Нет большой практической разницы между «пожалуйста, исправьте заголовок вашей копии документа» и «вот новая полная копия документа, с моим редактированием заголовка».Байты на диске будут одинаковыми в любом случае.
Учитывая это, было бы очень странно, если бы эти два метода публикации новой редакции документа имели совершенно разные побочные эффекты.
Ваш третий подход, основанный на изменении /products
, потенциально хорош как для вашего индивидуума, так и для партии.Сервер получает новое представление /products
(или документ исправления, описывающий изменения), решает, принимать ли изменения и, если да, вычисляет, что ему нужно сделать, с его собственной базой данных, чтобы все заработало.
Примечание:
Запрос PUT, примененный к целевому ресурсу, может иметь побочные эффекты для других ресурсов.
Спецификация HTTP относительно строга в отношении сообщения означает , но предлагает серверу много возможностей для поведения в ответ.