Можно ли создать новый ресурс с помощью HTTP-метода PUT при тестировании API?

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

Ответ

Да, согласно спецификации HTTP, метод PUT является идемпотентным и предназначен для полного обновления ресурса по известному URI. Если ресурс по указанному URI не существует, сервер может создать его. Возможность создания через PUT зависит от реализации конкретного API.

Сценарии, которые нужно проверить при тестировании:

  1. Создание ресурса с клиентским 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 (ресурс полностью заменен).
  2. Сервер может запретить создание через PUT (частая практика):

    • Ожидаемый результат для нового ID: 404 Not Found или 403 Forbidden с пояснением в теле ошибки.
  3. Сравнение с POST:

    • POST на коллекцию (/api/v1/users) используется для создания, когда сервер генерирует ID. Ответ 201 Created.
    • PUT на конкретный ресурс (/api/v1/users/12345) — для создания/замены по известному URI.

Что важно в тестах:

  • Проверить документацию API на предмет ожидаемого поведения.
  • В тест-кейсах четко разделять сценарии для существующих и несуществующих URI.
  • Проверить идемпотентность: несколько идентичных PUT-запросов подряд должны давать тот же результат, что и один.