Что такое идемпотентность HTTP-запроса

Ответ

Идемпотентность — это свойство HTTP-запроса, при котором повторная отправка одного и того же запроса приводит к тому же состоянию на сервере, что и после первого успешного выполнения.

Это ключевое свойство для построения надежных и предсказуемых API, особенно в условиях нестабильной сети, когда запросы могут дублироваться.

Классификация методов

  • Идемпотентные методы:

    • GET, HEAD, OPTIONS, TRACE: Безопасные методы, не изменяют состояние сервера.
    • PUT: Полностью заменяет ресурс. Повторный PUT с теми же данными просто перезапишет ресурс тем же состоянием.
    • DELETE: Удаляет ресурс. Повторный DELETE вернет ошибку (например, 404), но состояние системы (отсутствие ресурса) не изменится.
  • Неидемпотентные методы:

    • POST: Обычно создает новый ресурс. Каждый повторный запрос создаст новую сущность.
    • PATCH: Частично обновляет ресурс. Не является идемпотентным по спецификации, так как результат может зависеть от текущего состояния ресурса (например, инкремент значения).

Пример

# Идемпотентный запрос: сколько раз ни вызывай, пользователь 1 будет иметь имя "Alice"
PUT /users/1 HTTP/1.1
Content-Type: application/json

{ "name": "Alice" }

# Неидемпотентный запрос: каждый вызов создаст нового пользователя
POST /users HTTP/1.1
Content-Type: application/json

{ "name": "Bob" }