如何保证接口幂等性

接口幂等性是指对同一操作发起的一次或多次请求结果是一致的,并且不会因为重复请求而产生副作用。

例如前端应用对后端发出请求,可能由于网络原因,前端并未接收到后端响应,前端进行重试,对后端同一接口发出多次请求

在这里插入图片描述
假如我们业务代码如下:

//查询1号员工数据
Employee employee = employeeService.selectById(1);
//更新工资
employee.setSalary(employee.getSalary() + incrSalary);
//执行更新语句
employeeService.update(employee)

那么发一次请求就会执行一次update,业务规则就被破坏了!

为了避免这种情况发生,以下是实现接口幂等性的一些方法:

使用唯一事务标识:为每次请求分配唯一的事务ID,服务端根据这个ID判断是否已经处理过该请求,确保操作只被执行一次。请求的时候在请求头增加唯一的请求流水号,后端在做操作之前首先查redis是否有操作成功的数据,有则不做update操作,没有则执行逻辑代码
在这里插入图片描述

状态检查:在执行操作前检查系统状态,如果发现操作已经执行过,则不再重复执行,第一次做修改的时候加上修改时间修改为当前时间,下次请求查询的时候加上查询条件只查询修改时间大于三个月时间的员工。

乐观锁或悲观锁:在数据库操作中使用锁机制,防止并发操作导致的数据不一致问题。
》》》 悲观锁
在这里插入图片描述
》》》乐观锁
在这里插入图片描述

结果验证:在客户端进行结果验证,如果发现结果与预期不符,可以重新发送请求。

限制重试次数:对于可能因为网络等原因需要重试的操作,限制重试的次数和时间间隔,避免无限制的重试导致的问题。

需要注意的是,幂等性并不是所有接口都需要具备的特性,它通常适用于那些可能会因为网络问题或其他原因而被重复调用的接口,如支付、订单提交等关键操作。对于那些不需要保证幂等性的接口,比如更新用户信息等,通常不需要特别设计幂等性处理机制。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值