Подтвердить что ты не робот

Определение идемпотентности

Таким образом, "идемпотенция" может быть определена как:

Действие, которое, если выполнено N раз, имеет тот же эффект, что и выполнение действия только один раз.

Получил это, достаточно легко.

Мой вопрос о тонкости этого определения - это действие, рассматриваемое как идемпотент само по себе, или вы должны также рассмотреть данные, передаваемые в действие?

Позвольте мне пояснить на примере:

Предположим, что у меня есть метод PUT, который обновляет некоторый ресурс, мы будем называть его f(x)

Очевидно, что f(3) является идемпотентным, если я поставлю 3 в качестве входа. И одинаково очевидно, что f(5) изменит значение ресурса (т.е. Оно больше не будет 3 или какое-либо значение ранее)

Итак, когда мы говорим об идемпотентности, мы имеем в виду обобщение действия/функции, подобного (т.е. f(x)), или мы имеем в виду действие/функцию + данные, передаваемые в нее (т.е. f(3))?

4b9b3361

Ответ 1

Предположим, что у меня есть метод PUT, который обновляет некоторый ресурс, мы его будем называть F (X)

Очевидно, что f (3) является идемпотентным, пока я ввожу 3 в качестве входа. А также одинаково очевидно, f (5) изменит значение ресурса (т.е. оно больше не будет 3 или независимо от того, что было ранее).

Это очевидно только в том случае, если реализация сервера такова, что PUT соответствует этому свойству idempotent. В контексте HTTP RFC 2616 говорит:

Методы могут также обладать свойством "идемпотенции" в этом (в сторону от ошибок или ошибок истечения) побочные эффекты N > 0 идентичныезапросы такие же, как и для одного запроса.

Отвлекитесь от темы... В распределенной системе, например в Интернете, вы также можете рассмотреть коммутативность и параллельные запросы. Например, N + 1 одного и того же запроса PUT (x1) должен иметь тот же эффект, но вы не знаете, сделал ли другой клиент другой запрос PUT (x2) между вашими, так что в то время как nPUT (x1) = PUT (x1) ) и mPUT (x2) = PUT (x2), два набора запросов могут чередоваться.

Ответ 2

Idempotence требует, чтобы действие выполнялось для всех значений над его доменом, т.е. f(f(x)) = f(x) для всех x. Другой способ подумать об этом заключается в том, что операция является идемпотентной, если состав операции с ней - это просто операция.

Ответ 3

Вы предполагаете, что идемпотенция означает, что состояние сервера будет изменено не более одного раза с помощью серии вызовов. Большую часть времени люди используют этот термин для обозначения того, что состояние на сервере не будет изменено никаким количеством вызовов. В этих обстоятельствах различие между вашими двумя случаями несущественно.

Ответ 4

Это не совсем определение идемпотенции. Функция является идемпотентной, если для любого элемента x, f (f (x)) == f (x).

PUT - побочный эффект функции f(), а не результат.