Что такое идемпотентный HTTP-метод?

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

Ответ

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

Ключевая идея: "N > 0 идентичных запросов = эффект от одного запроса".

Идемпотентные методы (по спецификации HTTP/1.1):

  • GET
  • HEAD
  • PUT
  • DELETE
  • OPTIONS
  • TRACE

Неидемпотентный метод: POST (каждый запрос может создать новый ресурс).

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

PUT /api/users/456 HTTP/1.1
Host: example.com
Content-Type: application/json

{"name": "Alice"}

Повторная отправка этого PUT-запроса не создаст нового пользователя, а будет многократно обновлять одного и того же пользователя с id=456. Это и есть идемпотентность.

DELETE /api/files/789 HTTP/1.1
Host: example.com

Первый вызов DELETE удалит файл и вернет статус 200 OK или 204 No Content. Последующие вызовы того же DELETE часто возвращают 404 Not Found, но состояние сервера (отсутствие файла) не меняется — метод остается идемпотентным.

Важно: Идемпотентность гарантируется на уровне логики приложения. Серверная реализация должна обеспечивать это свойство.