Что такое определение идентичного запроса? - PullRequest
0 голосов
/ 20 июня 2019

Я нашел здесь хороший ответ о idompetancy (https://softwareengineering.stackexchange.com/questions/320143/should-an-idempotent-service-always-return-the-same).

Но что на самом деле означает «идентичный запрос»?
Можно ли два разных вызова API (разные requesttid / correlationid) но с точно таким же содержимым тела можно считать идентичный запрос?

Насколько я понимаю: не имеет значения , когда и , как (либо через вызов API, либо через событиеобмен сообщениями) оба запроса выполняются, если они одинаково влияют на состояние приложения, тогда оба запроса одинаковы. Это правильно?

1 Ответ

0 голосов
/ 20 июня 2019

Пока состояние приложения остается неизменным после запросов. То, как вы делаете идемпотентность, зависит от того, как вы хотите справиться с сценариями такого типа.

Сценарий 1

increment(x)
append(xs, x)

Я настоятельно не рекомендую такие API; но для правильной работы они должны иметь уникальный идентификатор корреляции или какой-либо контроль доступа.

idempotency token: 521F14B6-4A72-467F-8CD0-6654C69F4629
increment(x);
append(xs, x)
   where xs read at revision 1022;

Сценарий 2

Put(x=1)
Delete(x)
Put(x=1)

Как вы определяете, совпадают ли два Put? Опять же, либо токены идемпотентности, либо контроль доступа, либо оба.


Ключевой вопрос с токенами идемпотентности - что с ними делать. У них есть TTL? Вы храните их в базе данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...