Каковы последствия многократной отправки PUT-запроса?

«Каковы последствия многократной отправки PUT-запроса?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод HTTP PUT является идемпотентным. Многократная отправка одного и того же PUT-запроса должна приводить систему в одинаковое конечное состояние.

Семантика PUT — «полностью заменить ресурс по указанному URI».

Последствия нескольких идентичных запросов:

  1. Если ресурс существует: Он будет полностью перезаписан данными из тела запроса. Первый и все последующие успешные запросы оставят ресурс в идентичном состоянии.
  2. Если ресурс не существует и API это позволяет: Первый запрос создаст ресурс, а последующие — перезапишут его (фактически, результат будет тем же).

Пример:

PUT /api/users/123 HTTP/1.1
Content-Type: application/json

{"name": "Alice", "status": "active"}

После однократного или десятикратного выполнения этого запроса ресурс /api/users/123 будет содержать {"name": "Alice", "status": "active"}.

Важное уточнение:

  • Идемпотентность гарантирует одинаковый результат с точки зрения состояния ресурса.
  • Побочные эффекты (например, запись в лог, увеличение счетчика вызовов, отправка уведомления) могут происходить при каждом вызове, если это не предусмотрено специальной логикой.
  • Ответ сервера может отличаться (например, в первый раз 201 Created, а в последующие — 200 OK), но состояние ресурса будет одинаковым.