Является ли HTTP-метод DELETE идемпотентным?

«Является ли HTTP-метод DELETE идемпотентным?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, согласно спецификации HTTP (RFC 7231), метод DELETE является идемпотентным. Идемпотентность означает, что выполнение одного и того же запроса несколько раз подряд приводит к тому же состоянию системы, что и однократное выполнение.

Практический пример:

DELETE /api/users/123 HTTP/1.1
  • Первый вызов: Удалит пользователя с ID 123. Возвращает 200 OK или 204 No Content.
  • Последующие вызовы: Ресурс уже удалён. Возвращают 404 Not Found. Ключевой момент: состояние системы (отсутствие ресурса) остаётся неизменным после первого запроса.

Важные нюансы:

  • Идемпотентность гарантируется только на стороне сервера (одинаковый итоговый результат). Коды ответов могут различаться (200, затем 404).
  • Побочные эффекты, такие как логирование или отправка уведомлений, могут происходить при каждом вызове.
  • Если DELETE вызывает каскадные операции или сложную бизнес-логику, это может нарушить идемпотентность. Разработчик API должен это учитывать.