欢迎光临小豌豆知识网!
当前位置:首页 > 电学技术 > 电通讯技术> 接口请求处理方法及计算机可读存储介质独创技术27207字

接口请求处理方法及计算机可读存储介质

2021-02-23 15:28:20

接口请求处理方法及计算机可读存储介质

  技术领域

  本发明涉及接口技术领域,尤其涉及一种接口请求处理方法及计算机可读存储介质。

  背景技术

  随着互联网的高速发展,网络恶意攻击已经成为业界不可忽视的问题。网络恶意攻击可以是为达到一定目的而采取的非正常手段,如,网络攻击、恶意请求等。在网络环境中,网络恶意行为可以在极短的时间内致使网站不能正常为用户提供服务,这严重影响了互联网的正常运作。

  恶意请求,可以是通过应用程序,在一段时间内,不断地向服务器发送的、并影响服务器正常运作的超文本传输协议网络请求。例如,通过这种方式干扰正常用户的网络行为或者以此攻击一个web网站。由于这些请求非常密集,给服务器造成了巨大的压力。

  目前采用的方案一般是对接口进行限流,主要采取的手段为当超过最大请求数后,让请求方进行等待或发出重试指令。但该种方式实现的功能单一,缺乏灵活性,无法面对突发的流量或攻击。

  发明内容

  本发明所要解决的技术问题是:提供一种接口请求处理方法及计算机可读存储介质,可提高接口服务的稳定性和健壮性。

  为了解决上述技术问题,本发明采用的技术方案为:一种接口请求处理方法,包括:

  接口管理服务端接收客户端发送的接口请求,所述接口请求包括客户端标识、被请求接口的接口标识以及业务参数;

  根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,判断所述接口请求是否处于合法的调用次数内;

  若否,则对所述接口请求进行限流,并记录请求结果;

  若是,则对所述客户端标识对应所述接口标识的历史请求数据进行验证;

  若验证不通过,则对所述接口请求进行限流,并记录请求结果;

  若验证通过,则将所述接口请求发送至业务服务端;

  接收业务服务端返回的请求结果,所述请求结果为请求成功、请求失败或请求内容不存在;

  根据所述接口请求及其请求结果,统计所述同一客户端标识对应同一接口标识的历史请求数据。

  本发明还涉及一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上所述的步骤。

  本发明的有益效果在于:若当前周期内同一请求方对同一接口的调用次数超过预设的周期最大调用次数,则对所述请求方对所述接口的接口请求进行限流,提高接口服务的稳定性;通过对同一请求方对应同一接口的历史请求数据进行分析,判断当前接口请求是否可能为恶意请求,若存在恶意请求的可能性,则所述请求方对所述接口的接口请求进行限流,降低服务端被攻击的风险,提高接口服务的健壮性。本发明能够比较好地应对突发流量以及攻击,提高服务端的稳定性和健壮性。

  附图说明

  图1为本发明的一种接口请求处理方法的流程图;

  图2为本发明实施例一的方法流程图。

  具体实施方式

  为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。

  本发明最关键的构思在于:通过分析客户端对被请求接口的调用次数是否处于合法的调用次数内,以及对客户端对应被请求接口的历史请求数据进行分析,判断当前的接口请求是否需要进行限流或放行。

  请参阅图1,一种接口请求处理方法,包括:

  接口管理服务端接收客户端发送的接口请求,所述接口请求包括客户端标识、被请求接口的接口标识以及业务参数;

  根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,判断所述接口请求是否处于合法的调用次数内;

  若否,则对所述接口请求进行限流,并记录请求结果;

  若是,则对所述客户端标识对应所述接口标识的历史请求数据进行验证;

  若验证不通过,则对所述接口请求进行限流,并记录请求结果;

  若验证通过,则将所述接口请求发送至业务服务端;

  接收业务服务端返回的请求结果,所述请求结果为请求成功、请求失败或请求内容不存在;

  根据所述接口请求及其请求结果,统计所述同一客户端标识对应同一接口标识的历史请求数据。

  从上述描述可知,本发明的有益效果在于:可提高服务端的稳定性和健壮性。

  进一步地,所述根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,判断所述接口请求是否处于合法的调用次数内之前,进一步包括:

  根据所述被请求接口对应的客户端标识白名单,判断所述客户端是否授权;

  若否,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败;

  若是,则执行所述根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,判断所述接口请求是否处于合法的调用次数内的步骤。

  由上述描述可知,通过先对客户端是否授权进行判断,直接拦截不可信的客户端的接口请求,可准确地对不可信的接口请求进行限流,提高服务端的安全性。

  进一步地,所述根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,判断所述接口请求是否处于合法的调用次数内,若否,则对所述接口请求进行限流,并记录请求结果具体为:

  判断当前周期内所述被请求接口被所述客户端调用的次数是否超过预设的所述接口标识对应所述客户端标识的周期最大调用次数;

  若是,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败;

  若否,则判断当前周期内所述被请求接口被所述客户端调用的次数是否超过当前时间点对应的允许调用次数;

  若是,则将所述接口请求加入所述被请求接口的排队队列中,并记录请求结果;

  若否,则判定所述接口请求处于合法的调用次数内。

  进一步地,所述判断当前周期内所述被请求接口被所述客户端调用的次数是否超过当前时间点对应的允许调用次数之前,进一步包括:

  根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,计算周期内预设的单位时间段对应的单位最大调用次数;

  根据所述单位最大调用次数,计算当前周期的起始时间点至当前时间点的时间段对应的允许调用次数,得到当前时间点对应的允许调用次数。

  由上述描述可知,若客户端对被请求接口的调用次数超过周期最大调用次数时,则在当前周期内限制所述客户端对所述被请求接口的访问;若调用次数未超过周期最大调用次数但超过了当前时间点对应的允许调用次数,则将当前的接口请求进行排队,等待时间分配调用,在起到限流作用的同时,防止正常请求被拦截。

  进一步地,所述对所述客户端标识对应所述接口标识的历史请求数据进行验证;若验证不通过,则对所述接口请求进行限流,并记录请求结果具体为:

  获取所述客户端标识对应所述接口标识的历史请求数据,所述历史请求数据包括请求数、请求失败率和请求内容不存在率;

  若在预设的时间段内所述客户端标识对应所述接口标识的请求数大于预设的第一阈值且请求失败率大于预设的第一比例,则将所述接口请求加入所述被请求接口的排队队列中,并记录请求结果;

  若在预设的时间段内所述客户端标识对应所述接口标识的请求数大于预设的第一阈值且请求内容不存在率大于预设的第二比例,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败;

  若在预设的时间段内所述客户端标识对应所述接口标识的请求数大于预设的第二阈值,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败;

  若所述客户端标识对应所述接口标识的请求失败率大于预设的第三比例,则将所述接口请求加入所述被请求接口的排队队列中,并记录请求结果;

  若所述客户端标识对应所述接口标识的请求内容不存在率大于预设的第四比例,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败。

  由上述描述可知,通过对历史请求数据进行分析,以判断所述客户端对所述被请求接口的接口请求是否可能为恶意请求,提高对恶意请求判断的准确性,然后通过对恶意请求进行限流,提高服务端的健壮性。

  进一步地,所述将所述接口请求加入所述被请求接口的排队队列中之后,进一步包括:

  若当前周期内所述被请求接口被所述客户端调用的次数超过所述周期最大调用次数,则拦截所述被请求接口的排队队列中的接口请求,并判定所述排队队列中的接口请求的请求结果为请求失败。

  由上述描述可知,通过实时监控调用次数,防止当前周期内的调用次数超过周期最大调用次数,有效起到限流的作用。

  本发明还提出一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上所述的步骤。

  实施例一

  请参照图2,本发明的实施例一为:一种接口请求处理方法,可应用于接口管理服务端,包括如下步骤:

  S1:接口管理服务端接收客户端发送的接口请求,即接收请求方发送的接口请求,所述接口请求包括客户端标识、被请求接口的接口标识以及业务参数;不同业务场景下业务参数不同,例如,登录场景下业务参数为用户账号和密码。进一步地,还可包括请求时间。本实施例中,所述客户端标识为客户端的IP地址。

  S2:接口管理服务端根据所述被请求接口对应的客户端标识白名单,判断所述客户端是否已授权,即判断所述接口标识对应的客户端标识白名单中是否存在所述客户端标识,若是,则执行步骤S3,若否,则表示所述客户端是未授权的客户端,执行步骤S4。

  S3:判断当前预设的周期内所述被请求接口被所述客户端调用的次数是否超过预设的周期最大调用次数,若是,则执行步骤S4,若否,则执行步骤S5。

  例如,假设接口A每天的最大调用次数为3000次,该步骤即判断接口A当天被该客户端调用的次数是否超过3000次,若超过,则会限制该客户端对该接口的访问,在当前周期内之后的时间,该客户端对该接口的接口请求都会请求失败,直至进入下一个周期。

  S4:拦截所述接口请求,并判定所述接口请求的请求结果为请求失败。执行步骤S11。

  S5:判断当前周期内所述被请求接口被所述客户端调用的次数是否超过当前时间点对应的允许调用次数,若是,则执行步骤S6,若否,则执行步骤S7;

  进一步地,在该步骤之前,先根据预设的所述被请求接口对应所述客户端标识的周期最大调用次数,计算周期内预设的单位时间段对应的单位最大调用次数;然后根据所述单位最大调用次数,计算当前周期的起始时间点至当前时间点的时间段对应的允许调用次数,得到当前时间点对应的允许调用次数。

  例如,接口A每天(0点至24点)的最大调用次数为3000次,将最大调用次数除以一天的分钟数(1440),并将结果取整,可得到每分钟的单位最大调用次数约为2次,假设当前时间点为2点整,当前时间点距离起始时间点的时长为120分钟,则当前时间点对应的允许调用次数为2×120=240次。

  进一步地,在每个周期最开始的若干个单位时间段内,预先提供对应个数的单位最大调用次数;例如,在0点至0点30分或0点至1点这段时间内,预先提供30分钟或1小时的调用次数,也就是说,这段时间内任一时间点对应的允许调用次数为0点30分或1点对应的允许调用次数。这样既可以应对突发的流量,也可以起到限流作用。

  S6:将所述接口请求加入所述被请求接口的排队队列中,并记录请求结果;即当前时间点所述被请求接口被所述客户端调用的次数未超过周期最大调用次数,但超过当前时间点对应的允许调用次数,则进行排队,等待时间分配调用次数。然后执行步骤S11。

  例如在2点整时,被请求接口被客户端调用的次数超过240次但小于3000次,则当前的接口请求放入排队队列中,等待被处理。

  进一步地,若所述接口请求为长连接请求,则将所述接口请求加入排队队列,若所述接口请求为短连接请求,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败。也就是说,图2中未示出,在本步骤之前,先判断所述接口请求是否为长连接请求,若是,则执行本步骤,若否,则执行步骤S4。

  S7:对所述客户端标识对应所述接口标识的历史请求数据进行验证,判断是否验证通过,若是,则执行步骤S9,若否,则执行步骤S8。

  S8:对所述接口请求进行限流,并记录请求结果,本实施例中,限流包括拦截接口请求或将接口请求加入被请求接口的排队队列中。执行步骤S11。

  对于步骤S7-S8,根据验证数据的不同,进行的限流操作也不同,具体地,接口管理服务端先获取所述客户端标识对应所述接口标识的历史请求数据,所述历史请求数据包括请求数、请求失败率和请求内容不存在率,还可以包括各接口请求的请求时间,然后进行以下判断:

  判断在预设的时间段内所述客户端标识对应所述接口标识的请求数是否大于预设的第一阈值且请求失败率是否大于预设的第一比例,若是,则判定验证不通过,将所述接口请求加入所述被请求接口的排队队列中,并记录请求结果。例如,若在1分钟或5分钟内同一客户端对同一接口的请求数超过5-10次,优选5次,且这几次请求的请求失败率大于20%或30%,则将该接口请求加入至所述同一接口的排队队列中。

  判断在预设的时间段内所述客户端标识对应所述接口标识的请求数是否大于预设的第一阈值且请求内容不存在率是否大于预设的第二比例,若是,则判定验证不通过,拦截所述接口请求,并判定所述接口请求的请求结果为请求失败。例如,若在1分钟或5分钟内同一客户端对同一接口的请求数超过5-10次,优选5次,且这几次请求的请求内容不存在率大于60%或80%,则拦截该接口请求,并判定其请求结果为请求失败。

  判断在预设的时间段内所述客户端标识对应所述接口标识的请求数是否大于预设的第二阈值,若是,则判定验证不通过,拦截所述接口请求,并判定所述接口请求的请求结果为请求失败。例如,若在1分钟或5分钟内同一客户端对同一接口的请求数超过60次或200次,则拦截该接口请求,并判定其请求结果为请求失败。

  判断所述客户端标识对应所述接口标识的请求失败率是否大于预设的第三比例,若是,则判定验证不通过,将所述接口请求加入所述被请求接口的排队队列中,并记录请求结果。例如,若同一客户端对同一接口的所有请求的请求失败率超过10%,则将接口请求加入至所述同一接口的排队队列中。

  判断所述客户端标识对应所述接口标识的请求内容不存在率是否大于预设的第四比例,若是,则判定验证不通过,拦截所述接口请求,并判定所述接口请求的请求结果为请求失败。例如,若同一客户端对同一接口的所有请求的请求内容不存在率超过50%,则拦截该接口请求,并判定其请求结果为请求失败。

  若上述判断的判断结果均为否,则判定验证通过。

  进一步地,拦截接口请求的同时,可以返回错误提示至所述客户端。优选地,所述错误提示为模糊提示,例如,在登录场景下,不提示具体的错误原因,而是直接返回登录失败的提示。

  S9:将所述接口请求发送至业务服务端;此时表示所述客户端成功调用了所述被请求接口,所述被请求接口被所述客户端调用的次数加一。

  进一步地,实时判断当前周期内所述被请求接口被所述客户端调用的次数是否超过预设的周期最大调用次数,若超过,则拦截所述被请求接口的排队队列中的接口请求,并判定所述排队队列中的接口请求的请求结果为请求失败。

  S10:接口管理服务端接收业务服务端返回的请求结果,所述请求结果为请求成功、请求失败或请求内容不存在。

  S11:根据所述接口请求及其请求结果,统计所述同一客户端标识对应同一接口标识的历史请求数据,进一步地,还可记录同一客户端对同一接口的各请求的请求时间。所述历史请求数据包括请求数、请求失败率和请求内容不存在率,其中,请求数即同一客户端对同一接口的发送接口请求的次数,然后将请求结果为请求失败的请求数除以总的请求数,即可计算得到请求失败率,将请求结果为请求内容不存在的请求数除以总的请求数,即可计算得到请求内容不存在率。

  在上述步骤中,对于被直接拦截的接口请求,则其请求结果为请求失败。

  对于排队队列中的接口请求,若在处理之前就被拦截,则其请求结果为请求失败,若接口请求被被请求接口处理了,即接口请求被提交至业务服务端,则该接口请求的请求结果为业务服务端返回请求结果。

  对于直接被发送业务服务端的接口请求,其请求结果为业务服务端返回请求结果。

  进一步地,后续所述同一客户端再次向所述同一接口发送接口请求,即可根据该步骤记录统计的历史请求数据进行步骤S7的判断。进一步地,历史请求数据的初始值均为0,也就是说,若同一客户端是第一次向同一接口发送接口请求,则可直接执行步骤S9。

  本实施例中,通过对客户端是否授权进行判断,直接拦截不可信的客户端的接口请求,后续只对可信客户端的接口请求进行验证,提高接口请求处理的效率;后续通过对可信客户端进行相应分析,防止可信客户端出现漏洞或被攻击对服务端造成损害,保障服务端可持续提供稳定的接口服务。通过对当前周期的调用次数进行分析,若当前周期内客户端对被请求接口的调用次数超过周期最大调用次数时,则在当前周期内限制所述客户端对所述被请求接口的访问,提高服务端的稳定性;若调用次数未超过周期最大调用次数但超过了当前时间点对应的允许调用次数,则将当前的接口请求进行排队,等待时间分配调用,在起到限流作用的同时,防止正常请求被拦截。通过根据历史请求数据对接口请求进行验证,提高对恶意请求判断的准确性,然后通过对恶意请求进行限流,保障异常数据最大程度地降到最低,提高服务端的健壮性。

  本实施例可提高接口服务的稳定性和健壮性,且可防止接口被恶意攻击。

  实施例二

  本实施例是对应上述实施例的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如下步骤:

  接口管理服务端接收客户端发送的接口请求,所述接口请求包括客户端标识、被请求接口的接口标识以及业务参数;

  根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,判断所述接口请求是否处于合法的调用次数内;

  若否,则对所述接口请求进行限流,并记录请求结果;

  若是,则对所述客户端标识对应所述接口标识的历史请求数据进行验证;

  若验证不通过,则对所述接口请求进行限流,并记录请求结果;

  若验证通过,则将所述接口请求发送至业务服务端;

  接收业务服务端返回的请求结果,所述请求结果为请求成功、请求失败或请求内容不存在;

  根据所述接口请求及其请求结果,统计所述同一客户端标识对应同一接口标识的历史请求数据。

  进一步地,所述根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,判断所述接口请求是否处于合法的调用次数内之前,进一步包括:

  根据所述被请求接口对应的客户端标识白名单,判断所述客户端是否授权;

  若否,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败;

  若是,则执行所述根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,判断所述接口请求是否处于合法的调用次数内的步骤。

  进一步地,所述根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,判断所述接口请求是否处于合法的调用次数内,若否,则对所述接口请求进行限流,并记录请求结果具体为:

  判断当前周期内所述被请求接口被所述客户端调用的次数是否超过预设的所述接口标识对应所述客户端标识的周期最大调用次数;

  若是,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败;

  若否,则判断当前周期内所述被请求接口被所述客户端调用的次数是否超过当前时间点对应的允许调用次数;

  若是,则将所述接口请求加入所述被请求接口的排队队列中,并记录请求结果;

  若否,则判定所述接口请求处于合法的调用次数内。

  进一步地,所述判断当前周期内所述被请求接口被所述客户端调用的次数是否超过当前时间点对应的允许调用次数之前,进一步包括:

  根据预设的所述接口标识对应所述客户端标识的周期最大调用次数,计算周期内预设的单位时间段对应的单位最大调用次数;

  根据所述单位最大调用次数,计算当前周期的起始时间点至当前时间点的时间段对应的允许调用次数,得到当前时间点对应的允许调用次数。

  进一步地,所述对所述客户端标识对应所述接口标识的历史请求数据进行验证;若验证不通过,则对所述接口请求进行限流,并记录请求结果具体为:

  获取所述客户端标识对应所述接口标识的历史请求数据,所述历史请求数据包括请求数、请求失败率和请求内容不存在率;

  若在预设的时间段内所述客户端标识对应所述接口标识的请求数大于预设的第一阈值且请求失败率大于预设的第一比例,则将所述接口请求加入所述被请求接口的排队队列中,并记录请求结果;

  若在预设的时间段内所述客户端标识对应所述接口标识的请求数大于预设的第一阈值且请求内容不存在率大于预设的第二比例,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败;

  若在预设的时间段内所述客户端标识对应所述接口标识的请求数大于预设的第二阈值,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败;

  若所述客户端标识对应所述接口标识的请求失败率大于预设的第三比例,则将所述接口请求加入所述被请求接口的排队队列中,并记录请求结果;

  若所述客户端标识对应所述接口标识的请求内容不存在率大于预设的第四比例,则拦截所述接口请求,并判定所述接口请求的请求结果为请求失败。

  进一步地,所述将所述接口请求加入所述被请求接口的排队队列中之后,进一步包括:

  若当前周期内所述被请求接口被所述客户端调用的次数超过所述周期最大调用次数,则拦截所述被请求接口的排队队列中的接口请求,并判定所述排队队列中的接口请求的请求结果为请求失败。

  综上所述,本发明提供的一种接口请求处理方法及计算机可读存储介质,先对客户端是否授权进行判断,直接拦截不可信的客户端的接口请求,后续只对可信客户端的接口请求进行验证,提高接口请求处理的效率。通过对当前周期的调用次数进行分析,若当前周期内客户端对被请求接口的调用次数超过周期最大调用次数时,则在当前周期内限制所述客户端对所述被请求接口的访问,提高服务端的稳定性;若调用次数未超过周期最大调用次数但超过了当前时间点对应的允许调用次数,则将当前的接口请求进行排队,等待时间分配调用,在起到限流作用的同时,防止正常请求被拦截。通过根据历史请求数据对接口请求进行验证,提高对恶意请求判断的准确性,然后通过对恶意请求进行限流,提高服务端的健壮性。本发明可提高接口服务的稳定性和健壮性,且可防止接口被恶意攻击。

  以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

《接口请求处理方法及计算机可读存储介质.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)