如何解决您如何看待使用UUID v5使REST APIPOST等幂?
如果请求失败,则HTTP POST通常不是幂等的(再次执行失败的请求可能会导致多次插入)。您如何将用户会话ID用作UUID v5“名称空间”,而将JSON有效负载用作“名称”呢?它将为多个请求产生相同的ID,并且数据库将拒绝其他插入。
解决方法
有些API专门将HTTP方法标记为非幂等。
默认情况下,POST是非等幂的,并不表示不允许这样做,这只是意味着通用客户端无法假定它们是。
我见过的最好的实现是Stripe API,它使用Idempotency-Key
作为HTTP标头。客户端对此进行定义,如果接收到两个具有相同ID的请求,则Stripe知道如何处理第二个请求。我认为这是最好的方法,并且比尝试根据请求构造哈希的想法更好。 外观请求相同并不意味着效果相同,请考虑以下POST
请求:
POST /increment
Content-Type: application/json
{ "increment-by": 2 }
如果我两次发送此请求,那么即使每次请求的正文都相同,我也希望ID会增加到4。
Idempotency-Key
允许客户端控制并通知服务器2个请求实际上是否相同。
https://stripe.com/blog/idempotency
后续行动:
我是否将幂等键存储为记录中的单独列?
我倾向于将这种功能作为某种中间件在全球范围内实现。
将等幂密钥存储在Redis之类的文件中会产生两个现实的风险(例如,服务器创建数据库记录并在写入Redis之前崩溃)。
使用交易。
您需要存储的所有密钥都是您之前看过的,并且只有在请求成功后才需要存储。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。