ToB企服应用市场:ToB评测及商务社交产业平台

标题: 第55篇 怎样保证接口的幂等性题目 [打印本页]

作者: 河曲智叟    时间: 2024-11-25 09:56
标题: 第55篇 怎样保证接口的幂等性题目
1.接口幂等性定义

接口幂等性这一概念源于数学,原意是指一个操作假如连续实行多次所产生的效果与仅实行一次的效果相同,那么我们就称这个操作是幂等的。在互联网领域,特别是在Web服务、API设计和分布式体系中,接口幂等性具有非常重要的意义。
具体到HTTP接口或者服务间的API调用,接口幂等性就可以明白为当客户端对同一接口发起多次相同的哀求时,服务端体系也应该确保只实行一次相应的操作,而且不论接收到了多少次哀求,体系的状态变动始终是一致的,不会由于重复的哀求而导致数据的错误。
比如我们经常遇到的订单创建,付出等业务。
假如一个“创建订单”接口实现了幂等性,当收到两次同样的创建哀求时,体系应该要么拒绝第二个哀求(由于它已经是重复哀求),要么确保只有一个订单被创建,而不是两个完全一样的订单。
对于一个“付出”接口,幂等性要求即便用户由于网络原因反复点击付出按钮,服务端也只会扣除用户账户一次金额,避免重复扣费。
2.导致接口幂等性题目的原因

3.怎样保证接口幂等?

3.1 前端调用

3.1.1 页面控制

3.1.2 使用RPG模式

3.1.3Token机制


3.2 服务端控制

在服务端接口处理逻辑时,可以通过通过一些特定的标识符或哀求参数来校验哀求的幂等性,以确保同样的哀求不会被重复处理。
3.2.1 唯一标识符

客户端每次发起哀求会携带一个全局唯一的标识符。服务器接收到哀求后就会对这个标识符进行检查,若服务器发现该标识符已经在体系中存在,表明这是一个重复哀求,此时服务器可以选择忽略该哀求,或者向客户端返回已处理过相同哀求的效果信息。若服务器未找到该标识符存在于体系内,则认定该哀求为新哀求,服务器将继续对其进行正常处理,并将此唯一标识符保存至体系中,以便于后续对接收的哀求进行有效性校验,防止同一哀求的重复处理。比如我们在要求上游ERP体系对接订单平台时就会要求上游传递一个账号下全局唯一的一个参考单号,这个参考单号一个很重要的作用就是保证接口幂等性。
3.2.2 哀求参数

某些哀求参数确实可以用来辅助校验哀求的幂等性。例如,时间戳可以作为一种大概的哀求参数,在处理哀求时,服务器可以通过比较时间戳与服务器当前时间来判断哀求的有效性。若时间戳与当前时间之间的差异超出预设的公道范围(如几秒钟到几分钟不等,具体阈值视业务场景而定),服务器可以推测该哀求大概是由于网络延迟或者其他原因导致的重复提交。
3.2.3 状态机设计

对于状态转移类的操作范例的业务,可采用状态机设计,每次哀求只允许合法的状态变迁,非法状态变迁(如已经完成的订单不允许再次付出)将被拒绝。
3.2.4 乐观锁

在更新数据时,可以通过版本号或时间戳等机制判断数据是否已被修改,防止因并发哀求导致的多次更新题目。具体做法:
4 总结

幂等性是开发当中很常见也很重要的一个需求,尤其是订单,付出以及与款项挂钩的服务,保证接口幂等性尤其重要。在实际开发中,我们必要针对不同的业务场景我们必要机动的选择幂等性的实现方式:
假如是web服务,客户端可以采取在页面上使用按钮置灰禁用,使用PRG模式,或者搭配后端的Token令牌进行解决。
在服务端,我们可以采取唯一标识符,乐观锁,Token令牌,状态机等校验方式。
本漫笔借鉴或转载自:https://www.coderacademy.online/article/springbootidempotent.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4