首页 > 其他分享 >API的幂等性设计

API的幂等性设计

时间:2023-08-22 15:34:57浏览次数:34  
标签:请求 Request 接口 API 设计 防重表 Id

一、背景

       平台部分API需要保证接口的幂等性,防止业务频繁刷API导致资源浪费,或者不小心重发消息影响业务。

二、解释

       接口的幂等,指一个操作重复执行N次得到的结果与执行一次是相等的。比如在HTTP请求中,Get请求,得到的结果是相同的。但POST和PATCH的接口,每次请求得到的结果是不同的。这就是不幂等。

      但是实际业务对应部分接口,有幂等要求。比如银行的转账,由于各种原因,可能同一个请求会被多次发送,但是结果只会成功转账一次,其他转账不会生效。  

三、解决办法

       悲观锁,乐观锁,防重表,Token。

       3.1、悲观锁

                流程:

                         1、收到请求时,开启事务,对查询事件(如订单)加锁;

                         2、判断事件是否符合执行条件;

                         3、全部执行完毕后,提交或者回滚。

                缺点:执行时间长,悲观锁容易锁住整表,导致服务不可用问题。

        3.2、乐观锁

                 实现方式:通过版本号,在更新事件的时候锁表(大部分时间不锁表),比如:              

                 

                即使多个请求过来,因为进来的version是相同的,但是DB中的版本号已经被更新,修改条件不成立,也就是说不会被多次更新。

                缺点:使用主键或者唯一索引来更新,使用行锁而不是表锁。

         3.3、防重表

                 流程:

                        1、建立一张防重表,使用时间ID(比如订单号)作为唯一索引

                        2、在发起请求时,根据事件ID在防重表中新增一条记录

                 因为是唯一索引,重发的请求添加记录是不会成功的,第一个进入的事件可以被执行(事件完成后,可以删除防重表的记录)

                 缺点:多维护一张数据表,增加业务逻辑复杂度。

        3.4、Token

                 流程:

                        1、业务方在调用API的时候,在Header里传递一个X-Request-Id的参数(随机id,类似token)

                         2、平台接收到这次请求,判断在缓存里是否存在对应的X-Request-Id的对应记录

                         3、如果记录存在,标明这条消息已经被发送过,接口返回HTTP 412 Code

                         4、如果记录不存在,将该记录刷到缓存里,发送消息

                         5、Reaponse的Header也返回X-Request-Id

                   缺点:流程比防重表更加复杂。

四、幂等性的优缺点

        优点:

                1、实现接口的幂等性

                2、不需要关心随机ID的业务逻辑

        缺点:

                 1、增加了实现的复杂度

                 2、增加运维成本

五、总结

            基于我们当前的业务现状,使用 X-Request-Id + 缓存来支持消息 API 的幂等操作。虽然方案依赖 Redis, 但是平台本身就有使用缓存, 运维成本这个缺点可忽略不计, 逻辑实现相对简单。 综上可以设施

标签:请求,Request,接口,API,设计,防重表,Id
From: https://www.cnblogs.com/xiaobaicai12138/p/17648434.html

相关文章

  • QuarkXPress 2023(版面编辑设计) 19.2(55820)中文版
    QuarkXPress2023是Quark公司推出的一款专业的排版和设计软件。它是QuarkXPress系列的最新版本,引入了许多令人兴奋的功能和改进。点击获取QuarkXPress2023 下面将详细介绍QuarkXPress2023的主要特点和优势。多通道混合:QuarkXPress2023具备了独特的多通道混合功能。用户......
  • 【HarmonyOS】实现将pcm音频文件进行编码并写入文件(API6 Java)
     【关键字】音频编码、管道模式、createEncoder【写在前面】在使用API6开发HarmonyOS应用时,如何将pcm源文件进行编码并写入文件,最后生成aac文件,本文直接附上主要代码开发步骤供大家参考。【主要功能代码】importohos.media.codec.Codec;importohos.media.common.BufferInfo;im......
  • 掌握CSS布局技巧,打造响应式网页设计
    1.引言在当今互联网时代,响应式网页设计已经成为了一种必备的技能。随着移动设备的普及和多样化,用户对于网页的访问方式也越来越多样化。因此,我们需要掌握CSS布局技巧,以便能够打造出适应不同设备和屏幕尺寸的响应式网页设计。2.CSS布局技巧2.1媒体查询媒体查询是CSS3中的一个......
  • 直播带货源码,Android studio设计app登录界面
    直播带货源码,Androidstudio设计app登录界面TextView:用于显示标题和“用户名"和"密码"的提示;标题设置   <TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="登录页面"    a......
  • 【HarmonyOS】实现将pcm音频文件进行编码并写入文件(API6 Java)
    【关键字】音频编码、管道模式、createEncoder 【写在前面】在使用API6开发HarmonyOS应用时,如何将pcm源文件进行编码并写入文件,最后生成aac文件,本文直接附上主要代码开发步骤供大家参考。 【主要功能代码】importohos.media.codec.Codec;importohos.media.common.Buf......
  • 基于JAVA的二手手机回收系统-计算机毕业设计源码+LW文档
    摘要随着信息技术的发展,基于web模式的购物系统逐渐普及,网上购物是一种新型的商务模式,其工作流程和经营模式受到了欢迎。电子商务可以适应现代化快节奏的生活方式,满足各类人群足不出户的在线购物,利用商城使得买卖双方完成线上交易,提高了购买效率。但随着网购二手手机数量的增多,存......
  • 在线外语学习平台-计算机毕业设计源码+LW文档
    提要信息化的迅速发展,对人们的衣食住行产生了很大影响。越来越多的人习惯并依赖于通过信息技术和智能化的形式来处理日常各类事物。为了满足学生用户日常学习的需要,以及适应现代化课程教学管理的需求,决定开发在线外语学习平台。帮助学生在线学习,提高效率。在线外语学习平台的开发......
  • 基于JAVA+MySQL技术智能服装推荐系统的设计与实现-计算机毕业设计源码+LW文档
    1.开题依据1.1研究的目的意义在过去到现在,消费方式从物物交换到以通俗认知中的“货币”购买物品,再到如今的网上支付交易,实物物流运输到达我们的手上。购物方式从实体店的消费模式,转到了网上店铺的交易。相信很多人在现实生活中都有过实体店购物的消费的体验,在实体店消费需要安排......
  • 趣解设计原则之单一职责(论一个小老板的发家史)
    一、前言今天我们来聊一聊设计原则中的单一职责,还是按照惯例,先介绍一下含义,然后呢,我们再来讲一个小故事。**单一职责(SRP:SingleReposibilityPrinciple)**的定义:一个类或者模块只负责完成一个职责。二、小故事今天登场的主角,是一个叫阿明的小老板,他从小就经商,很有头脑。他经......
  • JVS低代码中表单引擎与逻辑引擎是如何联合调用外部API的?
    在企业项目中,常常出现需要给外部系统提供一个api,让外部系统触发调用,本系统直接数据入库,那么我们来看看jvs的表单引擎与逻辑引擎联合实现这个功能,先看实现效果:配置步骤:一、配置列表页如下图所示:①选中需要增加列表页的目录,在目录操作的主界面上②点击创建列表页设计,系统进入列表页......