Почему метод DELETE является идемпотентным?

«Почему метод DELETE является идемпотентным?» — вопрос из категории HTTP и веб-протоколы, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод DELETE считается идемпотентным, потому что многократное выполнение одного и того же запроса приводит к одинаковому конечному состоянию системы — ресурс удален. С точки зрения тестирования API это критически важно.

Почему это важно для QA:

  • Предсказуемость тестов: Наши автоматизированные тесты могут безопасно повторять запросы DELETE для очистки данных или проверки граничных случаев, не опасаясь разных результатов.
  • Надежность: Мы можем полагаться на то, что сетевой сбой и повторная отправка запроса клиентом не приведут к ошибке "ресурс не найден" или другим неожиданным состояниям.
  • Валидация ответов: Мы понимаем, что первый успешный DELETE (например, 204 No Content или 200 OK) и последующий (вероятно, 404 Not Found) — оба являются корректными ответами для идемпотентной операции. Наш тест должен это учитывать.

Пример проверки в тесте (Python, requests):

import requests
BASE_URL = 'https://api.example.com'

# 1. Удаляем ресурс
response1 = requests.delete(f'{BASE_URL}/users/999')
assert response1.status_code in [200, 204]

# 2. Повторяем запрос — состояние системы не меняется
response2 = requests.delete(f'{BASE_URL}/users/999')
# Ожидаем либо подтверждение удаления, либо что ресурс не найден
assert response2.status_code in [200, 204, 404]
print('Идемпотентность DELETE подтверждена.')

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