Пока состояние приложения остается неизменным после запросов. То, как вы делаете идемпотентность, зависит от того, как вы хотите справиться с сценариями такого типа.
Сценарий 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? Вы храните их в базе данных?