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

В каких запросах есть тело запросов

2.0 Middle🔥 162 комментариев
#Тестирование API

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

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

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

Тела запросов в HTTP

В протоколе HTTP наличие тела запроса (request body) определяется методом запроса и семантикой операции. Тело используется для передачи данных от клиента к серверу, таких как содержимое форм, JSON для API, файлы и т.д.

HTTP-методы, которые обычно используют тело запроса

  1. POST: Самый частый метод для отправки данных. Используется для создания ресурсов, отправки форм, вызова операций.
  2. PUT: Используется для полного обновления существующего ресурса. Данные для обновления передаются в теле.
  3. PATCH: Применяется для частичного обновления ресурса. В теле передается только набор изменяемых полей (например, в формате JSON Patch).
  4. DELETE: Технически может иметь тело согласно спецификации, хотя на практике это используется редко (например, для сложного условия удаления). Многие фреймворки и серверы могут его игнорировать.
  5. CONNECT, PROPFIND (WebDAV) и другие менее распространенные методы также могут использовать тело.

HTTP-методы, которые НЕ используют тело запроса (или используют крайне редко)

  • GET: Запрос данных. Все параметры передаются в URL (query string). Наличие тела не определено стандартом и может быть проигнорировано сервером.
  • HEAD: Аналогичен GET, но сервер возвращает только заголовки ответа без тела. Тело запроса не используется.
  • OPTIONS: Запрос информации о поддерживаемых методах. Тело не требуется.
  • TRACE: Используется для диагностики, тело не используется.

Примеры запросов с телом

1. POST запрос с JSON телом (REST API):

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "Иван Петров",
  "email": "ivan@example.com",
  "active": true
}

2. PUT запрос для обновления ресурса:

PUT /api/products/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "price": 2999,
  "stock": 15
}

3. PATCH запрос с форматом JSON Patch:

PATCH /api/products/123 HTTP/1.1
Host: example.com
Content-Type: application/json-patch+json

[
  { "op": "replace", "path": "/price", "value": 2799 },
  { "op": "add", "path": "/tags", "value": ["sale"] }
]

4. POST запрос с данными формы (multipart/form-data для загрузки файла):

POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="description"

Простое описание
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="file"; filename="report.pdf"
Content-Type: application/pdf

<бинарные данные файла>
------WebKitFormBoundaryABC123--

Ключевые аспекты для QA-инженера

  • Валидация: Тело запроса — ключевая область для тестирования негативных сценариев. Необходимо проверять:
    *   Корректность формата (JSON, XML, form-data).
    *   Валидность данных (типы, обязательные поля, граничные значения).
    *   Обработку невалидных данных (мусор, SQL-инъекции, XSS-скрипты).
    *   Обработку больших объемов данных.
  • Заголовок Content-Type: Крайне важно, чтобы заголовок Content-Type точно соответствовал формату передаваемого тела (например, application/json). Несоответствие может привести к ошибкам парсинга на стороне сервера.
  • Idempotency (идемпотентность): Методы PUT и DELETE являются идемпотентными (повторный идентичный запрос не должен изменять состояние системы сверх первого вызова). Это важно учитывать при тестировании API.
  • Инструменты: Для тестирования таких запросов используются Postman, cURL, Insomnia, или автоматизация на базе Python (requests), Java (RestAssured), JavaScript (axios, fetch).
# Пример теста на Python с библиотекой requests
import requests
import json

def test_create_user():
    url = "https://api.example.com/users"
    headers = {"Content-Type": "application/json"}
    payload = {
        "name": "Тест Тестерович",
        "email": "test@example.com"
    }

    response = requests.post(url, data=json.dumps(payload), headers=headers)
    assert response.status_code == 201
    response_data = response.json()
    assert "id" in response_data
    assert response_data["email"] == payload["email"]

Вывод: Тело запроса — основной способ передачи полезной нагрузки клиента на сервер при операциях создания, обновления и других изменяющих действиях. Для QA-инженера глубокое понимание этого механизма, умение формировать и валидировать различные типы тел запросов критически важно для эффективного тестирования API, back-end логики и обеспечения безопасности приложения.

В каких запросах есть тело запросов | PrepBro