...

Что такое идемпотентность

Идемпотентность – свойство операции производить один и тот же результат, если повторить операцию (применить ее к объекту) несколько раз.

Примеры

Командная строка

head /etc/passwd >>file – неидемпотентная операция; при каждом запуске файл file будет прирастать

head /etc/passwd >file – если нас интересует только содержимое файла, то операция идемпотентная. При первом и последующих запусках результат (содержимое файла) одинаковый. Если же нас интересует и время модификации файла, то операция неидемпотентная, при каждом запуске время модификации обновляется.

rm – неидемпотентная операция. Первый раз она удалит файл и закончится успешно, второй и последующие – будет завершаться с ненулевым кодом выхода.

rm -f – идемпотентная операция. При первом и последующих запусках результат одинаковый: файла нет, команда завершилась успешно.

touch file – строго говоря, неидемпотентная операция. Каждый раз время модификации файла меняется. Но если нас интересует только факт существования файла, то можно считать touch идемпотентной.

touch -t 197001010000 file – идемпотентная операция. При первом и последующем запусках результат одинаковый: файл file существует, его время модификации – полночь 1 января 1970 года.

HTTP-методы

RFC 7231 требует, чтобы HTTP-методы GET, HEAD, OPTIONS, TRACE, PUT, DELETE были идемпотентными (RFC 7231, разделы 4.2.1 и 4.2.2)

Зачем?

Зачем различать идемпотентные и неидемпотентные операции в компьютерных системах?

Если операция неидемпотентная, то надо аккуратно учитывать, сколько раз она уже применялась. Идемпотентную операцию безопасно повторить лишний раз.

Откуда такое название

Название старое, из 19 века, из математики. Сконструировано из латинских слов idem – тот же самый и potens – способный.

Ссылки