Подтвердить что ты не робот

В чем основное отличие между запросами PATCH и PUT?

Я использую запрос PUT в моем приложении Rails. Теперь новый браузер HTTP PATCH был реализован браузерами. Итак, я хочу знать, каково основное различие между запросами PATCH и PUT, и когда мы должны использовать тот или иной.

4b9b3361

Ответ 1

HTTP-глаголы, вероятно, являются одной из самых загадочных вещей в протоколе HTTP. Они существуют, и их много, но почему они существуют?

Rails, похоже, хочет поддерживать множество глаголов и добавлять некоторые глаголы, которые не поддерживаются веб-браузерами изначально.

Вот исчерпывающий список http-глаголов: http://annevankesteren.nl/2007/10/http-methods

Там патч HTTP из официального RFC: https://datatracker.ietf.org/doc/rfc5789/?include_text=1

Метод PATCH требует, чтобы набор изменений, описанных в объект запроса применяется к ресурсу, идентифицированному Request- URI. Набор изменений представлен в формате "patch" документ ", идентифицированный типом мультимедиа. Если Request-URI не укажите на существующий ресурс, сервер МОЖЕТ создать новый ресурс, в зависимости от типа патча (может ли он логически модифицировать нулевой ресурс) и разрешений и т.д.

Разница между запросами PUT и PATCH отражается в как сервер обрабатывает закрытый объект для изменения ресурса идентифицированных Request-URI. В запросе PUT закрытый объект считается модифицированной версией ресурса, хранящегося на исходный сервер, и клиент запрашивает, чтобы сохраненная версия была заменены. С помощью PATCH вложенный объект содержит набор инструкции, описывающие, как ресурс, находящийся в настоящее время на исходный сервер должен быть изменен для создания новой версии. PATCH метод влияет на ресурс, идентифицированный Request-URI, и он также МОЖЕТ иметь побочные эффекты для других ресурсов; то есть новые ресурсы могут быть созданных или существующих, с помощью приложения PATCH.

Насколько я знаю, глагол PATCH не используется так, как он есть в приложениях rails... Как я понимаю, глагол patch RFC должен использоваться для отправки инструкций патча, например, когда вы выполняете разницу между двумя файлами. Вместо того, чтобы отправлять весь объект снова, вы отправляете патч, который может быть намного меньше, чем отправка всей сущности.

Представьте, что вы хотите редактировать огромный файл. Вы редактируете 3 строки. Вместо отправки файла обратно вам просто нужно отправить diff. С положительной стороны отправка запроса патча может быть использована для асинхронного объединения файлов. Система управления версиями может потенциально использовать глагол PATCH для удаленного обновления кода.

Один из возможных вариантов использования несколько связан с базами данных NoSQL, можно хранить документы. Скажем, мы используем структуру JSON для отправки назад и вперед данных с сервера клиенту. Если бы мы хотели удалить поле, мы могли бы использовать синтаксис, подобный синтаксису в mongodb для $unset. Фактически, метод, используемый в mongodb для обновления документов, может быть, вероятно, использован для обработки json-патчей.

Взяв этот пример:

db.products.update(
   { sku: "unknown" },
   { $unset: { quantity: "", instock: "" } }
)

У нас могло бы быть что-то вроде этого:

PATCH /products?sku=unknown
{ "$unset": { "quantity": "", "instock": "" } }

Наконец, но не в последнюю очередь, люди могут сказать все, что они хотят о HTTP-глаголах. Существует только одна истина, и правда в RFC.

Ответ 2

Я провел пару часов с Google и нашел ответ здесь

PUT = >   Если пользователь может обновить все или только часть записи, используйте PUT (пользователь контролирует, что обновляется)

PUT /users/123/email
[email protected]

PATCH = >   Если пользователь может обновить только частичную запись, скажите только адрес электронной почты (приложение контролирует, что можно обновить), используйте PATCH.

PATCH /users/123
[description of changes]

Почему Patch

PUT метод требует большей пропускной способности или обрабатывает полные ресурсы вместо этого на частичном. Поэтому для уменьшения полосы пропускания был введен Patch.

Объяснение PATCH

Patch - это метод, который не является безопасным и не позволяет использовать полные и частичные обновления и побочные эффекты для других ресурсов.

Patch - это метод, в который заключенный объект содержит набор инструкций, описывающих, как ресурс, находящийся в настоящее время на исходном сервере, должен быть изменен для создания новой версии.

PATCH /users/123
[
  { "op": "replace", "path": "/email", "value": "[email protected]" }
]

Здесь более подробная информация о put и patch

Ответ 3

положить
если я хочу изменить свое имя first, отправьте запрос put для обновления

{ "first": "Nazmul", "last": "hasan" } 

но здесь есть одна проблема: put запросить, чтобы, когда я хочу отправить запрос put, я должен отправить все два параметра, которые first и last
поэтому необходимо снова отправить все значения

патч:
patch запрос говорит. отправьте только data, который вы хотите update, и это не повлияет или не изменит другие данные.
поэтому больше не нужно отправлять все значения. просто я хочу обновить свое имя, поэтому мне нужно отправить только имя first для обновления.

Ответ 4

Есть ограничения в PUT over PATCH при создании обновлений. Использование PUT требует от нас указать все атрибуты, даже если мы хотим изменить только один атрибут. Но если мы используем метод PATCH, мы можем обновить только те поля, которые нам нужны, и нет необходимости упоминать все поля. PATCH не позволяет нам изменять значение в массиве или удалять атрибут или запись массива.

Ответ 5

Вот разница между методами POST, PUT и PATCH протокола HTTP.

СООБЩЕНИЕ

Метод HTTP.POST всегда создает новый ресурс на сервере. Это неидемпотентный запрос, т.е. Если пользователь дважды нажимает на одни и те же запросы, он создает другой новый ресурс, если нет ограничений.

HTTP-метод post похож на запрос INSERT в SQL, который всегда создает новую запись в базе данных.

Пример: используйте метод POST для сохранения нового пользователя, порядка и т.д., Когда сервер бэкэнда определяет идентификатор ресурса для нового ресурса.

ПОЛОЖИЛ

В методе HTTP.PUT ресурс сначала идентифицируется по URL, а если он существует, то он обновляется, в противном случае создается новый ресурс. Когда целевой ресурс существует, он перезаписывает этот ресурс совершенно новым телом. То есть метод HTTP.PUT используется для СОЗДАНИЯ или ОБНОВЛЕНИЯ ресурса.

Метод http put похож на запрос MERGE в SQL, который вставляет или обновляет запись в зависимости от того, существует ли данная запись.

PUT-запрос идемпотентен, то есть, если дважды выполнить одни и те же запросы, обновится существующая запись (новая запись не создана). В методе PUT идентификатор ресурса определяется клиентом и указывается в URL-адресе запроса.

Пример: используйте метод PUT для обновления существующего пользователя или заказа.

PATCH

Метод HTTP.PATCH используется для частичных модификаций ресурса, то есть дельта-обновлений.

Метод HTTP patch подобен запросу UPDATE в SQL, который устанавливает или обновляет только выбранные столбцы, а не всю строку.

Пример: Вы можете использовать метод PATCH для обновления статуса заказа.

PATCH/api/users/40450236/order/10234557

Тело запроса: {status: 'Delivered'}

Ответ 6

Методы PUT и PATCH похожи по своей природе, но есть ключевое отличие.

PUT - в запросе PUT вложенный объект будет рассматриваться как измененная версия ресурса, который находится на сервере, и он будет заменен этим измененным объектом.

PATCH - в запросе PATCH вложенный объект содержит набор инструкций о том, как объект, находящийся на сервере, будет изменен для создания более новой версии.

Ответ 7

Put и Patch метод похожи. Но в rails у него другой метод. Если мы хотим обновить/заменить целую запись, мы должны использовать метод Put. Если мы хотим обновить конкретную запись, используйте метод Patch.

Ответ 8

Согласно условиям HTTP, запрос PUT похож на оператор обновления базы данных. PUT - используется для изменения существующего ресурса (ранее POSTED). С другой стороны, запрос PATCH используется для обновления некоторой части существующего ресурса.

Например:

Данные клиента:

// This is just a example.

firstName = "James";
lastName = "Anderson";
email = "[email protected]";
phoneNumber = "+92 1234567890";
//..

Когда мы хотим обновить всю запись? мы должны использовать Http PUT verb для этого.

такие как:

// Customer Details Updated.

firstName = "James++++";
lastName = "Anderson++++";
email = "[email protected]";
phoneNumber = "+92 0987654321";
//..

С другой стороны, если мы хотим обновить только часть записи, а не всю запись, перейдем к verb Http PATCH. такие как:

   // Only Customer firstName and lastName is Updated.

    firstName = "Updated FirstName";
    lastName = "Updated LastName";
   //..

PUT VS POST:

При использовании запроса PUT мы должны отправлять все параметры, такие как firstName, lastName, email, phoneNumber Where as. В запросе patch отправляются только те параметры, которые мы хотим обновить, и они не влияют или не изменяют другие данные.

Для получения более подробной информации, пожалуйста, посетите: https://fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/