В чем опасность метода PUT при тестировании API?

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

Ответ

Основная опасность метода PUT с точки зрения тестирования заключается в его идемпотентности — повторный вызов с теми же данными полностью перезаписывает ресурс. Это может привести к следующим рискам, которые необходимо проверять в тестах:

  • Потеря данных: Если клиент отправляет запрос с неполным представлением ресурса (например, только одно поле), сервер может заменить весь существующий ресурс, удалив остальные поля. Тесты должны проверять, как API обрабатывает такие неполные запросы.
  • Нарушение целостности данных (Race Conditions): Если два параллельных PUT-запроса приходят к одному ресурсу, последний выиграет, что может привести к потере изменений из первого запроса. Это требует тестирования на конкурентность.
  • Проблемы с безопасностью: Без должной авторизации PUT может позволить перезаписать конфиденциальные данные другого пользователя.

Пример сценария для тестирования:

# Исходное состояние ресурса
GET /api/users/123
{
  "id": 123,
  "name": "Иван",
  "email": "ivan@example.com",
  "role": "user"
}

# PUT-запрос, изменяющий только имя
PUT /api/users/123
Content-Type: application/json
{"name": "Петр"}

# Ожидаемый результат зависит от реализации API.
# Плохой сценарий (полная замена):
GET /api/users/123
{"name": "Петр"} # Поля email и role потеряны!

# Хороший сценарий (валидация или использование PATCH):
# API должен вернуть ошибку 400 Bad Request или 422 Unprocessable Entity,
# требуя отправки полного представления ресурса.

Что проверять в тестах:

  1. Валидация входящих данных (требуется ли полное представление ресурса?).
  2. Механизмы предотвращения конфликтов (заголовки ETag, If-Match).
  3. Корректная обработка конкурентных запросов.
  4. Строгая проверка прав доступа (может ли пользователь A изменить ресурс пользователя B?).