2016-09-01 5 views
1

Определение idempotent в wikipedia:: Idempotence - это свойство определенных операций в математике и информатике, которое может применяться несколько раз, не изменяя результат, выходящий за пределы исходного приложения.Когда вы можете вызвать операцию idempotent?

Проблема: У меня есть REST API PUT call, который обновляет свойства агрегирования домена. Кроме того, он запускает событие для каждого свойства, которое было обновлено. Теперь, если у нас есть два точных одинаковых PUT-вызовов один за другим в нашем бэкэнд:

  1. Первый вызов PUT обновляет свойства агрегата и огни позволяет сказать 5 событий.
  2. Второй вызов PUT обновляет свойства агрегата, но не запускает какое-либо событие, потому что свойства агрегата не изменились (первый вызов PUT обновил значения агрегированных свойств).

Вопрос: Это операция идемпотент?

+1

Вид операций, упомянутых в статье в Википедии, обычно не имеет побочных эффектов. – Thomas

ответ

0

Да, это так: независимо от того, сколько раз вы отправляете один и тот же запрос PUT, он оставляет вашу систему (вашу совокупность) в том же состоянии.

1

This question and its answers объясните, что такое идемпотентная операция. Короче говоря, повторные вызовы не меняют результат.

Итак, из вашего описания этой операции, похоже, она квалифицируется как идемпотент.

0

Да и Нет. Это идемпотент с точки зрения данных. Данные в базе данных не будут меняться независимо от того, сколько раз вы выполняете вызов. Но это не является идемпотентным в том смысле, что могут произойти некоторые каротажные или другие события, которые изменили бы «энтропию» системы :)

0

Это зависит от вашего определения. Поскольку у вас есть побочные эффекты (отключение некоторых событий, если есть разница), множественные вызовы могут вызывать больше побочных эффектов, чем хотелось бы. Однако состояние приложения, игнорируя побочные эффекты без параллелизма, будет идемпотентным. Помните, что вызовы REST выполняются по асинхронной сети, поэтому это распределенная система.

Если у вас есть два параллельных процесса, они могут запускать другое количество побочных эффектов. Например:

a = 2 
a = 3 
a = 2 
a = 3 

будет стрелять в два раза больше событий, как

a = 2 
a = 2 
a = 3 
a = 3 

, которые могут вызвать некоторые проблемы.

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