Яка різниця між PUT, POST та PATCH? [зачинено]


281

Яка різниця між методами PUT, POST та PATCH у протоколі HTTP?



4
можливий дублікат PUT проти POST в REST
Ніде людина

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

1
Усі чудові відповіді. Я просто хотів поділитися своєю відповіддю щодо відмінностей і коли вам слід використовувати кожну.
Поїзд

@Triynko І процедури, які ви посилаєтеся, передбачають створення , видалення та модифікацію ресурсів. Немає кращого способу донести такі ідеї, ніж бути ВІДПОВІДНИМ. Чому ні?
Константин Ван

Відповіді:


200

Різниця між PUT, POST, GET, DELETE та PATCH 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, як показано нижче, та натисніть Виконати, щоб перевірити відповідь.

Дієслово: GET

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

Відповідь: Відповідь ви отримаєте у вигляді:

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

У шляху "щасливого" (або без помилки) GET повертає представлення у XML або JSON та код відповіді HTTP 200 (ОК). У випадку помилки він найчастіше повертає 404 (NOT FOUND) або 400 (BAD REQUEST).

2) POST:

Дієслово POST в основному використовується для створення нових ресурсів. Зокрема, він використовується для створення підпорядкованих ресурсів. Тобто підпорядковуватися якомусь іншому (наприклад, батьківському) ресурсу.

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

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

Дієслово: POST

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

Орган запиту:

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

Відповідь: Ви отримаєте код відповіді як 201.

Якщо ми хочемо перевірити вставлений запис на Id = 1000, змінимо дієслово на Отримати і скористатися тим самим URL-адресою та натисніть Виконати.

Як було сказано раніше, вищевказаний URL дозволяє лише читати (GET), ми не можемо читати оновлені дані реально.

3) PUT:

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

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

Дієслово: ПУТ

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

Орган запиту:

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

Відповідь: Після успішного оновлення він повертає 200 (або 204, якщо не повертає вмісту в тілі) з PUT.

4) УДАЛИТИ:

DELETE зрозуміти досить просто. Він використовується для видалення ресурсу, ідентифікованого URI.

Після успішного видалення поверніть HTTP-статус 200 (ОК) разом із тілом відповіді, можливо, представлення видаленого елемента (часто вимагає занадто великої пропускної здатності) або завершений відповідь (див. Повернення Значень нижче). Або це, або поверніть HTTP-статус 204 (NO CONTENT) без органу відповіді. Іншими словами, рекомендовані відповіді - статус 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"} Отже, тут для оновлення імені нам потрібно знову надіслати всі параметри даних.

ПАТЧ:

Патч-запит говорить, що ми надсилатимемо лише ті дані, які нам потрібно змінити, не змінюючи і не впливаючи на інші частини даних. Наприклад: якщо нам потрібно оновити лише ім’я, ми передаємо лише ім’я.

Для отримання додаткової інформації перегляньте посилання нижче:

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
Відповідь на це питання набагато краще, але не порівняти з накладними: stackoverflow.com/a/630475/2391795
Vadorequest

47

PUT = замініть ЦІЛЬКИЙ РЕСУРС на нове представлене представлення

PATCH = замініть частини вихідного ресурсу на надані значення ТА | АБО інші частини ресурсу оновлюються, що ви не надали (часові позначки) І | АБО оновлення ресурсу впливає на інші ресурси (відносини)

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


11

Нижче наведене визначення - із прикладу реального світу.

Приклад огляду
Для всіх даних клієнта ми зберігаємо ідентифікатор, щоб знайти ці клієнтські дані, і ми надішлемо цей ідентифікатор тому клієнту для довідки.

  1. ПОШТА

    • Якщо Клієнт надсилає дані без будь-якого ідентифікатора за допомогою методу POST, ми зберігатимемо їх та призначатимемо новий ідентифікатор.
    • Якщо Клієнт знову надсилає ті самі дані без будь-якого ідентифікатора, використовуючи метод POST, ми збережемо їх та призначимо новий ідентифікатор.
    • Примітка . Копіювання тут дозволено
  2. ПУТ

    • Якщо Клієнт надсилає дані з ідентифікатором, то ми перевіримо, чи існує такий ідентифікатор. Якщо ідентифікатор існує, ми оновимо дані ще, ми створимо його та призначимо новий ідентифікатор.
  3. ПАТЧ

    • Якщо Клієнт надсилає дані з ідентифікатором, то ми перевіримо, чи існує такий ідентифікатор. Якщо ідентифікатор існує, ми оновимо дані, ми викинемо виняток.

Примітка. У методі Put ми не кидаємо виняток, якщо ідентифікатор не знайдений. Але в методі Patch ми викидаємо виняток, якщо ідентифікатор не знайдений.

Повідомте мене, чи є у вас запити щодо вищезазначеного.


8

Типи запитів

  • створити - POST
  • читати - ЗАРАЗ
  • створити або оновити - PUT
  • видалити - ВИДАЛИТИ
  • оновлення - PATCH

GET / PUT - ідентичний потенціал, PATCH може бути іноді безсильним

Що є ідентичним - Це означає, що якщо ми запускаємо запит кілька разів, він не повинен впливати на результат. (Той же вихід. Скажімо, корова вагітна, і якщо ми її розводимо ще раз, вона не може бути попередньою кілька разів)

get : -

просто отримати. Отримайте дані з сервера та покажіть їх користувачеві

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

post : -

створити новий ресурс у базі даних. Це означає, що додає нові дані. Це не безсило.

put : -

Створіть новий ресурс інакше додайте до існуючого. Idempotent, оскільки він оновлюватиме один і той же ресурс кожного разу, а вихід буде однаковим. колишній - вихідні дані

{
id:1
name:parth
email:x@x.com
}
  • виконувати put-localhost / 1 покласти електронну пошту: 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
Отримайте так
POST №
ПУТ так
ПАТЧ ні *
ВАРІАНТИ так
ГОЛОВА так
ВИДАЛИТИ так

Ресурси: Idempotent - що таке Idempotency?


Що насправді означає "іноді" безсильний? Що визначає ідемпотенцію?
Полв

7

ось простий опис усіх:

  • POST - це завжди для створення ресурсу (не важливо, чи був він дублюється)
  • PUT призначений для перевірки, чи існує ресурс, тоді оновлення, інакше створити новий ресурс
  • PATCH - це завжди для оновлення ресурсу

5

Основна різниця між запитами PUT та PATCH :

Припустимо, у нас є ресурс, який містить ім’я та прізвище людини.

Якщо ми хочемо змінити ім’я, то ми надсилаємо запит на оновлення

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

Тут, хоча ми змінюємо лише ім’я, з PUT-запитом ми повинні надсилати обидва параметри першими та останніми.
Іншими словами, обов'язково потрібно знову надіслати всі значення, повне корисне навантаження.

Однак, коли ми надсилаємо запит PATCH, ми надсилаємо лише ті дані, які ми хочемо оновити. Іншими словами, ми посилаємо лише оновлення для оновлення, не потрібно надсилати прізвище.


2

Цілком логічна різниця між PUT & PATCH wrt, що надсилає повні та часткові дані для заміни / оновлення відповідно. Однак лише кілька пунктів, як показано нижче

  1. Іноді POST вважається оновленням wrt PUT для створення
  2. Чи надає HTTP мандатів / перевірок на надсилання повних та часткових даних у PATCH? В іншому випадку PATCH може бути цілком таким же, як оновлення, як у PUT / POST

2

Подумайте про це так ...

POST - створити

ПУТ - замінити

PATCH - оновлення

GET - читати

ВИДАЛИТИ - видалити


2
Я, мабуть, додаю це відмінність : " PUT, якщо клієнт визначає адресу отриманого ресурсу, POST, якщо це робить сервер ".
ruffin

1

Найпростіше пояснення:

POST - Створення НОВОГО запису

PUT - Якщо запис існує, оновіть інше, створіть новий запис

PATCH - оновлення

GET - читати

ВИДАЛИТИ - видалити


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