Должен ли я реализовать маршрут PUT и PATCH?

Я пытаюсь понять разницу между PUT и PATCH. Если мне нужно создать маршрут для обновления ресурса, например User, должен ли я реализовать как PUT, так и PATCH?

Если я могу частично обновить ресурс с помощью PATCH, зачем мне использовать PUT?

это просто делает ваш API немного более гибким для реализации обоих. это совсем не нужно, но это зависит от дизайнера API (вас). PATCH хорош для обновления одного или двух полей, PUT хорош, когда я хочу быть уверенным, что отправляю полное представление ресурса.

bryan60 30.03.2021 05:08

Это своего рода повторяющийся вопрос. Пожалуйста, обратитесь к stackoverflow.com/questions/28459418/…

Anoop Gupta 30.03.2021 05:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 указывает, как использовать его в качестве патч-документ. Так что беспокойство о том, что клиент и сервер понимают одни и те же представления патчей, «уходит».

Другие вопросы по теме