Ответ
Метод HTTP PUT является идемпотентным. Многократная отправка одного и того же PUT-запроса должна приводить систему в одинаковое конечное состояние.
Семантика PUT — «полностью заменить ресурс по указанному URI».
Последствия нескольких идентичных запросов:
- Если ресурс существует: Он будет полностью перезаписан данными из тела запроса. Первый и все последующие успешные запросы оставят ресурс в идентичном состоянии.
- Если ресурс не существует и 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), но состояние ресурса будет одинаковым.