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

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

Ответ

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

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

  • GET — получение ресурса. Повторные запросы не влияют на сервер.
  • HEAD — аналогичен GET, но без тела ответа.
  • PUT — создание или полное обновление ресурса по известному URI. Повторный вызов с теми же данными оставляет ресурс в том же состоянии.
  • DELETE — удаление ресурса. После первого успешного удаления последующие запросы обычно возвращают 404 Not Found или 410 Gone, что также является идемпотентным результатом.
  • OPTIONS и TRACE — безопасные методы, не изменяющие состояние.

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

  • POST — создание ресурса. Каждый вызов обычно создает новый объект, изменяя состояние системы.

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

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

{"name": "Alice", "role": "admin"}

Повторная отправка этого же запроса не создаст нового пользователя и не изменит результат — пользователь 123 будет иметь имя "Alice" и роль "admin".