Какие из HTTP-методов POST, PUT и PATCH являются идемпотентными

Ответ

Идемпотентным является 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 }