Ответ
Да, 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, применяемый к коллекции или выполняющий операцию "последний", — может не быть идемпотентным.