Что такое идемпотентность метода в программировании?

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

Ответ

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

Ключевая идея: Повторный вызов безопасен и предсказуем.

Примеры:

1. Идемпотентный HTTP-метод DELETE:

DELETE /api/users/123
  • Первый вызов: удаляет пользователя с ID 123 → возвращает 200 OK или 204 No Content.
  • Последующие вызовы: ресурс уже удалён → возвращают 404 Not Found. Состояние системы (отсутствие пользователя 123) не меняется.

2. Неидемпотентный HTTP-метод POST:

POST /api/users
Body: {"name": "Alice"}

Каждый вызов создаёт нового пользователя, изменяя состояние системы.

3. Идемпотентная функция (Python):

def set_status(user_id, status):
    # Обновляет статус, всегда устанавливая конкретное значение
    database.update(user_id, {'status': status})
# Многократный вызов set_status(5, 'active') даст одинаковый результат

Практическая важность: Идемпотентность критична для надёжности API, обработки повторяющихся запросов (например, из-за сетевых таймаутов) и механизмов повтора (retry).