如何保证接口幂等性

 

总所周知,GET请求是天然幂等的,多次GET操作,结果是一致的。

POST请求在生产型项目中也要保持幂等,比如支付时的POST请求,如果不幂等,可能会出现重新支付的情况;注册用户时的POST请求,如果不是幂等的,可能会产生重复用户。

 

幂等性:即多次操作,返回的结果是一致的,保持接口幂等性,才能保证数据安全,不重复,不混乱;

 

做到接口幂等,不仅仅是为了防止单个用户重复点击,在高并发的时候它的作用显得更加重要。

 

如何做到接口幂等?

0.基本要求:业务逻辑层数据状态的校验。比如支付前校验订单状态,注册用户前校验用户是否已存在,这个是和具体业务逻辑相关的校验。

1.高并发情况下的幂等性:

高并发情况下的幂等性,一般要使用锁,有以下三种思路:

1.1数据库悲观锁:对业务逻辑数据状态的校验,在查询的时候使用select ......for update,,注意结合@Transactional注解使用才能生效(效率低,不推荐

1.2JUC包中的锁:使用ReentrantLock锁,根据订单号,用户名等等进行加锁,避免重复请求(只适合单机,不推荐

1.3分布式锁:现在大多数项目都是分布式项目,这种情况下必须使用分布式锁,redis或者zookeeper这种分布式锁都能很好的实现幂等性。(推荐

 

做到接口幂等性,前端也可以做一些工作,比如点击一次之后,按钮置灰,在一定程度上可以减少重复点击,但是后端的接口幂等性是万万少不了的。

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值