基于AOP实现接口防重复设计

基于AOP实现接口防重复设计

1. 使用背景

​ 由于客户端抖动、快速操作、网络通信或者服务器响应慢,造成服务器重复处理。防止重复提交,除了从前端控制,后台也需要控制。因为前端的限制不能解决彻底。接口实现,通常要求幂等性,保证多次重复提交只有一次有效。而对于更新操作,达到幂等性很难。

幂等性:

​ 幂等性原本是数学上的概念,用在接口上就可以理解为:同一个接口,多次发出同一个请求,必须保证操作只执行一次。 调用接口发生异常并且重复尝试时,总是会造成系统所无法承受的损失,所以必须阻止这种现象的发生。

​ 比如下面这些情况,如果没有实现接口幂等性会有很严重的后果: 支付接口,重复支付会导致多次扣钱 ;订单接口,同一个订单可能会多次创建。

image-20230711130102050

2. 如何保证接口幂等性

解决方法有两类:

  1. 由客户端对接口调用频率进行控制。例如前端可以在提交按钮上绑定操作,在提交后的一段时间内不再允许点击。
  2. 由服务端对接口请求进行校验。可以是对接口的token校验,或者通过数据库的主键唯一性实现

在实际应用中都是二者结合起来,前后端共同实现防重复提交。

3. 实现思路

​ 防重复是很多接口都需要用到的,如果在每个接口上都直接插入一段防重复验证代码势必增加代码的耦合性,因此考虑用自定义注解+AOP来实现无侵入式的功能增强。

image-20230711132055534

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值