Я использую PUT
запрос в моем приложении Rails. Теперь новый HTTP-глагол PATCH
был реализован браузерами. Итак, я хочу знать , что основное различие между PATCH
и PUT
запросы, и когда мы должны использовать один или другой.
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. Набор изменений представлен в формате, называемом «документ исправления», идентифицируемый типом носителя. Если Request-URI не указывает на существующий ресурс, сервер МОЖЕТ создать новый ресурс, в зависимости от типа документа исправления (может ли он логически изменить нулевой ресурс), разрешений и т. Д.
Разница между запросами PUT и PATCH отражается в способе, которым сервер обрабатывает вложенный объект для изменения ресурса, идентифицируемого Request-URI. В запросе PUT вложенный объект считается модифицированной версией ресурса, хранящегося на исходном сервере, и клиент запрашивает замену сохраненной версии. Однако с помощью PATCH вложенный объект содержит набор инструкций, описывающих, как ресурс, находящийся в данный момент на исходном сервере, должен быть модифицирован для создания новой версии. Метод PATCH влияет на ресурс, указанный в Request-URI , и он также МОЖЕТиметь побочные эффекты на других ресурсах; то есть, новые ресурсы могут быть созданы, или существующие изменены, путем применения PATCH .
Насколько я знаю, глагол PATCH не используется так, как в приложениях rails ... Насколько я понимаю, глагол RFC patch должен использоваться для отправки инструкций патча, например, когда вы делаете diff между двумя файлами. Вместо повторной отправки всей сущности вы отправляете патч, который может быть намного меньше, чем повторная отправка всей сущности.
Представьте, что вы хотите отредактировать огромный файл. Вы редактируете 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.
Я провел пару часов с Google и нашел ответ здесь
PUT => Если пользователь может обновить всю или только часть записи , используйте PUT (пользователь контролирует, что обновляется)
PATCH => Если пользователь может обновить только частичную запись , скажем, просто адрес электронной почты (приложение контролирует, что можно обновить), используйте PATCH.
Зачем
Patch
PUT
метод требует большей пропускной способности или обрабатывает полные ресурсы вместо этого на частичной. ТакPATCH
было введено сокращение пропускной способности.Объяснение о PATCH
PATCH
это метод, который не является безопасным или идемпотентным, и позволяет полностью и частично обновлять и побочные эффекты на других ресурсах.PATCH
это метод, в котором вложенная сущность содержит набор инструкций, описывающих, как ресурс, находящийся в данный момент на исходном сервере, должен быть модифицирован для создания новой версии.Здесь больше информации о путе и патче
источник
PATCH
средиPOST
, иPUT
т.д. не «безопасно», потому что он изменяет свои данные (имеет побочные эффекты). По сравнению сGET
иOPTIONS
т. Д. (Безопасные методы), где вы можете вызывать конечные точки несколько раз без каких-либо побочных эффектов.ставить
, если я хочу изменить
first
имя затем отправить путы запроса на обновлениено здесь есть одна проблема, это
put
запрос, что, когда я хочу отправитьput
запрос, я должен отправить все два параметра, чтоfirst
иlast
поэтому обязательно отправить все значение снова
патч :
patch
запрос говорит. отправляйте только тот,data
который вы хотите,update
и это не повлияет или не изменит другие данные.поэтому нет необходимости отправлять все значения снова. просто я хочу обновить свое имя, поэтому мне нужно отправить только
first
имя для обновления.источник
Вот разница между методами POST, PUT и PATCH протокола HTTP.
ПОЧТА
Метод HTTP.POST всегда создает новый ресурс на сервере. Это неидемпотентный запрос, т.е. если пользователь нажимает на одни и те же запросы 2 раза, он создает другой новый ресурс, если нет ограничений.
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'}
источник
Есть ограничения в PUT over PATCH при создании обновлений. Использование PUT требует от нас указать все атрибуты, даже если мы хотим изменить только один атрибут. Но если мы используем метод PATCH, мы можем обновить только те поля, которые нам нужны, и нет необходимости упоминать все поля. PATCH не позволяет нам изменять значение в массиве или удалять атрибут или запись массива.
источник
Положить и патчМетоды похожи по своей природе, но есть ключевое отличие.
PUT - в PUT запросе вложенный объект будет рассматриваться как измененная версия ресурса, который находится на сервере, и он будет заменен этим измененным объектом.
PATCH - в запросе PATCH вложенный объект содержит набор инструкций о том, как объект, находящийся на сервере, будет изменен для создания более новой версии.
источник
Согласно условиям HTTP,
PUT
запрос похож на оператор обновления базы данных.PUT
- используется для модификации существующего ресурса (ранее размещен). С другой стороны,PATCH
запрос используется для обновления некоторой части существующего ресурса.Например:
Данные клиента:
Когда мы хотим обновить всю запись? мы должны использовать
Http
PUT
verb
для этого.Такие как:
С другой стороны, если мы хотим обновить только часть записи, а не всю запись, тогда переходите к
Http
PATCH
verb
. Такие как:PUT VS POST:
При использовании
PUT
запроса мы должны отправить все параметры, такие как firstName, lastName, email, phoneNumber Where as In Вpatch
запросе отправляются только те параметры, которые мы хотим обновить, и они не влияют или не изменяют другие данные.Для получения более подробной информации, пожалуйста, посетите: https://fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/
источник
Put и Patch метод похожи. Но в рельсах у него другой метод. Если мы хотим обновить / заменить целую запись, мы должны использовать метод Put. Если мы хотим обновить конкретную запись, используйте метод Patch.
источник