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

Что делает POST?

1.0 Junior🔥 211 комментариев
#Веб-тестирование#Тестирование API

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

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

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

POST: HTTP метод создания данных

Что такое POST?

POST — это HTTP метод, который используется для отправки данных на сервер с целью создания нового ресурса. POST request передаёт данные в теле запроса (body), а не в URL, как это делает GET.

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

Отправка данных

  • Данные находятся в теле (body) запроса
  • Данные не видны в URL (более безопасно для чувствительной информации)
  • Может отправлять большие объёмы данных
  • Данные кодируются как JSON, XML, form-data и т.д.

Создание нового ресурса

  • POST используется для создания новых объектов
  • Сервер определяет ID нового ресурса
  • Обычно возвращает 201 Created статус код
  • Возвращает данные созданного ресурса

Не идемпотентен

  • Два одинаковых POST запроса создадут два разных ресурса
  • Поэтому повтор запроса может привести к дублированию

Изменяет состояние сервера

  • POST имеет побочные эффекты
  • Создаёт новые данные в БД

Практические примеры POST

Пример 1: Создание пользователя

POST /api/v1/users
Content-Type: application/json

{
  "name": "John Doe",
  "email": "john@example.com",
  "password": "securepass123"
}

Ответ (201 Created):
{
  "id": 42,
  "name": "John Doe",
  "email": "john@example.com",
  "created_at": "2024-03-26T10:30:00Z"
}

Пример 2: Создание заказа

POST /api/v1/orders
Content-Type: application/json

{
  "user_id": 42,
  "items": [
    {"product_id": 1, "quantity": 2},
    {"product_id": 5, "quantity": 1}
  ],
  "total_amount": 99.99
}

Ответ (201 Created):
{
  "order_id": 1000,
  "status": "pending",
  "created_at": "2024-03-26T10:35:00Z"
}

Пример 3: Отправка комментария

POST /api/v1/posts/100/comments
Content-Type: application/json

{
  "content": "Отличная статья!",
  "user_id": 42
}

Ответ (201 Created):
{
  "comment_id": 500,
  "post_id": 100,
  "content": "Отличная статья!",
  "created_at": "2024-03-26T10:40:00Z"
}

POST vs GET

АспектGETPOST
НазначениеПолучение данныхСоздание данных
ДанныеВ URL (видны)В теле (не видны)
Объём данныхОграничен размером URLНе ограничен
БезопасностьНизкая (видны в истории)Выше (не видны в URL)
КэшированиеКэшируетсяОбычно не кэшируется
ИдемпотентностьИдемпотентенНе идемпотентен
Побочные эффектыНетДа (создаёт данные)
Статус код200 OK201 Created

POST vs PUT

POST — создание нового ресурса

POST /api/v1/users
→ Создаёт нового пользователя с ID, который определяет сервер
→ Возвращает 201 Created

PUT — замена или обновление ресурса

PUT /api/v1/users/42
→ Заменяет пользователя с ID 42 (или создаёт если не существует)
→ ID определяется клиентом в URL
→ Возвращает 200 OK или 201 Created

PATCH — частичное обновление

PATCH /api/v1/users/42
→ Обновляет только переданные поля пользователя
→ Остальные поля не меняются
→ Возвращает 200 OK

Статус коды при POST

201 Created (Успешное создание)

  • Ресурс успешно создан
  • Обычно возвращает созданный объект
  • Может содержать Location header с URL нового ресурса

200 OK (Успех, но нет созданного объекта)

  • Иногда используется вместо 201
  • Менее правильно, но встречается

400 Bad Request (Ошибка в данных)

  • Переданные данные неверные
  • Пример: забыли email, или email неверного формата
  • Сервер не создаёт ресурс

401 Unauthorized (Не авторизован)

  • Пользователь не залогинен
  • Нужна аутентификация

403 Forbidden (Запрещено)

  • Пользователь авторизован но не имеет прав
  • Пример: обычный пользователь пытается создать admin

409 Conflict (Конфликт)

  • Ресурс уже существует
  • Пример: почта уже зарегистрирована

422 Unprocessable Entity (Невозможно обработать)

  • Данные валидны по формату но неприемлемы по логике
  • Пример: дата рождения в будущем

500 Internal Server Error (Ошибка сервера)

  • Ошибка на стороне сервера
  • Ресурс может быть или не быть создан

Content-Type при POST

application/json (самый популярный)

POST /api/v1/users
Content-Type: application/json

{"name": "John", "email": "john@example.com"}

application/x-www-form-urlencoded (для форм)

POST /api/v1/login
Content-Type: application/x-www-form-urlencoded

username=john&password=secret

multipart/form-data (для файлов)

POST /api/v1/upload
Content-Type: multipart/form-data

[файл и другие данные]

Тестирование POST в QA

С помощью curl

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "John", "email": "john@example.com"}'

С помощью Postman

  • Выбрать метод POST
  • Ввести URL endpoint
  • В Body выбрать JSON
  • Ввести данные
  • Отправить запрос
  • Проверить ответ (статус код, содержимое)

С помощью Playwright (E2E тестирование)

const response = await page.request.post(
  'https://api.example.com/users',
  {
    data: {
      name: 'John',
      email: 'john@example.com'
    }
  }
);
console.assert(response.status() === 201);

Проверочный лист для QA при тестировании POST

Положительные сценарии

  • Корректные данные → 201 Created, ресурс создан
  • Ресурс содержит все переданные поля
  • Возвращается ID нового ресурса
  • Данные сохранены в БД

Отрицательные сценарии

  • Пустые обязательные поля → 400
  • Неверный формат данных → 400 или 422
  • Неверный тип данных → 400
  • Дублирование уникального поля → 409
  • Без авторизации → 401
  • Без прав → 403

Граничные случаи

  • Максимально длинные строки
  • Спецсимволы в текстах
  • Очень большие числа
  • Null значения
  • Пустые массивы

Безопасность

  • Данные передаются по HTTPS
  • Чувствительные данные не логируются
  • XSS защита (спецсимволы экранируются)
  • SQL injection защита

Идемпотентность и дублирование

Проблема: если пользователь нажимает кнопку дважды, POST выполняется дважды → два ресурса!

Решения:

  • Idempotency Key: клиент отправляет уникальный ключ, сервер не дублирует
  • Deduplication: сервер отслеживает недавние запросы и отклоняет дубли
  • UI блокировка: кнопка отключается после нажатия до получения ответа

Заключение

POST — это основной метод для создания новых ресурсов в REST API. QA инженер должен понимать как работает POST, какие статус коды он возвращает, и как правильно его тестировать. POST часто используется в веб и мобильных приложениях для регистрации, создания заказов, отправки комментариев и других операций создания данных.

Что делает POST? | PrepBro