В чем разница между PUT, POST и PATCH? [закрыто]


280

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



4
возможный дубликат PUT vs POST в REST
Нигде, мужчина

12
Использование чего-либо кроме GET / POST безумно в современных веб-API. Слишком многие делают это. URI, идентифицированные в большинстве современных приложений, НЕ являются ресурсами, подлежащими замене, обновлению и т. Д. Они не являются документами. Они называются ПРОЦЕДУРАМИ. Сам URI редко идентифицирует реальный ресурс, кроме вызываемого метода. Поэтому используйте GET для запросов строки запроса и POST, когда вам нужно опубликовать данные или файлы JSON в теле запроса. IMO, все остальное пытается внедрить устаревшие концепции, включающие URI и операции со статическими документами HTML, в новую архитектуру, которая совсем не похожа на эту.
Трийнко

1
Все отличные ответы. Я просто хотел поделиться своим ответом на различия и когда вы должны использовать каждый из них.
Поезд

@Triynko А процедуры, на которые вы ссылаетесь, включают создание , удаление и модификацию ресурсов. Нет лучшего способа передать такие идеи, чем быть RESTful. Почему нет?
Константин Ван

Ответы:


202

Разница между командами PUT, POST, GET, DELETE и PATCH IN HTTP:

Наиболее часто используемые HTTP-глаголы POST, GET, PUT, DELETE аналогичны операциям CRUD (создание, чтение, обновление и удаление) в базе данных. Мы указываем эти HTTP-глаголы в заглавном случае. Итак, ниже приведено сравнение между ними.

  1. создать - POST
  2. читать - ПОЛУЧИТЬ
  3. обновление - PUT
  4. удалить - УДАЛИТЬ

PATCH: представляет частичную модификацию ресурса. Если вам нужно обновить только одно поле для ресурса, вы можете использовать метод PATCH.

Примечание.
Поскольку POST, PUT, DELETE изменяют содержимое, тесты с Fiddler для приведенного ниже URL-адреса просто имитируют обновления. Это не удаляет или изменяет фактически. Мы можем просто увидеть коды состояния, чтобы проверить, происходят ли вставки, обновления, удаления.

URL: http://jsonplaceholder.typicode.com/posts/

1) ПОЛУЧИТЬ:

GET - самый простой тип метода HTTP-запроса; тот, который браузеры используют каждый раз, когда вы нажимаете на ссылку или вводите URL в адресную строку. Он инструктирует сервер передавать данные, идентифицированные URL-адресом, клиенту. Данные никогда не должны изменяться на стороне сервера в результате запроса GET. В этом смысле запрос GET доступен только для чтения.

Проверка с помощью Fiddler или PostMan: мы можем использовать Fiddler для проверки ответа. Откройте Fiddler и выберите вкладку Compose. Укажите глагол и URL, как показано ниже, и нажмите «Выполнить», чтобы проверить ответ.

Глагол: ПОЛУЧИТЬ

URL: http://jsonplaceholder.typicode.com/posts/

Ответ: Вы получите ответ как:

"userId": 1, "id": 1, "title": "sunt aut ...", "body": "quia et suscipit ..."

В «счастливом» (или не ошибочном) пути GET возвращает представление в XML или JSON и код ответа HTTP 200 (ОК). В случае ошибки чаще всего возвращается 404 (НЕ НАЙДЕНО) или 400 (ПЛОХОЙ ЗАПРОС).

2) ПОЧТА:

Глагол POST в основном используется для создания новых ресурсов. В частности, он используется для создания подчиненных ресурсов. То есть подчиняться какому-то другому (например, родительскому) ресурсу.

В случае успешного создания верните HTTP-статус 201, вернув заголовок Location со ссылкой на вновь созданный ресурс с HTTP-статусом 201.

Проверка с помощью Fiddler или PostMan: мы можем использовать Fiddler для проверки ответа. Откройте Fiddler и выберите вкладку Compose. Укажите глагол и URL, как показано ниже, и нажмите «Выполнить», чтобы проверить ответ.

Глагол: ПОЧТА

URL: http://jsonplaceholder.typicode.com/posts/

Тело запроса:

данные: {title: 'foo', body: 'bar', userId: 1000, Id: 1000}

Ответ: Вы получите код ответа как 201.

Если мы хотим проверить вставленную запись с Id = 1000, измените глагол на Get и используйте тот же URL и нажмите Execute.

Как было сказано ранее, приведенный выше URL разрешает только чтение (GET), мы не можем читать обновленные данные в реальном времени.

3) PUT:

PUT чаще всего используется для возможностей обновления , PUT - для известного URI ресурса с телом запроса, содержащим недавно обновленное представление исходного ресурса.

Проверка с помощью Fiddler или PostMan: мы можем использовать Fiddler для проверки ответа. Откройте Fiddler и выберите вкладку Compose. Укажите глагол и URL, как показано ниже, и нажмите «Выполнить», чтобы проверить ответ.

Глагол: PUT

URL: http://jsonplaceholder.typicode.com/posts/1

Тело запроса:

данные: {title: 'foo', body: 'bar', userId: 1, Id: 1}

Ответ: При успешном обновлении он возвращает 200 (или 204, если не возвращает никакого содержимого в теле) из PUT.

4) УДАЛИТЬ:

УДАЛИТЬ довольно легко понять. Он используется для удаления ресурса, идентифицированного URI.

При успешном удалении верните HTTP-статус 200 (ОК) вместе с телом ответа, возможно, представлением удаленного элемента (часто требует слишком большой полосы пропускания) или обернутого ответа (см. «Возвращаемые значения» ниже). Либо так, либо возвращаем HTTP-статус 204 (НЕТ КОНТЕНТА) без тела ответа. Другими словами, статус 204 без тела или ответ в стиле JSEND и статус HTTP 200 являются рекомендуемыми ответами.

Проверка с помощью Fiddler или PostMan: мы можем использовать Fiddler для проверки ответа. Откройте Fiddler и выберите вкладку Compose. Укажите глагол и URL, как показано ниже, и нажмите «Выполнить», чтобы проверить ответ.

Глагол: УДАЛИТЬ

URL: http://jsonplaceholder.typicode.com/posts/1

Ответ: При успешном удалении возвращается HTTP-статус 200 (ОК) вместе с телом ответа.

Пример между PUT и PATCH

СТАВИТЬ

Если мне пришлось изменить свое имя, отправьте запрос PUT на обновление:

{"first": "Nazmul", "last": "hasan"} Итак, здесь, чтобы обновить имя, нам нужно снова отправить все параметры данных.

PATCH:

Запрос на исправление говорит о том, что мы будем отправлять только те данные, которые нам нужно изменить, без изменения или воздействия на другие части данных. Пример: если нам нужно обновить только имя, мы передаем только имя.

Пожалуйста, обратитесь к ссылкам ниже для получения дополнительной информации:

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

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

http://www.restapitutorial.com/lessons/httpmethods.html


62
PUT не обновляется. PUT - создать или заменить объект по указанному URI. Согласно спецификации HTTP, PUT является идемпотентом. Да, его можно использовать для обновления, но думать об этом только как о неправильном обновлении.
Маладон

2
Я согласен, что PUT не обновляется, его можно сопоставить с заменой, потому что при отправке PUT он переопределяет существующий ресурс. Но если мы отправим PATCH, он заменит только указанные записи.
Атул

1
Поскольку PUT также может быть использован для создания, я не уверен, как ваш ответ указывает, какой я должен использовать?
Роб П.

1
Этот ответ намного лучше, но не сравнивается с PATCH: stackoverflow.com/a/630475/2391795
Vadorequest

47

PUT = заменить ВЕСЬ РЕСУРС новым предоставленным представлением

PATCH = заменить части исходного ресурса указанными значениями И | ИЛИ, другие части ресурса обновляются, которые вы не предоставили (временные метки) И | ИЛИ обновление ресурса влияет на другие ресурсы (отношения)

https://laracasts.com/discuss/channels/general-discussion/whats-the-differences-between-put-and-patch?page=1


11

Приведенное ниже определение взято из примера из реального мира.

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

  1. ПОЧТА

    • Если Клиент отправляет данные без идентификатора с использованием метода POST, мы сохраняем их и назначаем новый идентификатор.
    • Если Клиент снова отправляет те же данные без идентификатора, используя метод POST, мы сохраняем их и назначаем новый идентификатор.
    • Примечание : дублирование разрешено здесь
  2. СТАВИТЬ

    • Если Клиент отправляет данные с идентификатором, мы проверим, существует ли этот идентификатор. Если идентификатор существует, мы обновим данные, в противном случае мы создадим его и назначим новый идентификатор.
  3. PATCH

    • Если Клиент отправляет данные с идентификатором, мы проверим, существует ли этот идентификатор. Если идентификатор существует, мы обновим данные, иначе мы сгенерируем исключение.

Примечание. В методе Put мы не генерируем исключение, если идентификатор не найден. Но в методе Patch мы генерируем исключение, если идентификатор не найден.

Дайте мне знать, если у вас есть какие-либо вопросы по вышеуказанному.


8

Типы запросов

  • создать - POST
  • читать - ПОЛУЧИТЬ
  • создать или обновить - PUT
  • удалить - УДАЛИТЬ
  • обновление - патч

GET / PUT - идемпотентный патч иногда может быть идемпотентным

То, что является идемпотентом - это означает, что если мы запускаем запрос несколько раз, это не должно влиять на его результат (тот же результат. Предположим, что корова беременна, и если мы разводим ее снова, то она не может быть беременна несколько раз).

get : -

просто получить. Получить данные с сервера и показать их пользователю

{
id:1
name:parth
email:x@x.com
}

post : -

создать новый ресурс в базе данных. Это означает, что он добавляет новые данные. Это не идемпотент.

put : -

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

{
id:1
name:parth
email:x@x.com
}
  • выполнить put-localhost / 1 put email: ppp@ppp.com
{
id:1
email:ppp@ppp.com
}

patch

так что теперь пришел патч, запрос PATCH может быть иногда идемпотентным

id:1
name:parth
email:x@x.com
}

название патча: w

{
id:1
name:w
email:x@x.com
}
HTTP метод
ПОЛУЧИТЬ да
ПОСТ №
ПОСТАВИТЬ да
Патч нет *
ВАРИАНТЫ да
ГОЛОВА да
УДАЛИТЬ да

Ресурсы: Идемпотент - Что такое Идемпотентность?


Что на самом деле означает «иногда» идемпотент? Что определяет идемпотентность?
Polv

7

Вот простое описание всего:

  • POST всегда для создания ресурса (не имеет значения, дублирован ли он)
  • PUT предназначен для проверки существования ресурса, затем обновления, в противном случае создайте новый ресурс
  • PATCH всегда для обновления ресурса

5

Основное различие между запросами PUT и PATCH :

Предположим, у нас есть ресурс, который содержит имя и фамилию человека.

Если мы хотим изменить имя, мы отправим запрос на обновление

{ "first": "Michael", "last": "Angelo" }

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

Однако, когда мы отправляем запрос PATCH, мы отправляем только те данные, которые хотим обновить. Другими словами, мы отправляем только имя для обновления, не нужно отправлять фамилию.


2

Вполне логичная разница между PUT и PATCH при отправке полных и частичных данных для замены / обновления соответственно. Тем не менее, только пара пунктов, как показано ниже

  1. Иногда POST рассматривается как обновление для PUT для создания
  2. HTTP обязывает / проверяет отправку полных или частичных данных в PATCH? В противном случае, PATCH может быть таким же, как обновление, как в PUT / POST

2

Подумай об этом так ...

POST - создать

PUT - заменить

PATCH - обновление

Читается

УДАЛИТЬ - удалить


2
Вероятно, я бы добавил это различие : « PUT, если клиент определяет адрес полученного ресурса, POST, если это делает сервер »
ruffin

1

Самое простое объяснение:

POST - Создать новую запись

PUT - если запись существует, обновите еще, создайте новую запись

PATCH - обновление

Читается

УДАЛИТЬ - удалить


Чем это существенно отличается от ответа Кваме, опубликованного за две недели до вашего ответа ?
Ruffin
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.