Ответ
DELETE — это идемпотентный HTTP-метод, предназначенный для удаления ресурса, идентифицированного данным URI (Uniform Resource Identifier).
Ключевые характеристики с точки зрения тестирования API:
- Идемпотентность: Многократный вызов DELETE для одного и того же ресурса должен приводить к одному и тому же результату (ресурс удален). После первого успешного удаления последующие запросы обычно возвращают
404 Not Foundили410 Gone. - Коды ответов:
200 OK— Удаление прошло успешно, в теле ответа может быть информация об удаленном ресурсе.204 No Content— Успешное удаление, тело ответа отсутствует (наиболее распространенный сценарий).202 Accepted— Запрос на удаление принят, но еще не обработан (асинхронная операция).404 Not Found— Ресурс не найден (или уже был удален).403 Forbidden/401 Unauthorized— Нет прав на выполнение операции.
- Безопасность: DELETE не является безопасным (safe) методом, так как изменяет состояние на сервере.
Тест-кейсы для QA-инженера:
- Успешное удаление: Отправить DELETE-запрос на существующий ресурс, проверить код ответа
204и что ресурс действительно недоступен через последующий GET. - Удаление несуществующего ресурса: Ожидается
404. - Повторное удаление (идемпотентность): Второй запрос должен также вернуть
404. - Удаление без авторизации: Ожидается
401/403. - Валидация каскадного удаления: Если удаление родительского ресурса (например, пользователя) должно каскадно удалять дочерние (его заказы), это нужно проверить.
- «Мягкое» удаление: Проверить, что вместо физического удаления данные могли быть помечены флагом
is_deleted = true, и это корректно обрабатывается другими endpoint'ами.
Пример теста на Python с использованием requests:
import requests
BASE_URL = "https://api.example.com/v1"
USER_ID = 123
# 1. Успешное удаление
response = requests.delete(f"{BASE_URL}/users/{USER_ID}", headers={"Authorization": "Bearer <token>"})
assert response.status_code == 204, f"Expected 204, got {response.status_code}"
# 2. Проверка, что ресурс удален
get_response = requests.get(f"{BASE_URL}/users/{USER_ID}")
assert get_response.status_code == 404, "Resource should no longer exist"