Что такое идемпотентность в контексте HTTP и API?

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

Ответ

Идемпотентность — это свойство операции, при котором ее многократное выполнение (с одинаковыми входными данными) приводит к одинаковому результату и состоянию системы, как и после первого выполнения.

Принцип в HTTP:

  • Идемпотентные методы: GET, HEAD, PUT, DELETE, OPTIONS, TRACE. Повторные идентичные запросы не должны оказывать дополнительного эффекта на сервер.
  • Неидемпотентный метод: POST. Каждый запрос обычно создает новый ресурс.

Примеры:

  • DELETE /api/users/123 — Удаляет пользователя с ID 123. Повторные вызовы вернут тот же результат (например, 404 или 410), состояние "пользователь удален" не изменится.
  • PUT /api/users/123 { "name": "Alice" } — Устанавливает имя пользователя в "Alice". Повторные вызовы не изменят итоговое состояние.
  • POST /api/users { "name": "Alice" } — Создаст нового пользователя "Alice" при каждом вызове. Не идемпотентен.

Практическая ценность: Идемпотентность критически важна для надежности сетевых взаимодействий. Если клиент не получил ответ (из-за таймаута или сетевой ошибки), он может безопасно повторить идемпотентный запрос, не опасаясь создать дубликаты или вызвать побочные эффекты.