后端接口的幂等性

接口的幂等性:就是接口可重复调用,在调用多次的情况下,接口最终得到的结果是一致的
所有的接口可分为增删改查。,查询功能具有天然的幂等性,增加、更新、删除都要保证幂等性。
全局唯一ID
全局唯一ID就是根据业务的操作和内容生成一个全局ID,在执行操作前先根据这个ID是否存在,来判断这个操作是否已经执行。如果不存在则吧全局ID,存储到存储系统中,比如数据库、redis。如果存在则表示该方法已执行。

还需要考虑其他问题:比如一台机器虽然把全局ID写入了存储,但是写入后挂了,这需要引入***全局ID的超时机制***

去重表
这种方法是适用于在业务中有唯一标的插入场景,比如一个订单只会支付一次,所以订单ID可以作为唯一标识。这时可以创建一个去重表,并把唯一标识作为唯一索引,实现时,把创建支付单据和写入去重表,放在一个事务中,如果重复创建,数据库就会抛出唯一约束异常,操作就会回滚。

状态机控制
这种方法适合在有状态流转的情况下,如果订单创建和付款。设计订单状态字段时,使用int类型,并通过值类型的大小做幂等。

插入或更新
这种方法插入并且有唯一索引的情况,比如要关联商品品类,商品ID和品类ID可以构成唯一索引,并且在数据库中页做了唯一索引。
更新业务接口幂等性一般通过各种层面的锁和cas机制。表单要防重复提交

新增业务
同一个用户用同样的数据多次请求同一个接口,防重复提交,业务数据连同token,一起提交,同一个token只能被正确的处理一次。应该缓存某次新增业务处理的结果,如果上一次请求时出现某些异常,比如数据库连接失败,用户再次提交的时候,我们应该放行用户的这次请求,当然有些异常就不需要放行了,比如提交的业务数据不对等

测试用例
通过下面的方法可以初步验证接口幂等性的健壮性:

  1. 同一个请求,多次提交到同一台节点,多次提交到不同的节点
  2. 同一个请求,同时到达同一个节点,同时到达到不同的节点
    3. 有逻辑先后顺序的消息、请求乱序的处理,比如创建订单的请求和支付订单的请求,不能保证第一个请求先于第二个请求到达服务器;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值