Ответ
Основная опасность метода 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,
# требуя отправки полного представления ресурса.
Что проверять в тестах:
- Валидация входящих данных (требуется ли полное представление ресурса?).
- Механизмы предотвращения конфликтов (заголовки
ETag,If-Match). - Корректная обработка конкурентных запросов.
- Строгая проверка прав доступа (может ли пользователь A изменить ресурс пользователя B?).