Я пытаюсь понять разницу между PUT и PATCH. Если мне нужно создать маршрут для обновления ресурса, например User, должен ли я реализовать как PUT, так и PATCH?
Если я могу частично обновить ресурс с помощью PATCH, зачем мне использовать PUT?
Это своего рода повторяющийся вопрос. Пожалуйста, обратитесь к stackoverflow.com/questions/28459418/…





I am trying to learn the difference between PUT and PATCH.
Начнем с "как они такие же?"
СТАВИТЬ и ПЛАСТЫРЬ используются в контексте удаленной разработки; мы используем эту семантику сообщения, чтобы сообщить серверу, чтобы его собственное представление некоторого ресурса выглядело как наша локальная копия.
Например, если бы я хотел изменить заголовок домашней страницы своего веб-сайта, я мог бы
GET /home.html
чтобы загрузить текущую версию в мой HTML-редактор. После этого я мог внести изменения в свою локальную копию. Чтобы опубликовать свои изменения, я отправляю на сервер сообщение «сделайте вашу копию как мою копию».
С PUT полезная нагрузка запроса - это полная копия моей версии документа. Я отправляю весь документ обратно на сервер для обработки.
С помощью PATCH я создаю «патч-документ», то есть представление моих изменений с использованием некоторого типа носителя, который понимает сервер. Ожидается, что сервер вычислит новое представление для себя, применив патч-документ к его локальной копии.
PUT имеет семантику идемпотент; Это означает, что компоненты общего назначения, такие как веб-браузеры и обратные прокси-серверы, знают, что несколько копий одного и того же запроса, полученные последовательно, означают то же самое, что и одна копия этого запроса. Это означает, что в случае сбоя сети, когда запрос или ответ могли быть потеряны, мы можем автоматически Отправить запроса.
PATCH не обещает идемпотентную обработку - даже если патч-документ описывает идемпотентное изменение ресурса, компоненты общего назначения не будут знать, что запрос безопасен для повторной отправки.
С другой стороны, если ваш документ больше (по сравнению с размером заголовков HTTP) и ваши изменения небольшие, то документ исправления будет меньше, чем полное представление; если сеть достаточно надежна, меньшие запросы могут иметь больше шансов на инвестиции, чем повторяющиеся запросы.
Самая гибкая игра, конечно, заключается в том, чтобы поддерживать оба, а также описывать оба метода и типы носителей поддерживаемых вами форматов исправлений в ответ на запрос ПАРАМЕТРЫ. Это позволяет клиенту выбрать подходящий метод в зависимости от своего локального контекста.
PATCH требует большей совместимости, чем PUT, потому что клиент и сервер должны понимать один и тот же тип носителя исправления (в дополнение к пониманию типа носителя самого представления).
Так что вам, вероятно, лучше использовать PUT, а затем дополнить его PATCH в качестве альтернативы в условиях, когда клиенту необходимо оптимизировать, а не наоборот.
Если вы делаете что-то очень конкретное, общие рекомендации могут не применяться.
Например, если вы реализуете JSON: API, предназначенный для клиентов JSON: API, тогда вы захотите использовать PATCH, потому что JSON: API занимает довольно своеобразное положение на использование PUT, а application/vnd.api+json указывает, как использовать его в качестве патч-документ. Так что беспокойство о том, что клиент и сервер понимают одни и те же представления патчей, «уходит».
это просто делает ваш API немного более гибким для реализации обоих. это совсем не нужно, но это зависит от дизайнера API (вас). PATCH хорош для обновления одного или двух полей, PUT хорош, когда я хочу быть уверенным, что отправляю полное представление ресурса.