CN111865970A - 用于实现接口幂等性的方法和装置 - Google Patents
用于实现接口幂等性的方法和装置 Download PDFInfo
- Publication number
- CN111865970A CN111865970A CN202010690950.7A CN202010690950A CN111865970A CN 111865970 A CN111865970 A CN 111865970A CN 202010690950 A CN202010690950 A CN 202010690950A CN 111865970 A CN111865970 A CN 111865970A
- Authority
- CN
- China
- Prior art keywords
- token
- http request
- key value
- value table
- data key
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
- H04L63/0807—Network architectures or network communication protocols for network security for authentication of entities using tickets, e.g. Kerberos
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/552—Powers or roots, e.g. Pythagorean sums
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
- H04L9/3239—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Signal Processing (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了用于实现接口幂等性的方法、装置、电子设备和存储介质,涉及云计算技术领域。具体实现方案为:接收包括客户端的令牌的http请求;如果http请求需要保证幂等性,则根据令牌获取预先存储在数据库中的令牌锁;如果令牌锁获取成功,则删除数据库中令牌对应的数据键值表中的值,并对http请求进行处理,得到响应结果;如果响应结果为成功,则将响应结果返回客户端,并将响应结果和http请求的输入参数的MD5加密结果作为数据键值表的值写入数据库,并设置数据键值表和令牌锁的过期时间。该实施方式能够灵活、方便地用于实现接口幂等性,网络延时小,资源开销小。
Description
技术领域
本申请涉及计算机技术领域,具体涉及云计算技术领域。
背景技术
幂等性原本是数学上的概念,即使公式:f(x)=f(f(x))能够成立的数学性质。用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。例如用户支付订单,因为页面卡顿或者用户重复点击,浏览器发起了多个支付订单的请求,后端系统接收到所有请求后,务必保证只有1个请求被正常处理,并丢弃其他请求。这样才能保证用户账户仅被扣款一次,而非多次。
随着互联网的快速发展,越来越多的网站会对外开放自己的应用程序接口(API),如何保证API的幂等性,是一个非常重要的课题。
发明内容
本公开提供了一种用于实现接口幂等性的方法、装置、电子设备以及存储介质。
根据本公开的第一方面,提供了一种用于实现接口幂等性的方法,包括:响接收包括客户端的令牌的http请求;如果http请求需要保证幂等性,则根据令牌获取预先存储在数据库中的令牌锁;如果令牌锁获取成功,则删除数据库中令牌对应的数据键值表中的值,并对http请求进行处理,得到响应结果;如果响应结果为成功,则将响应结果返回客户端,并将响应结果和http请求的输入参数的MD5加密结果作为数据键值表的值写入数据库,并设置数据键值表和令牌锁的过期时间。
根据本公开的第二方面,提供了一种用于实现接口幂等性的装置,包括:接收单元,被配置成接收包括客户端的令牌的http请求;令牌获取单元,被配置成如果http请求需要保证幂等性,则根据令牌获取预先存储在数据库中的令牌锁;处理单元,被配置成如果令牌锁获取成功,则删除数据库中令牌对应的数据键值表中的值,并对http请求进行处理,得到响应结果;写入单元,被配置成如果响应结果为成功,则将响应结果返回客户端,并将响应结果和http请求的输入参数的MD5加密结果作为数据键值表的值写入数据库,并设置数据键值表和令牌锁的过期时间。
根据本公开的第三方面,提供了一种电子设备,其特征在于,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行第一方面中任一项的方法。
根据本公开的第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,计算机指令用于使计算机执行第一方面中任一项的方法。
本申请提出的方案对比于现有技术,存在如下优点:支持灵活方便地配置接口的幂等性。是否保证幂等是接口的属性。网络延时小,资源开销小。不需要客户端单独服务端获取token。幂等情况下,每次返回的响应内容一致。支持变长幂等保障时间的配置。支持对不同接口设置不同的幂等有效期,过期后,服务端视为新请求。本申请基于token实现幂等性,使用注解来标识接口的幂等性,幂等逻辑实现在Spring的过滤器和拦截器框架,使用redis存储token和响应内容。这是一套配置简单且和业务逻辑完全耦合的幂等实现方案。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1是本公开的一个实施例可以应用于其中的示例性系统架构图;
图2是根据本公开的用于实现接口幂等性的方法的一个实施例的流程图;
图3是根据本公开的用于实现接口幂等性的方法的一个应用场景的示意图;
图4是根据本公开的用于实现接口幂等性的方法的又一个实施例的流程图;
图5是根据本公开的用于实现接口幂等性的装置的一个实施例的结构示意图;
图6是用来实现本申请实施例的用于实现接口幂等性的方法的电子设备的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1示出了可以应用本公开的用于实现接口幂等性的方法或用于实现接口幂等性的装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括客户端101、后端系统102、数据库103。客户端101、后端系统102、数据库103之间通过有线网络或无线网络连接。
用户可以使用客户端101通过网络与后端系统102交互,以接收或发送消息等。客户端101上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
客户端101可以是硬件,也可以是软件。当客户端101为硬件时,可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。当客户端101为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。
后端系统102可以是提供各种服务的服务器,例如对客户端101上显示的网页提供支持的后台网页服务器。后台网页服务器可以对接收到的网页页面请求等数据进行分析等处理,并将处理结果(例如网页页面数据)反馈给终端设备。
需要说明的是,服务器可以是硬件,也可以是软件。当服务器为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务的多个软件或软件模块),也可以实现成单个软件或软件模块。在此不做具体限定。
数据库103用于存储客户端发送的令牌和响应结果。可采用redis等基于内存的存储系统,存储性能好,访问速度快。
需要说明的是,本公开的实施例所提供的用于实现接口幂等性的方法一般由后端系统102执行,相应地,用于实现接口幂等性的装置一般设置于后端系统102中。
应该理解,图1中的客户端、后端系统和数据库的数目仅仅是示意性的。根据实现需要,可以具有任意数目的客户端、后端系统和数据库。
继续参考图2,示出了根据本公开的用于实现接口幂等性的方法的一个实施例的流程200。该用于实现接口幂等性的方法,包括以下步骤:
步骤201,接收包括客户端的令牌的http请求。
在本实施例中,用于实现接口幂等性的方法运行于其上的电子设备(例如图1所示的后端系统)接收到来自客户端的http请求。该http请求中包括令牌(token)。幂等环境下,token用来标识不同的请求,token由客户端随机生成的字符串,调用接口时通过请求头传递给后端系统。接口的幂等性是业务决定的,并非所有请求都需要保证幂等。GET请求不会改变资源故不需要保障幂等,重点是对PUT、POST、DELETE请求。本申请可使用Java自定义注解@Idempotent,只有被该注解标注的非GET接口,才保证幂等性。
步骤202,如果http请求需要保证幂等性,则根据令牌获取预先存储在数据库中的令牌锁。
在本实施例中,如果需要保证幂等性,则需要数据库辅助实现。如果后端系统收到该令牌的http请求,在数据库中未查找到该令牌对应的表,则会在数据库中建立该令牌对应的2张表(用于存储响应内容的数据键值表(如表1所示),另一张用于控制并发的令牌锁的键值表(如表2所示))。如果查的到2张表,则无需新建。收到包括该令牌的http请求时,需要判断该令牌的令牌锁是否失效或者被占用了。令牌锁有过期时间,数据库会定时清理过期的令牌相关数据。令牌锁还可能会被其它并发的请求占用,如果被占用则无法成功获取。
表1
键 | 值 |
token | 令牌锁 |
表2
后端系统会根据http请求的输入参数(例如,请求体、请求头、路径等)进行MD5(Message Digest Algorithm,信息摘要算法)加密得到MD5加密结果,用于确保信息传输完整一致。2张表中的一张为数据键值表,其键为token,值可包括:http请求的输入参数的MD5加密结果、状态码、响应体数据的格式、响应体。状态码用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由RFC 2616规范定义的,并得到RFC 2518、RFC 2817、RFC2295、RFC 2774与RFC 4918等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一。表示“成功”的状态码是2开头的,例如,200ok。响应体数据的格式可包括json、xml等。响应体指的是响应的具体内容。2张表中的另一张为令牌锁的键值对,其键为token,值为令牌锁。针对每一个token,数据库需要保存两份数据,数据的键值对和锁的键值对。数据的键值对存储响应内容;锁用来控制并发场景下,只有一个请求执行后端逻辑,其他请求等待执行结果。
步骤203,如果令牌锁获取成功,则删除数据库中令牌对应的数据键值表中的值,并对http请求进行处理,得到响应结果。
在本实施例中,如果令牌锁获取成功,因为可能存在历史脏数据的缘故,首先删除数据库中该token对应的数据键值表中的值。然后再对http请求进行处理,得到响应结果。响应结果可包括状态码、响应体数据的格式、响应体。这些都是http协议规定的内容,因此不再赘述。
步骤204,如果响应结果为成功,则将响应结果返回客户端,并将响应结果和http请求的输入参数的MD5加密结果作为数据键值表的值写入数据库,并设置数据键值表和令牌锁的过期时间。
在本实施例中,如果响应结果为成功,即状态码以2开头,则将响应结果返回客户端。并在数据库中该token对应的数据键值表中记录响应结果和http请求的输入参数的MD5加密结果。并设置数据键值表和令牌锁的过期时间,例如一天。数据库会在到达过期时间时清除数据键值表和令牌锁。
本公开的上述实施例提供的方法,支持灵活方便地配置接口的幂等性。网络延时小,资源开销小。不需要客户端单独服务端获取token。保证幂等情况下,每次返回的响应内容一致。支持变长幂等保障时间的配置。支持对不同接口设置不同的幂等有效期,过期后,服务端视为新请求。
继续参见图3,图3是根据本实施例的用于实现接口幂等性的方法的应用场景的一个示意图。在图3的应用场景中,用户通过客户端访问后端系统,客户端随机生成令牌,再向后端系统发起包括令牌的http请求,其中,请求方式为put。后端系统收到http请求后,根据请求方式判断需要保证幂等性。然后就会去数据库中获取令牌锁。如果令牌锁获取成功,则说明该http请求未处理过,进行处理,得到响应结果A。将响应结果A返回给客户端。后端系统将响应结果A和http请求的输入参数的MD5加密结果作为数据键值表的值写入数据库。当后端系统再次收到包括该令牌的http请求时,根据请求方式判断需要保证幂等性。然后就会去数据库中获取令牌锁,由于令牌锁上一次已经被占用了,因此无法获得令牌锁。此次后端系统不需要再次处理该http请求,而是直接从数据库中读取上一次存入的响应结果A。又一次将响应结果A返回给客户端。
进一步参考图4,其示出了用于实现接口幂等性的方法的又一个实施例的流程400。该用于实现接口幂等性的方法的流程400,包括以下步骤:
步骤401,接收包括客户端的令牌的http请求。
步骤401在步骤201的基础上,还包括:使用Spring的过滤器和拦截器实现幂等,将所有逻辑统统写入Spring的过滤器和拦截器中,并借助线程变量解决Spring中http请求体只能读取一次的问题。Spring是一个开源的Java框架,内置了过滤器、拦截器和切面,均可以实现对请求的拦截。请求先被过滤器捕获,随即是拦截器,最后才进入请求处理器。提高了使得性和过滤效率。
步骤402,如果http请求需要保证幂等性,则根据令牌获取预先存储在数据库中的令牌锁。
步骤403,如果令牌锁获取成功,则删除数据库中令牌对应的数据键值表中的值,并对http请求进行处理,得到响应结果。
步骤404,如果响应结果为成功,则将响应结果返回客户端,并将响应结果和http请求的输入参数的MD5加密结果作为数据键值表的值写入数据库,并设置数据键值表和令牌锁的过期时间。
步骤402-404与步骤202-204基本相同,因此不再赘述。
步骤405,如果http请求不需要保证幂等性,则对http请求进行处理,得到响应结果,并将响应结果返回给客户端。
在本实施例中,如果收到的http请求的请求方式是get等不会改变资源的方式,则不需要保证幂等性。直接进行处理,得到的响应结果直接返回给客户端,不再保存到数据库中。从而节省数据库资源,提高处理效率。
步骤406,如果令牌锁获取失败且数据库中存在令牌对应的数据键值表,则校验http请求输入参数的MD5加密结果和数据键值表中的MD5加密结果的一致性。
在本实施例中,令牌锁获取失败有两种情况,一种情况是令牌锁已经被之前相同令牌的http请求占用,此时数据库中应该已经在数据键值表中存储了之前处理该http请求得到的响应结果。另一种情况是多个http请求并发,还没有处理完成,因此数据库中还没有该令牌对应的数据键值表。
如果存在令牌对应的数据键值表,有两种情况,一种是虽然token相同,但http请求的输入参数不一定完全相同。另一种情况是token相同,http请求的输入参数也完全相同。可通过MD5加密的方式校验http请求输入参数是否一致。将此次收到的http请求输入参数的MD5加密结果和数据键值表中的MD5加密结果进行对比。
步骤407,如果http请求输入参数的MD5加密结果和数据键值表中的MD5加密结果一致,则将数据键值表中的响应结果返回给客户端,并更新数据键值表和令牌锁的过期时间。
在本实施例中,如果此次收到的http请求输入参数的MD5加密结果和数据键值表中的MD5加密结果一致,则说明此次收到的http请求和上一次收到的http请求完全一致,无需重复处理,将存储在数据库中的上一次处理的结果返回给客户端即可,避免重复处理,节约资源。由于接收到了新的http请求,虽然内容没变,但需要更新数据键值表和令牌锁的过期时间,即进行了延期处理。假设上一次请求是8点,3小时后过期,即11点过期。此次收到的请求是10点,过期时间更新为13点。
步骤408,如果http请求输入参数的MD5加密结果和数据键值表中的MD5加密结果不一致,则向客户端返回表征相同令牌却包含了不同的请求参数的第一异常消息。
在本实施例中,如果此次收到的http请求输入参数的MD5加密结果和数据键值表中的MD5加密结果不一致,则说明出现了异常。需要向客户端反馈异常消息,以便客户端解决问题。这里的第一异常消息和第二异常消息是为了区分异常引起的原因,不代表先后顺序。第一异常消息可以是具体的内容,也可以是约定的状态码。
步骤409,如果令牌锁获取失败且数据库中不存在令牌对应的数据键值表,则等待预定时间后重试获取令牌锁。
在本实施例中,如果不存在令牌对应的数据键值表,则说明有其它http请求在并发处理。可稍微等待一下,等其它http请求处理完毕再重新获取令牌锁,继续执行步骤404、406-49。
步骤410,如果重试次数达到预定值仍然没有获取到令牌锁,则向客户端返回表征并发情况下重试失败的第二异常消息。
在本实施例中,可多次重试获取令牌锁,但是重试次数不能超过预定值(最大重试次数)。如果超过最大重试次数,则向客户端返回表征并发情况下重试失败的第二异常消息。第二异常消息可以是具体的内容,也可以是约定的状态码。等待后重试可在并发冲突时排队等候,避免挤占资源。设置最大重试次数可避免死锁。
进一步参考图5,作为对上述各图所示方法的实现,本公开提供了一种用于实现接口幂等性的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图5所示,本实施例的用于实现接口幂等性的装置500包括:接收单元501、令牌获取单元502、处理单元503、写入单元504。其中,接收单元501,被配置成接收包括客户端的令牌的http请求;令牌获取单元502,被配置成如果http请求需要保证幂等性,则根据令牌获取预先存储在数据库中的令牌锁;处理单元503,被配置成如果令牌锁获取成功,则删除数据库中令牌对应的数据键值表中的值,并对http请求进行处理,得到响应结果;写入单元504,被配置成如果响应结果为成功,则将响应结果返回客户端,并将响应结果和http请求的输入参数的MD5加密结果作为数据键值表的值写入数据库,并设置数据键值表和令牌锁的过期时间。
在本实施例中,用于实现接口幂等性的装置500的接收单元501、令牌获取单元502、处理单元503、写入单元504的具体处理可以参考图2对应实施例中的步骤201、步骤202、步骤203、步骤204。
在本实施例的一些可选的实现方式中,处理单元503进一步被配置成:如果http请求不需要保证幂等性,则对http请求进行处理,得到响应结果,并将响应结果返回给客户端。
在本实施例的一些可选的实现方式中,装置500还包括校验单元(附图中未示出),被配置成:如果令牌锁获取失败且数据库中存在令牌对应的数据键值表,则校验http请求输入参数的MD5加密结果和数据键值表中的MD5加密结果的一致性;如果http请求输入参数的MD5加密结果和数据键值表中的MD5加密结果一致,则将数据键值表中的响应结果返回给客户端,并更新数据键值表和令牌锁的过期时间。
在本实施例的一些可选的实现方式中,校验单元进一步被配置成:如果http请求输入参数的MD5加密结果和数据键值表中的MD5加密结果不一致,则向客户端返回表征相同令牌却包含了不同的请求参数的第一异常消息。
在本实施例的一些可选的实现方式中,装置500还包括重试单元(附图中未示出),被配置成:如果令牌锁获取失败且数据库中不存在令牌对应的数据键值表,则等待预定时间后重试获取令牌锁;如果重试次数达到预定值仍然没有获取到令牌锁,则向客户端返回表征并发情况下重试失败的第二异常消息。
在本实施例的一些可选的实现方式中,装置500还包括配置单元(附图中未示出),被配置成:使用Spring的过滤器和拦截器实现幂等,将用于标识接口的幂等性的注解的逻辑写入过滤器和拦截器中。
根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。
如图6所示,是根据本申请实施例的用于实现接口幂等性的方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。
如图6所示,该电子设备包括:一个或多个处理器601、存储器602,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图6中以一个处理器601为例。
存储器602即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请所提供的用于实现接口幂等性的方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的用于实现接口幂等性的方法。
存储器602作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的用于实现接口幂等性的方法对应的程序指令/模块(例如,附图5所示的接收单元501、令牌获取单元502、处理单元503、写入单元504)。处理器601通过运行存储在存储器602中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的用于实现接口幂等性的方法。
存储器602可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据用于实现接口幂等性的电子设备的使用所创建的数据等。此外,存储器602可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器602可选包括相对于处理器601远程设置的存储器,这些远程存储器可以通过网络连接至用于实现接口幂等性的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
用于实现接口幂等性的方法的电子设备还可以包括:输入装置603和输出装置604。处理器601、存储器602、输入装置603和输出装置604可以通过总线或者其他方式连接,图6中以通过总线连接为例。
输入装置603可接收输入的数字或字符信息,以及产生与用于实现接口幂等性的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置604可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(LCD)、发光二极管(LED)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用ASIC(专用集成电路)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
根据本申请实施例的技术方案,基于token实现幂等性,使用注解来标识接口的幂等性,幂等逻辑实现在Spring的过滤器和拦截器框架,使用redis存储token和响应内容。这是一套配置简单且和业务逻辑完全耦合的幂等实现方案。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。
Claims (14)
1.一种用于实现接口幂等性的方法,包括:
接收包括客户端的令牌的http请求;
如果所述http请求需要保证幂等性,则根据所述令牌获取预先存储在数据库中的令牌锁;
如果令牌锁获取成功,则删除所述数据库中所述令牌对应的数据键值表中的值,并对所述http请求进行处理,得到响应结果;
如果所述响应结果为成功,则将所述响应结果返回所述客户端,并将所述响应结果和所述http请求的输入参数的信息摘要算法MD5加密结果作为所述数据键值表的值写入所述数据库,并设置所述数据键值表和所述令牌锁的过期时间。
2.根据权利要求1所述的方法,其中,所述方法还包括:
如果所述http请求不需要保证幂等性,则对所述http请求进行处理,得到响应结果,并将所述响应结果返回给客户端。
3.根据权利要求1所述的方法,其中,所述方法还包括:
如果令牌锁获取失败且所述数据库中存在所述令牌对应的数据键值表,则校验所述http请求输入参数的MD5加密结果和所述数据键值表中的MD5加密结果的一致性;
如果所述http请求输入参数的MD5加密结果和所述数据键值表中的MD5加密结果一致,则将所述数据键值表中的响应结果返回给客户端,并更新所述数据键值表和所述令牌锁的过期时间。
4.根据权利要求3所述的方法,其中,所述方法还包括:
如果所述http请求输入参数的MD5加密结果和所述数据键值表中的MD5加密结果不一致,则向所述客户端返回表征相同令牌却包含了不同的请求参数的第一异常消息。
5.根据权利要求3所述的方法,其中,所述方法还包括:
如果令牌锁获取失败且所述数据库中不存在所述令牌对应的数据键值表,则等待预定时间后重试获取所述令牌锁;
如果重试次数达到预定值仍然没有获取到所述令牌锁,则向所述客户端返回表征并发情况下重试失败的第二异常消息。
6.根据权利要求1-5中任一项所述的方法,其中,所述方法还包括:
使用Spring的过滤器和拦截器实现幂等,将用于标识接口的幂等性的注解的逻辑写入所述过滤器和所述拦截器中。
7.一种用于实现接口幂等性的装置,包括:
接收单元,被配置成接收包括客户端的令牌的http请求;
令牌获取单元,被配置成如果所述http请求需要保证幂等性,则根据所述令牌获取预先存储在数据库中的令牌锁;
处理单元,被配置成如果令牌锁获取成功,则删除所述数据库中所述令牌对应的数据键值表中的值,并对所述http请求进行处理,得到响应结果;
写入单元,被配置成如果所述响应结果为成功,则将所述响应结果返回所述客户端,并将所述响应结果和所述http请求的输入参数的MD5加密结果作为所述数据键值表的值写入所述数据库,并设置所述数据键值表和所述令牌锁的过期时间。
8.根据权利要求7所述的装置,其中,所述处理单元进一步被配置成:
如果所述http请求不需要保证幂等性,则对所述http请求进行处理,得到响应结果,并将所述响应结果返回给客户端。
9.根据权利要求7所述的装置,其中,所述装置还包括校验单元,被配置成:
如果令牌锁获取失败且所述数据库中存在所述令牌对应的数据键值表,则校验所述http请求输入参数的MD5加密结果和所述数据键值表中的MD5加密结果的一致性;
如果所述http请求输入参数的MD5加密结果和所述数据键值表中的MD5加密结果一致,则将所述数据键值表中的响应结果返回给客户端,并更新所述数据键值表和所述令牌锁的过期时间。
10.根据权利要求9所述的装置,其中,所述校验单元进一步被配置成:
如果所述http请求输入参数的MD5加密结果和所述数据键值表中的MD5加密结果不一致,则向所述客户端返回表征相同令牌却包含了不同的请求参数的第一异常消息。
11.根据权利要求9所述的装置,其中,所述装置还包括重试单元,被配置成:
如果令牌锁获取失败且所述数据库中不存在所述令牌对应的数据键值表,则等待预定时间后重试获取所述令牌锁;
如果重试次数达到预定值仍然没有获取到所述令牌锁,则向所述客户端返回表征并发情况下重试失败的第二异常消息。
12.根据权利要求7-11中任一项所述的装置,其中,所述装置还包括配置单元,被配置成:
使用Spring的过滤器和拦截器实现幂等,将用于标识接口的幂等性的注解的逻辑写入所述过滤器和所述拦截器中。
13.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-6中任一项所述的方法。
14.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010690950.7A CN111865970B (zh) | 2020-07-17 | 2020-07-17 | 用于实现接口幂等性的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010690950.7A CN111865970B (zh) | 2020-07-17 | 2020-07-17 | 用于实现接口幂等性的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111865970A true CN111865970A (zh) | 2020-10-30 |
CN111865970B CN111865970B (zh) | 2022-09-16 |
Family
ID=73000507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010690950.7A Active CN111865970B (zh) | 2020-07-17 | 2020-07-17 | 用于实现接口幂等性的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111865970B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112383402A (zh) * | 2020-11-13 | 2021-02-19 | 中国联合网络通信集团有限公司 | 双重幂等验证方法及服务器 |
CN112559498A (zh) * | 2020-12-25 | 2021-03-26 | 北京百度网讯科技有限公司 | 时序时空数据库系统的分布式架构的构建方法、装置 |
CN112835916A (zh) * | 2021-01-15 | 2021-05-25 | 卓望数码技术(深圳)有限公司 | 基于api接口的业务处理方法、设备及计算机可读存储介质 |
CN113064584A (zh) * | 2021-04-22 | 2021-07-02 | 中国平安财产保险股份有限公司 | 幂等的实现方法、装置、设备及介质 |
CN113177085A (zh) * | 2021-05-25 | 2021-07-27 | 上海安畅网络科技股份有限公司 | 一种接口幂等调用的方法、装置、设备及存储介质 |
CN113553214A (zh) * | 2021-07-30 | 2021-10-26 | 国网电子商务有限公司 | 一种幂等性校验方法及装置 |
CN113722122A (zh) * | 2021-08-13 | 2021-11-30 | 北京东方国信科技股份有限公司 | 一种rpc幂等性保证方法及系统 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5946686A (en) * | 1997-07-11 | 1999-08-31 | International Business Machines Corporation | Parallel file system and method with quota allocation |
US6032216A (en) * | 1997-07-11 | 2000-02-29 | International Business Machines Corporation | Parallel file system with method using tokens for locking modes |
US6044404A (en) * | 1997-06-20 | 2000-03-28 | International Business Machines Corporation | Apparatus, method and computer program for providing arbitrary locking modes for controlling concurrent access to server resources |
US6052731A (en) * | 1997-07-08 | 2000-04-18 | International Business Macines Corp. | Apparatus, method and computer program for providing arbitrary locking requesters for controlling concurrent access to server resources |
US20060069775A1 (en) * | 2004-06-17 | 2006-03-30 | Artobello Michael R | Apparatus, system, and method for automatically freeing a server resource locked awaiting a failed acknowledgement from a client |
US20140164776A1 (en) * | 2012-02-20 | 2014-06-12 | Lock Box Pty Ltd | Cryptographic method and system |
CN108090058A (zh) * | 2016-11-21 | 2018-05-29 | 广东亿迅科技有限公司 | 一种高并发活动交互方法 |
CN108650093A (zh) * | 2018-03-30 | 2018-10-12 | 深圳市富途网络科技有限公司 | 一种基于幂等性的接口实现方法 |
CN109379192A (zh) * | 2018-09-21 | 2019-02-22 | 广州小鹏汽车科技有限公司 | 一种登录验证处理方法、系统及装置 |
CN110489474A (zh) * | 2019-08-05 | 2019-11-22 | 北京字节跳动网络技术有限公司 | 一种数据处理的方法、装置、介质和电子设备 |
US20190361780A1 (en) * | 2018-05-25 | 2019-11-28 | EMC IP Holding Company LLC | Method and approach for pagination over data stream with sliding window |
CN110740163A (zh) * | 2019-09-04 | 2020-01-31 | 无锡华云数据技术服务有限公司 | 幂等性控制方法、装置、电子设备及可读存储介质 |
CN111159316A (zh) * | 2020-02-14 | 2020-05-15 | 北京百度网讯科技有限公司 | 关系型数据库查询方法、装置、电子设备及存储介质 |
-
2020
- 2020-07-17 CN CN202010690950.7A patent/CN111865970B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6044404A (en) * | 1997-06-20 | 2000-03-28 | International Business Machines Corporation | Apparatus, method and computer program for providing arbitrary locking modes for controlling concurrent access to server resources |
US6052731A (en) * | 1997-07-08 | 2000-04-18 | International Business Macines Corp. | Apparatus, method and computer program for providing arbitrary locking requesters for controlling concurrent access to server resources |
US5946686A (en) * | 1997-07-11 | 1999-08-31 | International Business Machines Corporation | Parallel file system and method with quota allocation |
US6032216A (en) * | 1997-07-11 | 2000-02-29 | International Business Machines Corporation | Parallel file system with method using tokens for locking modes |
US20060069775A1 (en) * | 2004-06-17 | 2006-03-30 | Artobello Michael R | Apparatus, system, and method for automatically freeing a server resource locked awaiting a failed acknowledgement from a client |
US20140164776A1 (en) * | 2012-02-20 | 2014-06-12 | Lock Box Pty Ltd | Cryptographic method and system |
CN108090058A (zh) * | 2016-11-21 | 2018-05-29 | 广东亿迅科技有限公司 | 一种高并发活动交互方法 |
CN108650093A (zh) * | 2018-03-30 | 2018-10-12 | 深圳市富途网络科技有限公司 | 一种基于幂等性的接口实现方法 |
US20190361780A1 (en) * | 2018-05-25 | 2019-11-28 | EMC IP Holding Company LLC | Method and approach for pagination over data stream with sliding window |
CN109379192A (zh) * | 2018-09-21 | 2019-02-22 | 广州小鹏汽车科技有限公司 | 一种登录验证处理方法、系统及装置 |
CN110489474A (zh) * | 2019-08-05 | 2019-11-22 | 北京字节跳动网络技术有限公司 | 一种数据处理的方法、装置、介质和电子设备 |
CN110740163A (zh) * | 2019-09-04 | 2020-01-31 | 无锡华云数据技术服务有限公司 | 幂等性控制方法、装置、电子设备及可读存储介质 |
CN111159316A (zh) * | 2020-02-14 | 2020-05-15 | 北京百度网讯科技有限公司 | 关系型数据库查询方法、装置、电子设备及存储介质 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112383402A (zh) * | 2020-11-13 | 2021-02-19 | 中国联合网络通信集团有限公司 | 双重幂等验证方法及服务器 |
CN112559498A (zh) * | 2020-12-25 | 2021-03-26 | 北京百度网讯科技有限公司 | 时序时空数据库系统的分布式架构的构建方法、装置 |
CN112559498B (zh) * | 2020-12-25 | 2024-04-30 | 北京百度网讯科技有限公司 | 时序时空数据库系统的分布式架构的构建方法、装置 |
CN112835916A (zh) * | 2021-01-15 | 2021-05-25 | 卓望数码技术(深圳)有限公司 | 基于api接口的业务处理方法、设备及计算机可读存储介质 |
CN113064584A (zh) * | 2021-04-22 | 2021-07-02 | 中国平安财产保险股份有限公司 | 幂等的实现方法、装置、设备及介质 |
CN113064584B (zh) * | 2021-04-22 | 2024-05-07 | 中国平安财产保险股份有限公司 | 幂等的实现方法、装置、设备及介质 |
CN113177085A (zh) * | 2021-05-25 | 2021-07-27 | 上海安畅网络科技股份有限公司 | 一种接口幂等调用的方法、装置、设备及存储介质 |
CN113177085B (zh) * | 2021-05-25 | 2023-04-14 | 上海安畅网络科技股份有限公司 | 一种接口幂等调用的方法、装置、设备及存储介质 |
CN113553214A (zh) * | 2021-07-30 | 2021-10-26 | 国网电子商务有限公司 | 一种幂等性校验方法及装置 |
CN113553214B (zh) * | 2021-07-30 | 2024-04-02 | 国网数字科技控股有限公司 | 一种幂等性校验方法及装置 |
CN113722122A (zh) * | 2021-08-13 | 2021-11-30 | 北京东方国信科技股份有限公司 | 一种rpc幂等性保证方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111865970B (zh) | 2022-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111865970B (zh) | 用于实现接口幂等性的方法和装置 | |
US9811577B2 (en) | Asynchronous data replication using an external buffer table | |
KR102295830B1 (ko) | 기업 시스템내 디바이스들에 대한 변화 이벤트들 관리 | |
US9378337B2 (en) | Data item deletion in a database system | |
CN106716335B (zh) | 映射信息的异步处理 | |
US9971563B2 (en) | Systems and methods for low interference logging and diagnostics | |
CN109918191B (zh) | 一种业务请求防频的方法和装置 | |
CN111198751A (zh) | 业务处理方法和装置 | |
CN110555068A (zh) | 数据导出方法和装置 | |
US11442930B2 (en) | Method, apparatus, device and storage medium for data aggregation | |
US10248668B2 (en) | Mapping database structure to software | |
US9473565B2 (en) | Data transmission for transaction processing in a networked environment | |
CN110545324A (zh) | 数据处理方法、装置、系统、网络设备和存储介质 | |
CN107657155B (zh) | 用于鉴定用户操作权限的方法和装置 | |
CN112148705A (zh) | 数据迁移的方法和装置 | |
CN111949678A (zh) | 跨时间窗口的非累加指标的处理方法和装置 | |
US11243979B1 (en) | Asynchronous propagation of database events | |
CN110781238B (zh) | 基于Redis、Hbase结合的客户视图缓存方法和装置 | |
CN109087097B (zh) | 一种更新链码同一标识的方法和装置 | |
CN113760861A (zh) | 一种数据迁移的方法和装置 | |
CN113779122A (zh) | 导出数据的方法和装置 | |
CN110019671B (zh) | 一种处理实时消息的方法和系统 | |
CN113220981A (zh) | 一种优化缓存的方法和装置 | |
CN113347052A (zh) | 通过访问日志统计用户访问数据的方法和装置 | |
US9317546B2 (en) | Storing changes made toward a limit |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |