接口访问数据验证方法及装置、计算机存储介质和设备转让专利

申请号 : CN201710712862.0

文献号 : CN107395623B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 周东伟

申请人 : 广州视源电子科技股份有限公司

摘要 :

本发明实施例提供一种接口访问数据验证方法及装置、计算机存储介质和设备。所述接口访问数据验证方法包括:针对一个请求生成一个数据验证逻辑;根据数据验证逻辑,确定所包括的一个或多个数据验证项;针对所述数据验证逻辑中的每个数据验证项设置验证条件对象;对所述数据验证逻辑中包括的数据验证项进行验证,全部数据验证项通过验证后,该数据验证逻辑验证通过。本发明实施例的接口访问数据验证技术通过自定义的方式实现了数据验证依赖关系,将数据验证逻辑从业务逻辑中分离出来,克服了现有技术中数据验证逻辑重复的问题,消除验证逻辑和业务逻辑的耦合,并且具有较好的扩展性。

权利要求 :

1.一种接口访问数据验证方法,其特征在于,包括如下步骤:

数据验证逻辑生成步骤:针对一个请求生成一个数据验证逻辑,为所述一个数据验证逻辑定义一个验证接口;

数据验证项确定步骤:根据所述一个数据验证逻辑,确定所包括的多个数据验证项;

数据验证逻辑配置步骤:根据一个数据逻辑包括的多个数据验证项之间的关联性,设定验证次序,针对所述数据验证逻辑中的每个数据验证项设置验证条件对象;

数据验证逻辑验证步骤:按照验证次序对所述数据验证逻辑中包括的数据验证项进行验证,已完成验证的数据验证项将其验证值存储在验证条件对象的请求属性中,全部数据验证项通过验证后,该数据验证逻辑验证通过,针对该数据验证逻辑的每个数据验证项设置的验证条件对象通过所述一个验证接口发送到业务逻辑层,其中,所述数据验证项的验证条件对象包括验证参数,至少一个次序在后的数据验证项的验证条件对象的验证参数,至少部分取自存储有验证值的次序在前的数据验证项的验证条件对象的请求属性中。

2.如权利要求1所述的接口访问数据验证方法,其特征在于,所述数据验证项的验证条件对象还包括验证方法和验证条件,在数据验证逻辑验证步骤中,获取数据验证项的验证参数,采用给定的验证方法对所述验证参数进行验证,满足验证条件,则该数据验证项验证通过。

3.如权利要求1所述的接口访问数据验证方法,其特征在于,所述验证参数取自验证条件对象的指定请求参数位置和/或存储有验证值的次序在前的数据验证项的验证条件对象的请求属性中。

4.如权利要求1所述的接口访问数据验证方法,其特征在于,所述验证值包括数据验证项的最终的实际值和/或中间值。

5.如权利要求2所述的接口访问数据验证方法,其特征在于,在所述数据验证项的验证条件对象中,设定该数据验证项的期望值,验证条件为验证该数据验证项的实际值与期望值相等。

6.如权利要求2所述的接口访问数据验证方法,其特征在于,所述验证条件还包括验证条件对象中存在所需的参数。

7.如权利要求1所述的接口访问数据验证方法,其特征在于,在数据验证项确定步骤中,从多个数据项中选择确定所述数据验证逻辑所包括的数据验证项。

8.如权利要求1所述的接口访问数据验证方法,其特征在于,在数据验证逻辑验证步骤中,其中任一项数据验证项验证失败后,不再进行后续数据验证项的验证,该数据验证逻辑验证失败。

9.一种接口访问数据验证装置,其特征在于,包括数据验证逻辑生成部件、数据验证项确定部件、数据验证逻辑配置部件和数据验证逻辑验证部件,其中:数据验证逻辑生成部件用于针对一个请求生成一个数据验证逻辑,为所述一个数据验证逻辑定义一个验证接口;

数据验证项确定部件用于根据所述一个数据验证逻辑,确定所包括的一个或多个数据验证项;

数据验证逻辑配置部件用于根据一个数据逻辑包括的多个数据验证项之间的关联性,设定验证次序,针对所述数据验证逻辑中的每个数据验证项设置验证条件对象;

数据验证逻辑验证部件用于按照验证次序对所述数据验证逻辑中包括的数据验证项进行验证,已完成验证的数据验证项将其验证值存储在验证条件对象的请求属性中,全部数据验证项通过验证后,该数据验证逻辑验证通过,针对该数据验证逻辑的每个数据验证项设置的验证条件对象通过所述一个验证接口发送到业务逻辑层,其中,所述数据验证项的验证条件对象包括验证参数,至少一个次序在后的数据验证项的验证条件对象的验证参数,至少部分取自存储有验证值的次序在前的数据验证项的验证条件对象的请求属性中。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有用于执行如权利要求1-9之一所述的接口访问数据验证方法的计算机程序。

11.一种计算机设备,其特征在于,包括处理器和操作上与所述处理器连接的如权利要求10所述的计算机可读存储介质,所述处理器运行执行计算机可读介质中的计算机程序。

说明书 :

接口访问数据验证方法及装置、计算机存储介质和设备

技术领域

[0001] 本发明涉及数据处理技术领域,具体涉及一种接口访问数据验证方法及装置、计算机存储介质和设备。

背景技术

[0002] 随着网络访问技术的发展,需要对来自后台web服务接口的请求进行一系列的验证操作。较为常见的是基于用户身份的请求合法性验证,其根据用户身份验证该用户是否有权限进行某项操作或者获取某种资源。目前,类似验证已经有诸如基于Spring Security、Shiro等安全构架的程序解决方案。
[0003] 但是,对于请求中的特定参数进行验证时,需要访问一些业务数据才进行相关数据一致性的校验。Spring Security和Shiro等安全框架的解决方案虽然能够很好的解决与访问用户权限相关的数据验证,但是对于需要侵入业务的数据一致性验证则无能为力。
[0004] 图1中示出了现有技术中经常采用的接口数据验证方法,其在业务逻辑中添加数据验证逻辑。由于业务逻辑之间就存在互相调用的情况,如果业务逻辑中又存在重复的数据验证,就会出现重复的数据验证操作。并且,在更为复杂的业务场合中,数据验证还会涉及到一定的依赖关系和先后次序,重复的数据验证操作会更多。此外,对于同一个数据验证逻辑而言,随着应用场景的变化,对于验证的结果还会有不同的期望值。现有技术中的上述方法不仅容易造成数据验证的代码重复,还容易造成数据重复验证的问题,导致数据验证逻辑与业务逻辑严重耦合,降低了代码的可复用性,增加了接口的访问时延,造成了计算资源的浪费,增加了开发和维护的成本。

发明内容

[0005] 为了解决上述现有技术中在业务逻辑验证中重复数据验证操作的问题,本发明实施例提出了一种接口访问数据验证方法,包括如下步骤:
[0006] 数据验证逻辑生成步骤:针对一个请求生成一个数据验证逻辑;
[0007] 数据验证项确定步骤:根据数据验证逻辑,确定所包括的一个或多个数据验证项;
[0008] 数据验证逻辑配置步骤:针对所述数据验证逻辑中的每个数据验证项设置验证条件对象;
[0009] 数据验证逻辑验证步骤:对所述数据验证逻辑中包括的数据验证项进行验证,全部数据验证项通过验证后,该数据验证逻辑验证通过。
[0010] 进一步,在数据验证逻辑配置步骤中,根据一个数据逻辑包括的多个数据验证项之间的关联性,设定验证次序;在数据验证逻辑验证步骤中,按照验证次序对所述数据验证逻辑中包括的数据验证项进行验证。
[0011] 进一步,所述数据验证项的验证条件对象包括验证参数、验证方法和验证条件,在数据验证逻辑验证步骤中,获取数据验证项的验证参数,采用给定的验证方法对所述验证参数进行验证,满足验证条件,则该数据验证项验证通过。
[0012] 进一步,所述验证参数取自请求数据的指定请求参数位置和/或请求属性中。
[0013] 进一步,在数据验证逻辑验证步骤中,已完成验证的数据验证项将其验证值存储在请求数据的请求属性中。
[0014] 进一步,所述验证值包括数据验证项的最终的实际值和/或中间值。
[0015] 进一步,在所述数据验证项的验证条件对象中,设定该数据验证项的期望值,验证条件为验证该数据验证项的实际值与期望值相等。
[0016] 进一步,所述验证条件还包括请求数据中存在所需的参数。
[0017] 进一步,在数据验证项确定步骤中,从多个数据项中选择确定所述数据验证逻辑所包括的数据验证项。
[0018] 进一步,在数据验证逻辑验证步骤中,其中任一项数据验证项验证失败后,不再进行后续数据验证项的验证,该数据验证逻辑验证失败。
[0019] 本发明实施例还提出了一种接口访问数据验证装置,包括数据验证逻辑生成部件、数据验证项确定部件、数据验证逻辑配置部件和数据验证逻辑验证部件,其中:
[0020] 数据验证逻辑生成部件用于针对一个请求生成一个数据验证逻辑;
[0021] 数据验证项确定部件用于根据数据验证逻辑,确定所包括的一个或多个数据验证项;
[0022] 数据验证逻辑配置部件用于针对所述数据验证逻辑中的每个数据验证项设置验证条件对象;
[0023] 数据验证逻辑验证部件用于对所述数据验证逻辑中包括的数据验证项进行验证,全部数据验证项通过验证后,该数据验证逻辑验证通过。
[0024] 本发明实施例还提出了一种计算机可读存储介质,所述计算机可读存储介质存储有用于执行如上所述的接口访问数据验证方法的计算机程序。
[0025] 本发明实施例还提出了一种计算机设备,包括处理器和操作上与所述处理器连接的如上所述的计算机可读存储介质,所述处理器运行执行计算机可读介质中的计算机程序。
[0026] 本发明实施例的接口访问数据验证技术克服了数据验证逻辑重复的问题,通过自定义的方式实现了数据验证依赖关系,将数据验证逻辑从业务逻辑中分离出来,消除验证逻辑和业务逻辑的耦合。另外,本发明实施例的方案还具有较好的扩展性,当出现新的数据验证需求时,只需要定义新的数据验证逻辑和增加CheckEntity到相应接口即可,无需修改其他部分的代码。

附图说明

[0027] 图1是现有技术中的接口数据验证方法示意图;
[0028] 图2是本发明实施例提出的接口访问数据验证方法的框架原理图;
[0029] 图3是本发明实施例提出的接口访问数据验证方法的方法流程图;
[0030] 图4是本发明实施例提出的接口访问数据验证装置的结构方框图。

具体实施方式

[0031] 为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。但本领域技术人员知晓,本发明并不局限于附图和以下实施例。
[0032] 如图2、3所示,本发明实施例提出了一种接口访问数据验证方法,在多个接口访问请求中包括多个数据验证项,数据验证项A、数据验证项B、数据验证项C、数据验证项D、数据验证项E、数据验证项F、……,包括以下步骤:
[0033] 数据验证逻辑生成步骤:针对一个请求生成一个数据验证逻辑,为一个数据验证逻辑定义一个验证接口。如图2所示,第一数据验证逻辑的验证接口为接口A,第二数据验证逻辑的验证接口为接口B。
[0034] 数据验证项确定步骤:根据一个数据验证逻辑,从所述多个数据验证项中进行选择,确定所涉及的一个或多个数据验证项。图2中,第一数据验证逻辑中涉及数据验证项A、数据验证项E和数据验证项F,第二数据验证逻辑中涉及数据验证项A、数据验证项B、数据验证项D。
[0035] 数据验证逻辑配置步骤:设定所包括的数据验证项的验证次序,如果某个数据验证逻辑虽然包括多个数据验证项,但它们之间并没有必须的验证次序,则可以随机排列验证顺序。针对数据验证逻辑中的每个数据验证项设置验证条件对象CheckEntity,验证条件对象CheckEntity中包括验证参数、验证方法和验证条件。
[0036] 图2中,对于数据验证逻辑中的每个数据验证项均需要设置具体的验证条件对象CheckEntity,如表1所示:
[0037]
[0038] 表1
[0039] 定义数据验证逻辑中的某数据验证项的验证条件对象为CheckEntity X,X例如可以是A、B、C、D、E、F……。其中:
[0040] requestChecker(请求拦截器):表示该数据验证项所属的数据验证逻辑对应的接口、验证方法;
[0041] paramName(参数名):表示需要进行数据验证的参数名称;
[0042] paramLocation(参数位置):表示该参数位于该请求数据中的位置,param表示参数在请求数据的指定位置,attribute表示参数在请求数据的请求属性中。如果在某个数据验证逻辑中,在后的数据验证项B需要使用在先的数据验证项A的值(包括实际值和/或中间值),那么数据验证项A完成验证操作后,会将数据验证项A的值(包括实际值和/或中间值)保存在请求数据的请求属性attribute中。优选的,在同一数据验证逻辑中,已完成验证的数据验证项将其验证值(包括实际值和/或中间值)存储在请求数据的请求属性attribute中。
[0043] expectedValue(期望值):表示该数据验证项的期望值,期望值可以为真“true”,也可以为假“false”,视具体情况而定;
[0044] required(必要要求):表示验证所需的参数是否必须存在,真“true”表示必须存在,假“false”表示,可以不存在并继续执行该数据逻辑验证。
[0045] 由此,当对应于某个接口有请求request时,例如如图2的第一数据验证逻辑所示,具有数据验证项A、数据验证项F和数据验证项E的验证需求,设定验证次序为CheckEntityA→CheckEntityF→CheckEntityE。它们的验证条件对象分别设置如下:
[0046] CheckEntityA{paramName:A,paramLocation:param(在请求数据中),required:true,expectedValue:true,requestCheckerA{check(request,CheckEntityA)}},[0047] CheckEntityF{paramName:F,paramLocation:attribute(在请求属性中),required:true,expectedValue:false,requestCheckerF{check(request,
CheckEntityF)}},
[0048] CheckEntityE{paramName:E,paramLocation:param,attribute(在请求数据和请求属性中),required:true,expectedValue:false,requestCheckerE{check(request,CheckEntityE)}},
[0049] 那么,当请求request到达后台服务器后,拦截器根据请求request获取数据验证项A、数据验证项F和数据验证项E的验证条件对象CheckEntityA、CheckEntityF和CheckEntityE。
[0050] 数据验证逻辑验证步骤:按次序对该数据验证逻辑(请求)中的各数据验证项进行验证,全部数据验证项通过验证时,该数据验证逻辑验证通过,即该请求通过;其中任一项数据验证项验证失败时,则不再进行后续数据验证项的验证,该数据验证逻辑验证失败,即该请求失败。
[0051] 具体的,在对一项数据验证项进行验证时,从请求数据和/或请求属性中获取数据验证的参数,利用给定的验证方法对参数进行验证,得到该数据验证项的实际值,将数据验证项的实际值与期望值(验证条件)进行比较。两者相同时,该数据验证项通过验证,否则该数据验证项验证失败。
[0052] 在如上所述的图2的第一数据验证逻辑验证过程中,首先对数据验证项A进行验证,从请求数据的指定的请求参数位置param取出参数A。由于required的参数值为真true,那么要求在请求数据中必须获取到参数A,如果不能在请求数据中获取到参数A,则数据验证项A的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果在请求数据中获取到参数A,则执行参数A的给定验证方法(requestCheckerA中的check方法),计算出实际值value(真或者假),判断实际值value是否等于期望值expectedValue。如果真实值value不等于期望值expectedValue,则数据验证项A的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果真实值value等于期望值expectedValue,那么数据验证项A的验证通过,顺序对数据验证项F进行验证。
[0053] 接着,对数据验证项目F进行验证,从请求数据的请求属性attribute中取出参数F。由于required的参数值为真true,那么要求在请求数据的请求属性中必须获取到参数F,如果不能在请求属性中获取到参数F,则数据验证项F的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果在请求属性中获取到参数F,则执行参数F的给定验证方法(requestCheckerF中的check方法),计算出实际值value(真或者假),判断实际值value是否等于期望值expectedValue。如果真实值value不等于期望值expectedValue,则数据验证项F的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果真实值value等于期望值expectedValue,那么数据验证项F的验证通过,继续对数据验证项E进行验证。
[0054] 随后,对数据验证项目E进行验证,从请求数据的指定的请求参数位置param和请求属性attribute中分别取出参数。由于required的参数值为真true,那么要求必须可以获取到上述参数。如果不能在请求数据中获取到上述参数,则数据验证项E的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果在请求数据中获取到上述参数,则执行参数E的验证方法(requestCheckerE中的check方法),计算出实际值value(真或者假),判断实际值value是否等于期望值expectedValue。如果真实值value不等于期望值expectedValue,则数据验证项E的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果真实值value等于期望值expectedValue,那么数据验证项E的验证通过,数据验证项A、数据验证项F和数据验证项E构成的数据验证逻辑(该请求)验证通过。
[0055] 如果一项请求验证通过,即相应的数据验证逻辑验证通过,则将请求数据发送到业务逻辑层。
[0056] 在本发明实施例的一个应用场景中,会议服务应用中具有一个接口请求,提供邀请好友加入某个会议的功能。本发明实施例的接口访问数据验证方法如下:
[0057] 数据验证项确定步骤:在用户访问该会议接口时,从多个数据验证项中选择数据验证项A、数据验证项B和数据验证项D进行验证操作,其中:
[0058] 数据验证项A(meetingExist):会议存在;
[0059] 数据验证项B(MeetingMember1):邀请人是该会议的成员;
[0060] 数据验证项D(MeetingMember2):被邀请人是该会议的成员。
[0061] 数据验证逻辑配置步骤:在上述三个数据验证项中,数据验证项A(meetingExist)的验证必须在数据验证项B(MeetingMember1)、数据验证项D(MeetingMember2)之前进行,将数据验证项A(meetingExist)的验证次序排在最前面,数据验证项B(MeetingMember1)、D(MeetingMember2)随机排列在后,可参见图2所示的第二数据验证逻辑。设置该数据验证逻辑中的数据验证项的验证条件对象CheckEntityA(meetingExist)、CheckEntityB(MeetingMember1)和CheckEntityD(MeetingMember2)。如表4所示,可以将对上述数据验证逻辑中的数据验证项A(meetingExist)、数据验证项B(MeetingMember1)和数据验证项D(MeetingMember2)的验证条件对象设置如下:
[0062] CheckEntityA{paramName:meetingExist,paramLocation:param A,required:true,expectedValue:true,meetingExistrequestChecker{check(request,
CheckEntityA)}},
[0063] CheckEntityB{paramName:MeetingMember1,paramLocation:param B,attributeA,required:true,expectedValue:true,MeetingMember1requestChecker{check(request,CheckEntityB)}},
[0064] CheckEntityD{paramName:MeetingMember2,paramLocation:param D,attributeA,required:true,expectedValue:false,MeetingMember2requestChecker{check(request,CheckEntityD)}},
[0065] 数据验证逻辑验证步骤:首先对数据验证项A(meetingExist)进行验证,从请求数据的指定的请求参数位置param A取出参数meetingExist。由于required的参数值为真true,那么要求在请求数据中必须获取到参数meetingExist,如果不能在请求数据中获取到参数meetingExist,则数据验证项meetingExist的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果在请求数据中获取到参数meetingExist,则执行参数meetingExist的给定验证方法(meetingExistrequestChecker中的check方法),计算出实际值value(真或者假),判断实际值value是否等于期望值expectedValue的真true。如果真实值value不等于期望值expectedValue,则数据验证项A(meetingExist)的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果真实值value等于期望值expectedValue,那么数据验证项A(meetingExist)的验证通过,会议存在,顺序对数据验证项B(MeetingMember1)进行验证。在完成数据验证项A(meetingExist)的验证后,将其实际值存储在请求数据的请求属性attribute中,供在对数据验证项B(MeetingMember1)和数据验证项D(MeetingMember2)进行验证时调用。
[0066] 接着,对数据验证项B(MeetingMember1)进行验证,从请求数据的指定的请求参数位置param B和请求属性attribute A中分别取出参数。由于required的参数值为真true,那么要求在请求数据中必须获取到参数,如果不能获取到参数,则数据验证项B(MeetingMember1)的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果在请求数据中获取到参数,则执行上述参数的给定验证方法(MeetingMember1requestChecker中的check方法),计算出实际值value(真或者假),判断实际值value是否等于期望值expectedValue的真true。如果真实值value不等于期望值expectedValue,则数据验证项B(MeetingMember1)的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果真实值value等于期望值expectedValue,那么数据验证项B(MeetingMember1)的验证通过,邀请人是该会议的成员,继续对数据验证项D进行验证。
[0067] 随后,对数据验证项D(MeetingMember2)进行验证,从请求数据的指定的请求参数位置param D和请求属性attribute A中分别取出参数。由于required的参数值为真true,那么要求在请求数据中必须获取到参数,如果不能获取到参数,则数据验证项D(MeetingMember1)的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果在请求数据中获取到参数,则执行上述参数的给定验证方法(MeetingMember1requestChecker中的check方法),计算出实际值value(真或者假),判断实际值value是否等于期望值expectedValue的假false。如果真实值value不等于期望值expectedValue,则数据验证项D(MeetingMember2)的验证失败,并且其所在的数据验证逻辑验证失败(该请求失败);如果真实值value等于期望值expectedValue,那么数据验证项D(MeetingMember2)的验证通过,被邀请人不是该会议的成员。由此,数据验证项A、数据验证项F和数据验证项E构成的数据验证逻辑(该请求)验证通过,被邀请人可以访问该会议,并可将请求数据发送到业务逻辑层。
[0068] 本发明实施例还提供一种接口访问数据验证装置,如图4所示,包括数据验证逻辑生成部件、数据验证项确定部件、数据验证逻辑配置部件和数据验证逻辑验证部件,其中:
[0069] 数据验证逻辑生成部件用于针对一个请求生成一个数据验证逻辑;
[0070] 数据验证项确定部件用于根据数据验证逻辑,确定所包括的一个或多个数据验证项;
[0071] 数据验证逻辑配置部件用于针对所述数据验证逻辑中的每个数据验证项设置验证条件对象;
[0072] 数据验证逻辑验证部件用于对所述数据验证逻辑中包括的数据验证项进行验证,全部数据验证项通过验证后,该数据验证逻辑验证通过。
[0073] 本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质中存储有用于执行上述接口访问数据验证方法的计算机程序。
[0074] 本发明实施例还提出一种计算机设备,包括处理器和操作上与所述处理器连接的上述计算机可读存储介质,所述处理器运行执行计算机可读介质中的计算机程序。
[0075] 在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0076] 以上,对本发明的实施方式进行了说明。但是,本发明不限定于上述实施方式。凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。