В чём разница между HTTP-методами PUT, POST и DELETE?

Ответ

PUT, POST и DELETE — это HTTP-методы для операций с ресурсами (CRUD).

Метод Назначение Идемпотентность Безопасность
PUT Создание или полное обновление ресурса по известному URI. Да Нет
POST Создание нового ресурса или выполнение сложных действий. Нет Нет
DELETE Удаление ресурса по указанному URI. Да Нет

Ключевые различия:

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

Примеры запросов:

# PUT — обновить или создать пользователя с id=1
PUT /api/users/1 HTTP/1.1
Content-Type: application/json

{"name": "Alice", "email": "alice@example.com"}
# POST — создать нового пользователя (id присвоит сервер)
POST /api/users HTTP/1.1
Content-Type: application/json

{"name": "Bob", "email": "bob@example.com"}
# DELETE — удалить пользователя с id=1
DELETE /api/users/1 HTTP/1.1

Практическое правило: Используйте POST для создания, PUT для обновления (если клиент знает полный URI), DELETE для удаления.

Ответ 18+ 🔞

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

Смотри, есть три главных бандита в этом деле: PUT, POST и DELETE. Это как инструменты для операций CRUD — создание, чтение, обновление, удаление. Просто «чтение» (GET) мы тут не трогаем, он тихий и спокойный.

Вот тебе таблица, чтобы сразу врубиться:

Метод Зачем нужен Идемпотентный? Безопасный?
PUT Создать или нахуй полностью переписать ресурс по известному адресу (URI). Да Нет
POST Создать новый ресурс или выполнить какую-то ебанистику, сложное действие. Нет Нет
DELETE Удалить ресурс по указанному адресу. Нахуй, короче. Да Нет

А теперь главное, чтобы не облажаться:

  • PUT — идемпотентный, ёпта. Это значит, что если ты десять раз подряд шлёшь один и тот же запрос, результат будет как от одного раза. Ресурс создастся или обновится один раз, а не десять. Не как с POST, который может насоздавать клонов, как сумасшедший учёный.
  • POST — не идемпотентный. Каждый раз — новый вызов, новый ресурс. Как чих — не остановишь.
  • PUT обычно требует, чтобы ты отправил полное представление ресурса. Не половинку, а целиком. POST может принять и кусочек, а остальное сервер сам додумает, хитрая жопа.

Примеры, чтобы вообще всё стало ясно, как божий день:

# PUT — «Слушай, сервер, на адрес /users/1 положи вот этого пользователя Алису.
# Если там что-то было — затри, если пусто — создай. Всё просто, как три копейки.»
PUT /api/users/1 HTTP/1.1
Content-Type: application/json

{"name": "Alice", "email": "alice@example.com"}
# POST — «Босс, вот тебе данные какого-то Боба. Сделай с ними что надо,
# создай нового пользователя где считаешь нужным и дай ему свой ID. Я в дела не лезу.»
POST /api/users HTTP/1.1
Content-Type: application/json

{"name": "Bob", "email": "bob@example.com"}
# DELETE — «Эй, админ, пользователя под номером 1 — нахуй отсюда. Вычеркни, удали, сотри.»
DELETE /api/users/1 HTTP/1.1

Практическое правило, которое спасёт тебя от позора: Используй POST, когда создаёшь новый ресурс и не паришься насчёт его итогового адреса. Используй PUT, когда обновляешь существующий ресурс, и ты точно знаешь, где он лежит (его полный URI). Используй DELETE, когда нужно что-то удалить. Всё логично, ебать мои старые костыли.

Вот и вся магия. Не усложняй, а то доверия к твоему коду будет ноль ебать.