Какие HTTP-методы являются идемпотентными

Ответ

Операция является идемпотентной, если её многократное повторение приводит к тому же результату и состоянию на сервере, что и однократное выполнение.

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

  • GET, HEAD, OPTIONS, TRACE: Считаются "безопасными", так как предназначены только для чтения данных и не должны изменять состояние сервера.
  • PUT: Полностью заменяет ресурс. Повторный запрос с теми же данными не изменит итоговое состояние ресурса.
  • DELETE: Удаляет ресурс. Первый запрос его удаляет, а все последующие будут возвращать ошибку (например, 404 Not Found), но состояние системы больше меняться не будет.

Неидемпотентные методы:

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

Практический пример:

  • PUT /users/123 с телом {"name": "Alex"}идемпотентно. Сколько бы раз вы ни отправили этот запрос, у пользователя с ID 123 имя будет "Alex".
  • POST /users с телом {"name": "Alex"}неидемпотентно. Каждый вызов создаст нового пользователя.

Важно: Идемпотентность — это свойство семантики метода, а не гарантия. Неправильная реализация на стороне сервера может нарушить это свойство (например, если GET-запрос будет содержать логику изменения данных).