2011-12-14 4 views
11

Так «идемпотентность» может быть определена как:Определение идемпотентность

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

Получил это, легко.

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

Поясню на примере:

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

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

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

+1

Должно ли это не быть перенесено на форум математики? (Для всей ясности: я не уменьшал) –

+0

Зависит, если мы говорим об определении в формальной логике или определении в веб-программировании. Я подозреваю, что нисходящий (а не я) просто подумал, что вопрос был неправильным. –

+1

@Roy - я так не думаю, так как он применяется непосредственно к веб-службам RESTful, и это контекст, который я написал в примере в – Didaxis

ответ

5

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

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

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

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

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

+0

Итак, из этого можно заключить, что в этом примере PUT является идемпотентным в контексте одного запроса. Но даже когда он чередуется с другими параллельными запросами, он все еще идемпотент, поскольку результат первой операции соответствует свойству idempotence, не так ли. –

3

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

+3

Но заявляйте, что «выиграл», вообще-то не изменится "является" нульпотентным ", верно? Это будет GET, HEAD, OPTIONS и TRACE. – Didaxis

5

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

+0

@ JonathanM Извините, я не вижу вашей точки. 'abs (abs (x)) = abs (x)' для всех 'x', над действиями или комплексными числами. Если вы считаете, что 'abs' не соответствует тому, что я изложил, просьба дать контрпример. –

3

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

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

+0

Ваше определение противоречит приведенному здесь: http://en.wikipedia.org/wiki/Idempotence. На первой странице сайта 'abs()' как функция idempotent, но это не будет по вашему определению. –

+0

Это просто неправильно. Вы определили, что идемпотенция эквивалентна функции идентификации. Вы подразумеваете, что операция уже выполнена с помощью x. –

+0

Да, это правда, извините за путаницу ... – fge

Смежные вопросы