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

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

Ответ

Да, HTTP-метод DELETE считается идемпотентным согласно спецификации RFC 7231, но с важным уточнением.

Идемпотентность означает, что многократное выполнение одного и того же запроса приводит к одинаковому состоянию системы, как и после первого выполнения.

Почему DELETE идемпотентен:

  • Запрос DELETE /api/users/123 удаляет ресурс с ID 123.
  • Первый вызов возвращает статус 200 OK (или 204 No Content).
  • Последующие вызовы к тому же ресурсу обычно возвращают 404 Not Found, но конечное состояние системы (отсутствие ресурса) остаётся неизменным.

Пример неидемпотентного поведения (нарушение контракта):

DELETE /api/users/last

Каждый запрос удаляет "последнего пользователя", который может быть разным, изменяя состояние системы новым способом. Такой дизайн эндпоинта нарушает принцип идемпотентности.

Практическое правило для REST API:

  • DELETE, применяемый к конкретному ресурсу (по ID), — идемпотентен.
  • DELETE, применяемый к коллекции или выполняющий операцию "последний", — может не быть идемпотентным.