2

我正在构建一个基于 REST 的幂等 POST API 调用。我想实现幂等行为以避免客户端在网络故障和超时期间创建重复资源。客户端在每个 API 调用的请求标头中传递一个 ClientToken。我的 POST 请求具有标准有效负载,并且我有围绕它的验证逻辑。在重试期间,API 期望的理想幂等行为是什么?它应该仅依赖于 ClientToken 并忽略请求有效负载,还是应该在使用 ClientToken 调用幂等检查之前在请求有效负载上运行验证逻辑?

4

2 回答 2

1

这取决于,但对于我实现的幂等 API,我总是先检查令牌。

因为我只将幂等性令牌存储在与对数据库所做的更改相同的事务中(例如插入新资源),所以我知道如果它是它们的,那么所请求的任何内容都已经被提交并在之前工作过。

如果令牌存在,我将在验证有效负载之前立即将创建的 201 与链接(用于 POST)一起返回给客户端。

这样做的原因是客户端的游戏规则是幂等性令牌允许您重试完全相同的请求。如果有人编写了一个愚蠢到足以更改有效负载并使用相同幂等性令牌的客户端,那是在他们头上。

首先检查幂等性令牌的好处是,如果有效载荷的验证很繁重,它可能会节省一些验证工作。

于 2017-09-15T05:29:59.407 回答
-1

首先,POST作为一种HTTP方法,不是幂等的。幂等意味着多个相同的请求应该具有与单个请求相同的效果。

如果您更改有效负载,您将不再有相同的请求。如果您将它们与相同的令牌一起使用,那么服务器上会发生什么?第二个不同的请求会导致副作用吗?如果是这样,那么它就不再是无能的了。另一方面,如果结果相同,则该方法是幂等的,因此有效负载无关紧要,但您不再需要遵守 HTTP 幂等性所需的相同请求。

我会亲自检查请求是否具有相同的有效负载,并拒绝具有不同有效负载的后续请求。

于 2014-12-31T14:34:58.433 回答