首页 > 其他分享 >接口幂等性

接口幂等性

时间:2023-06-23 11:22:36浏览次数:30  
标签:返回 请求 重复 接口 提交 标识符

什么是幂等性

接口幂等性是指无论调用多少次接口,都只会产生一次结果的特性。在实际开发中,由于网络超时、服务器宕机等原因,会导致客户端重新发送请求,如果接口不具有幂等性,就可能会产生副作用,例如重复插入数据等。


预防重复提交与幂等性的区别

防止重提交接口的表现

  1. 第一次提交张三工资涨500,数据库update操作,接口返回“操作成功”
  2. 后续相同请求:拒收请求:张三工资涨500,接口直接返回“请勿重复提交”

幂等性接口的表现

  1. 第一次提交张三工资涨500,数据库update操作,接口返回“操作成功”
  2. 后续相同请求:接收请求:张三工资涨500,数据库不做任何写操作,接口返回“操作成功”

幂等问题产生场景

企业微信业务回调-因为网络波动没及时响应-重推机制

image

618的时候RibbitMQ堆积严重,导致内存爆了,响应不及时,触发了RibbitMQ重试机制,消费了很多重复消息

image

重复提交

重复提交是指在进行网络请求时,由于网络延迟、用户误操作或其他原因,导致同一个请求被发送多次的情况。这可能会带来一些问题,比如重复插入数据、重复购买等。

幂等性接口设计方案


通过业务数据过滤重复数据

企业微信产生重复回调的场景

企业微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。如果企业在调试中,发现成员无法收到被动回复的消息,可以检查是否消息处理超时。
当接收成功后,http头部返回200表示接收ok,其他错误码企业微信后台会一律当做失败并发起重试。

如何过滤重复数据

关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime排重。


申请预制令牌

  1. 为每个申请请求生成一个唯一的标识符,比如UUID。在客户端发起申请时,附加该标识符作为请求的一部分。
  2. 后端接口接收到申请请求后,先检查该标识符是否已经被使用过,如果已经被使用,说明该请求已经被处理过,直接返回之前的结果。
  3. 如果标识符没有被使用过,则进行令牌的预制过程,并将该标识符记录到数据库中或其他持久化存储中,以表示该请求已经被处理过。
  4. 返回申请结果给客户端。

这种方案中,通过唯一标识符来判断请求的唯一性,如果该标识符已经被使用过,则说明该请求已经被处理过,可以直接返回之前的结果,从而实现幂等性。
需要注意的是,为了保证幂等性,每次请求都需要携带一个新的唯一标识符,不能重复使用。此外,在实际应用中,还需要考虑并发操作对幂等性的影响,可以使用事务、锁或其他并发控制机制来保证幂等性的正确性。

标签:返回,请求,重复,接口,提交,标识符
From: https://www.cnblogs.com/lgxlsm/p/17495230.html

相关文章

  • 怎么保证接口安全
    1.首先应该考虑使用https协议,因为http协议是不安全的,一般来说购买服务器的时候厂商都会送免费的https的ssl证书,只需要在nginx配置就可以了。2.接口应该开启加密,分为对称加密和非对称加密3.对称加密:客户端和服务端使用同一个秘钥4.非对称加密:5.数据验签,避免黑客通过抓包......
  • 前端怎么使用node-input-validator给接口添加参数校验(以strapi 4.9为例)
    node-input-validator是什么?简称NIV(NodeInputValidator)用于node.js的验证库使用它可以扩展库以添加自定义规则。npmNIV文档使用方法我们以strapi4.9版本项目为例,来试用一下它对我们接口的校验规则下载依赖npminode-input-validator在项目中创建全局中间件......
  • TienChin 验证码响应结果分析&验证码生成接口分析
    验证码响应结果分析首先从前端开始进行分析,进入到登录页面,打开开发者工具(f12),找到network,f5刷新一下页面,然后,筛选一下,筛选内容为Fetch/XHR:你会发现列表中有两项内容,我们只需要查看captchaImage即可,从名字就可以看出是验证码图片的意思,然后我们查看这个响应结果是什么,响应......
  • 【雕爷学编程】Arduino动手做(118)---PS2接口模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • Ts中的接口
    接口的作用:在面向对象编程中,接口是一种规范的定义,它定义行为和动作的规范。在程序设计里面,接口起到一定的限制和规范作用。接口定义某一些类所遵守的规范,接口不关心这些类的内部状态数据,也不关心类里面方法的实现细节它只规定这批类中必须提供某些方法,提供的这些方法就可以满足......
  • Android-kotlin-接口与多态的表现
    上一篇博客介绍了Android-Kotlin-抽象类与多态的表现;而这一篇博客专门介绍下接口与多态的表现1.选择包名,然后右键:2.选择Class类型,会有class:3.选择File类型,不会自动有class:5.选择interface,是创建接口:6.目录结构:1.定义手机充电接口标准规范InterfacePhone:packagecn.kotlin.kot......
  • OpenAI.ChatCompletion.create 接口参数说明
    引言:对于接口,不了解参数含义,就不知道它能咋用?而了解参数的含义最好有例子,基于这个认知,整理了OpenAI几个主要API的接口参数说明。OpenAI的ChatCompletion和Completion都是自然语言生成模型的接口,但它们的用途和应用场景略有不同。ChatCompletionCompletion区别专为生成对话和聊天场......
  • openai.Completion.create 接口参数说明
    引言:对于接口,不了解参数含义,就不知道它能咋用?而了解参数的含义最好有例子,基于这个认知,整理了OpenAI几个主要API的接口参数说明。OpenAI的completions接口是一种自然语言处理API,可用于各种文本生成任务,例如:文本摘要:给定一篇文章,生成一个简短的摘要。语言翻译:将一种语言的文本翻译成......
  • OpenAI.Embedding 接口参数说明
    引言:对于接口,不了解参数含义,就不知道它能咋用?而了解参数的含义最好有例子,基于这个认知,整理了OpenAI几个主要API的接口参数说明。OpenAI的Embeddings接口主要用于将自然语言文本转换为向量表示,以便计算机可以更轻松地对文本进行处理和分析。这些向量表示可以捕捉到文本中的语义和语......
  • Delphi调用Asterisk系统AMI接口取得来电号码
       Asterisk 是一个开放源代码的软件VoIPPBX系统, AMI (AsteriskManagerInterface)。是Asterisk的管理接口。通过此接口,可以实现对Asterisk系统的监控和控制。通过调用AMI接口可以灵活的做很多事情,比如调用Asterisk系统AMI接口取得来电号码.在调用接口前,先查看下新......