在这里(https://softwareengineering.stackexchange.com/questions/320143/should-an-idempotent-service-always-return-the-same),我找到了一个很好的答案。
但是“相同请求”的定义到底是什么?
可以将两个具有相同主体内容的不同API调用(不同的requestid / correlationid)视为相同的请求吗?
我的理解是:何时和如何(通过api调用或事件消息传递)这两个请求都没有关系,只要它们具有相同的对应用程序状态的影响,那么两者都是相同的请求。它是否正确?
答案 0 :(得分:0)
只要请求后应用程序状态保持不变。幂等性取决于您要如何处理这类情况。
CASE
increment(x)
我强烈不鼓励使用此类API;但它们必须具有唯一的相关ID或某种访问控制才能正常工作。
append(xs, x)
idempotency token: 521F14B6-4A72-467F-8CD0-6654C69F4629
increment(x);
append(xs, x)
where xs read at revision 1022;
您如何确定两个Put(x=1)
Delete(x)
Put(x=1)
是否相同?同样,幂等性令牌或接纳控制,或两者兼而有之。
幂等标记的一个关键问题是如何处理它们。他们有TTL吗?您是否将它们存储在数据库中?