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

«Можно ли использовать HTTP-метод POST для удаления ресурса?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Технически — да, но это нарушает семантику 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 только при непреодолимых технических ограничениях или для сложных нестандартных операций.