Ответ
Идемпотентность — свойство операции, при котором её многократное выполнение с одинаковыми входными данными даёт тот же результат, что и однократное, не вызывая дополнительных изменений состояния системы после первого вызова.
Ключевая идея: Повторный вызов безопасен и предсказуем.
Примеры:
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).