如何保证接口幂等性

接口幂等性是指一个接口被调用多次与调用一次的效果相同,常用于处理重复提交、重试和前端操作抖动等情况。例如,在用户多次点击提交订单或支付时,确保只生成一个订单或扣款一次。实现幂等性的关键在于通过唯一业务单号或Token机制。业务单号配合分布式锁,或使用Token验证并删除来确保幂等。Token需具备唯一性、一次性有效和限流特性。
摘要由CSDN通过智能技术生成

title: 接口幂等性
date: 2021-12-06 14:22:46
tags:


什么是幂等性?

  • 幂等性:f(f(x)) = f(x)
  • 幂等元素运行多次,还等于它原来的运算结果
  • 在系统中,一个接口运行多次,与运行一次的效果是一致的

什么情况下需要把接口设计为幂等性?

  • 重复提交、接口重试、前段操作抖动等

  • 业务场景:用户多次点击提交订单,后台应只生成一个订单

  • 业务场景:支付时,由于网络问题重发,应该只扣一次钱

  • 并不是所有的接口都要求幂等性,要根据业务而定

保证幂等性的策略有哪些?

  • 幂等性的核心思想:通过唯一的业务单号保证幂等,

    如果有唯一的业务单号,可以使用分布式锁,

    如果没有唯一的业务单号,可以通过Token保证幂等。

  • 常见的两种实现方案:

    1. 通过代码逻辑判断实现:只能针对一些满足判断的逻辑实现,具有一定局限性

    2. 使用token机制实现:通用型较强

      token机制实现步骤:

      1. 生成全局唯一的token,token放到redis或jvm内存,token会在页面跳转时获取.存放到pageScope中,支付请求提交先获取token
      2. 提交后后台校验token,执行提交逻辑,提交成功同时删除token,生成新的token更新redis ,这样当第一次提交后token更新了,页面再次提交携带的token是已删除的token后台验证会失败不让提交

      token特点: 要申请,一次有效性,可以限流

      注意: redis要用删除操作来判断token,删除成功代表token校验通过,如果用select+delete来校验token,存在并发问题,不建议使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值