Запитати

Різниця між PUT і POST

Вирішено
04 жовтня 2020 · 3.1K ·
0

Прочитавши багато різних статей, все одно не до кінця усвідомлюю різницю між PUT і POST

Специфікація HTTP 1.1 свідчить, що PUT ідемпотентний. Це означає, що клієнт може виконати безліч PUT запитів по одному URI і це не призведе до створення записів дублікатів. Операції присвоєння - хороший приклад Ідемпотентний операції

String userId = this.request [ "USER_ID"];

Навіть якщо цю операцію виконати двічі або тричі, ніякої шкоди не буде (крім зайвих тактів процесора). POST же з іншого боку не ідемпотентний. Це щось на зразок інкремента. Вам слід використовувати POST або PUT з урахуванням того чи виконувана дію ідемпотентна чи ні. Якщо говорити мовою програмістів, якщо клієнт знає URL об'єкта, який потрібно створити, використовуйте PUT. Якщо клієнт знає URL методу/класу створює потрібний об'єкт, використовуйте POST.

Тут наведено "хороший приклад Ідемпотентний операції String userId = this.request [" USER_ID "];". У чому приклад хороший не зрозумію? Якої шкоди може бути від цієї операції якщо ми використовуємо POST а не PUT? Був би дуже вдячний, якби мені дали простий приклад, де краще застосовувати PUT і чому.

Наприклад величезне число сервісів для завантаження файлів використовує PUT. Чим це виправдано?

Мене цікавить зокрема завантаження файлів.

put post http

Відповіді на питання (2)

07 травня 2023
1
Обране рішення
Ця відповіть згенерована ботом на основі штучного інтелекту

PUT і POST - це HTTP-методи, які використовуються для відправлення даних на сервер. Основною різницею між ними є те, що PUT використовується для оновлення існуючих даних на сервері, тоді як POST використовується для створення нових даних на сервері.

Крім того, PUT використовується для оновлення даних у цілому, тоді як POST може бути використаний для оновлення лише певних частин даних. Якщо ви використовуєте PUT для оновлення даних, то ви повинні відправити всі дані, які потрібно оновити, включаючи ті, які не змінюються. У разі використання POST ви можете відправляти лише ті дані, які потрібно оновити, без необхідності відправляти всі дані.

Також важливо зазначити, що при використанні POST створені дані можуть бути різними залежно від того, як вони обробляються на сервері, тоді як при використанні PUT дані повинні залишатися незмінними.

Отже, PUT і POST використовуються для відправлення даних на сервер, але з різними цілями. PUT використовується для оновлення існуючих даних на сервері, тоді як POST використовується для створення нових даних на сервері.


Різниця між PUT і POST - це питання семантики. Оскільки для операцій використовуються різні дієслова, то і сенс у них повинен бути різним.

Уявіть, що ваш сервіс оперує поняттями блокнот (notebook) і запис (post). Один блокнот може містити безліч записів.

Для додавання нового запису в блокнот c ідентифікатором id ви будете використовувати метод POST з URL mydomain/notebooks/id/. Ваш сервіс, орієнтуючись на метод POST, сам присвоїть потрібний ідентифікатор запису, додасть її в блокнот і поверне вам URL створеного запису (для доступу до запису по GET або для видалення по DELETE). При цьому добре б повернути клієнту URL створеної записи.

Припустимо, запис з ідентифікатором post-id вже створено і він доступний по URL mydomain/notebooks/id/posts/post-id. Але клієнт (власник запису) виправив в ній помилку і хоче перезаписати її. Для цього він використовує метод PUT з URL mydomain/notebooks/id/posts/post-id і передає оновлений запис в тілі запиту. Ваш сервіс, орієнтуючись на метод PUT видаляє старий запис і записує новий, при цьому він доступний за тим же URL.

Звичайно, ніхто не заважає вам завжди використовувати метод POST (наприклад HTML 4 дозволяв використовувати тільки методи GET і POST). Але все ж варто дотримуватися рекомендацій з метою однакового трактування методів усіма розробниками.

Рекомендується використовуватися метод POST для створення підлеглого ресурсу (дочірнього по відношенню до іншого ресурсу; приклад блокнота і записи якраз дуже підходить).


Для відповіді на запитання необхідно авторизуватись

Вхід / Реєстрація