Можно ли использовать HTTP-метод POST для удаления ресурса?

Ответ

Технически — да, но это нарушает семантику HTTP и REST-архитектуру.

  • POST — универсальный метод для операций, которые не вписываются в другие методы. Он не идемпотентен (повторный запрос может иметь другой эффект).
  • DELETE — семантически правильный метод для удаления ресурса. Он идемпотентен (повторные запросы к одному URI дают тот же результат).

Пример (не рекомендуется):

POST /api/users/123 HTTP/1.1
Content-Type: application/json

{"action": "delete"}

Правильный подход (RESTful):

DELETE /api/users/123 HTTP/1.1

Когда POST для удаления может встречаться (как исключение):

  1. Ограничения инфраструктуры (например, старые прокси-серверы или брандмауэры блокируют метод DELETE).
  2. Операция не является простым удалением, а представляет собой сложное действие (например, "архивировать и пометить как неактивное"), которое лучше описывается RPC-стилем.

Вывод: Всегда предпочитайте метод DELETE для удаления ресурсов. Используйте POST только при непреодолимых технических ограничениях или для сложных нестандартных операций.

Ответ 18+ 🔞

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

Вот смотри, в чём тут, блядь, собака зарыта:

  • POST — это как универсальная отвёртка-швейцарский нож. Запихни туда в тело запроса {"action": "delete"} — и ресурс твой сгинет. Но метод-то не идемпотентный, ёбана! Это значит, если ты его по ошибке два раза шарахнешь, результат может быть пиздец какой непредсказуемый. Удалится два раза? А хуй его знает! Может, второй раз ошибку кинет, а может, и нет. Волнение ебать.
  • DELETE — это уже, блядь, специализированный кувалдометод. Создан специально, чтобы ебашить ресурсы. Ткнул раз — удалил. Ткнул сто раз — всё равно удалён. Идемпотентный, стабильный, предсказуемый. Все понимают, что происходит. Красота!

Вот как делать НЕ НАДО (хотя и работает, пизда):

POST /api/users/123 HTTP/1.1
Content-Type: application/json

{"action": "delete"}

А вот как делать ПРАВИЛЬНО, по-человечески:

DELETE /api/users/123 HTTP/1.1

Но жизнь, она, блядь, сложная штука. Иногда POST для удаления проскакивает, и на то есть причины, от которых волосы дыбом:

  1. Какая-нибудь древняя инфраструктура, прокси-сервер времён царя Гороха, который от метода DELETE просто, сука, в анабиоз впадает. Или брандмауэр, настроенный каким-то пидарасом шерстяным, который думает, что DELETE — это хакерская атака.
  2. Операция не просто "удалить", а какое-то ебанистическое действо: "архивировать, пометить флагом, отправить уведомление админу и списать в утиль". Это уже не чистый REST, а какой-то RPC-уёбищный стиль. Ну, бывает.

Вывод, блядь, простой, как три копейки: если ты не связан по рукам и ногам каким-то ебучим легаси-кодом или идиотскими ограничениями — ВСЕГДА юзай DELETE для удаления. Это как поставить дверь на петли, а не приклеить её скотчем. POST оставь для всего остального, что не влезает в аккуратные рамки. А то потом разгребать этот пиздец будут, и доверия к тебе будет, блядь, ноль.