← Назад к вопросам

Что такое DELETE запрос?

1.0 Junior🔥 181 комментариев
#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое DELETE запрос?

DELETE запрос — это один из основных методов HTTP (Hypertext Transfer Protocol), предназначенный для удаления указанного ресурса на сервере. Как часть архитектуры REST (Representational State Transfer), он соответствует операции удаления (delete) в парадигме CRUD (Create, Read, Update, Delete). В отличие от GET или POST, DELETE является идемпотентным методом: многократное выполнение одного и того же запроса должно приводить к одинаковому результату (ресурс удалён, и последующие попытки его удалить обычно возвращают статус 404 Not Found или 410 Gone).

Основные характеристики и поведение

  • Целевой ресурс: DELETE запрос всегда направлен на конкретный ресурс, идентифицируемый URI (Uniform Resource Identifier). Например, DELETE /api/users/123 удалит пользователя с ID 123.
  • Отсутствие тела запроса: Как правило, DELETE запрос не имеет тела (body). Вся необходимая информация для идентификации ресурса содержится в URI и, возможно, заголовках (headers).
  • Ответ сервера: Успешное выполнение DELETE может возвращать различные коды состояния HTTP:
    *   **200 OK** — удаление прошло успешно, и в теле ответа может быть возвращено представление удалённого ресурса или статус операции.
    *   **202 Accepted** — запрос принят в обработку, но удаление ещё не завершено (асинхронная операция).
    *   **204 No Content** — самый распространённый и корректный ответ при успешном удалении. Сервер выполнил запрос, но не возвращает никакого контента в теле ответа.
    *   **404 Not Found** — если указанный ресурс не существует (хотя идемпотентность метода означает, что это тоже можно считать "успехом" с точки зрения конечного состояния).
  • Безопасность: DELETE не является безопасным (safe) методом. Его выполнение изменяет состояние сервера.

Пример DELETE запроса

Рассмотрим на примере REST API для управления списком задач.

Запрос:

DELETE /api/tasks/42 HTTP/1.1
Host: example.com
Authorization: Bearer <token>
User-Agent: MyClient/1.0

Этот запрос инструктирует сервер удалить задачу с идентификатором 42.

Успешный ответ сервера (наиболее правильный):

HTTP/1.1 204 No Content
Date: Mon, 23 Oct 2023 12:00:00 GMT
Connection: close

Тело ответа отсутствует — ресурс удалён.

Ответ с телом (альтернативный вариант):

HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 23 Oct 2023 12:00:00 GMT

{
  "id": 42,
  "status": "deleted",
  "message": "Task was successfully removed."
}

Особенности с точки зрения QA Automation

Для автоматизатора тестирования (QA Automation Engineer) понимание DELETE запроса критически важно при:

  1. Тестировании REST API: Необходимо проверять не только позитивные сценарии (удаление существующего ресурса), но и негативные:
    *   Попытка удалить несуществующий ресурс (ожидается 404).
    *   Попытка удалить ресурс без необходимых прав доступа (ожидается 403 Forbidden или 401 Unauthorized).
    *   Проверка идемпотентности — повторный DELETE на тот же URI.
    *   Валидация, что связанные данные (если есть) обрабатываются корректно (каскадное удаление или ошибка из-за существующих зависимостей).
  1. Создании и поддержке автотестов:
    *   **Подготовка данных (Setup):** DELETE часто используется в `@BeforeEach` или `@AfterEach` хуках для очистки тестового окружения от данных, созданных в ходе предыдущего теста.
    *   **Основная проверка (Test):** DELETE является объектом тестирования в рамках проверки функциональности удаления.
    *   **Очистка (Teardown):** Удаление тестовых данных, созданных для конкретного тестового случая, чтобы не засорять базу и обеспечить изолированность тестов.

Пример кода автотеста на Python (с использованием библиотеки requests):

import requests
import pytest

BASE_URL = "https://api.example.com"

def test_successful_task_deletion():
    # 1. Подготовка: Создаём задачу для последующего удаления
    create_response = requests.post(
        f"{BASE_URL}/api/tasks",
        json={"title": "Test Task to Delete", "completed": False},
        headers={"Authorization": "Bearer test_token"}
    )
    task_id = create_response.json()["id"]
    assert create_response.status_code == 201

    # 2. Действие: Выполняем DELETE запрос
    delete_response = requests.delete(
        f"{BASE_URL}/api/tasks/{task_id}",
        headers={"Authorization": "Bearer test_token"}
    )

    # 3. Проверка (Assert): Валидируем ответ
    assert delete_response.status_code == 204  # Ожидаем No Content

    # 4. Дополнительная проверка: Убеждаемся, что ресурс действительно удалён
    get_response = requests.get(
        f"{BASE_URL}/api/tasks/{task_id}",
        headers={"Authorization": "Bearer test_token"}
    )
    assert get_response.status_code == 404  # Ресурс не найден

def test_delete_non_existent_task():
    # Негативный сценарий: Удаление несуществующей задачи
    delete_response = requests.delete(
        f"{BASE_URL}/api/tasks/999999",
        headers={"Authorization": "Bearer test_token"}
    )
    # Ожидаем 404 Not Found, так как задача с таким ID не должна существовать
    assert delete_response.status_code == 404

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

  • Фактическое удаление vs "мягкое удаление": На практике сервер может реализовывать не физическое удаление записи из БД, а её пометку как удалённой (is_deleted = true). Для клиента API это различие обычно невидимо, но оно важно для тестирования восстановления данных или аналитики.
  • Кэширование: Ответы на успешные DELETE запросы обычно инвалидируют кэш, связанный с этим URI.
  • Безопасность и аудит: В production-системах операции DELETE часто сопровождаются строгой аутентификацией, авторизацией и логированием для аудита.

Таким образом, DELETE запрос — это мощный и потенциально опасный инструмент, корректная работа с которым (как на стороне разработки, так и на стороне тестирования) является залогом надёжности и предсказуемости веб-приложения.

Что такое DELETE запрос? | PrepBro