Ответ
Идемпотентным является HTTP-метод, многократное повторение которого приводит к тому же результату, что и однократное выполнение. Среди перечисленных методов PUT является идемпотентным, POST — нет, а PATCH может быть, но не гарантированно.
PUT
Идемпотентный. Этот метод полностью заменяет целевой ресурс данными из тела запроса. Повторная отправка того же запроса PUT
просто перезапишет ресурс теми же данными, не вызывая дополнительных изменений.
Пример:
# Первый запрос создает или обновляет пользователя
PUT /api/users/123
Content-Type: application/json
{ "name": "Alice", "email": "alice@example.com" }
# Повторный запрос приведет к тому же состоянию ресурса
PUT /api/users/123
Content-Type: application/json
{ "name": "Alice", "email": "alice@example.com" }
POST
Не идемпотентный. Обычно используется для создания нового ресурса. Каждый успешный POST
-запрос создает новую сущность, поэтому повторные вызовы приводят к созданию дубликатов.
PATCH
Условно идемпотентный. Метод PATCH
применяет частичные изменения к ресурсу. Его идемпотентность зависит от выполняемой операции.
- Идемпотентная операция: Установка конкретного значения поля.
// Установить статус "published". Повторные запросы не изменят результат. { "op": "replace", "path": "/status", "value": "published" }
- Неидемпотентная операция: Инкремент значения.
// Увеличить счетчик просмотров. Каждый запрос изменит состояние. { "op": "add", "path": "/views", "value": 1 }