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

«Какие HTTP-методы являются идемпотентными?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

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

  • GET — получение ресурса. Не изменяет состояние сервера.
  • HEAD — аналогичен GET, но возвращает только заголовки.
  • PUT — полное обновление ресурса. Повторные запросы с тем же телом не изменяют итоговое состояние.
  • DELETE — удаление ресурса. После первого успешного удаления ресурс отсутствует, и последующие запросы не меняют это состояние.
  • OPTIONS — получение информации о поддерживаемых методах.

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

  • POST — создание ресурса. Каждый вызов обычно создает новый объект.
  • PATCH — частичное обновление. Результат может зависеть от текущего состояния ресурса.

Пример идемпотентности PUT:

PUT /api/users/123 HTTP/1.1
Content-Type: application/json

{"name": "Alice", "email": "alice@example.com"}

Повторная отправка этого же запроса несколько раз оставит пользователя с ID 123 в том же состоянии (name: Alice, email: alice@example.com), что и после первого выполнения.