Ответ
Да, согласно спецификации HTTP, метод PUT является идемпотентным и предназначен для полного обновления ресурса по известному URI. Если ресурс по указанному URI не существует, сервер может создать его. Возможность создания через PUT зависит от реализации конкретного API.
Сценарии, которые нужно проверить при тестировании:
-
Создание ресурса с клиентским ID (допустимое поведение):
PUT /api/v1/users/12345 HTTP/1.1 Host: example.com Content-Type: application/json {"name": "Alice", "role": "admin"}- Ожидаемый результат для нового ID
12345:201 Createdс заголовкомLocation: /api/v1/users/12345и телом нового ресурса. - Ожидаемый результат для существующего ID
12345:200 OKили204 No Content(ресурс полностью заменен).
- Ожидаемый результат для нового ID
-
Сервер может запретить создание через PUT (частая практика):
- Ожидаемый результат для нового ID:
404 Not Foundили403 Forbiddenс пояснением в теле ошибки.
- Ожидаемый результат для нового ID:
-
Сравнение с POST:
POSTна коллекцию (/api/v1/users) используется для создания, когда сервер генерирует ID. Ответ201 Created.PUTна конкретный ресурс (/api/v1/users/12345) — для создания/замены по известному URI.
Что важно в тестах:
- Проверить документацию API на предмет ожидаемого поведения.
- В тест-кейсах четко разделять сценарии для существующих и несуществующих URI.
- Проверить идемпотентность: несколько идентичных PUT-запросов подряд должны давать тот же результат, что и один.