CN117234517A - 接口参数校验方法、装置、设备及存储介质 - Google Patents

接口参数校验方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN117234517A
CN117234517A CN202310962172.6A CN202310962172A CN117234517A CN 117234517 A CN117234517 A CN 117234517A CN 202310962172 A CN202310962172 A CN 202310962172A CN 117234517 A CN117234517 A CN 117234517A
Authority
CN
China
Prior art keywords
parameter
interface
attribute
target
attributes
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.)
Pending
Application number
CN202310962172.6A
Other languages
English (en)
Inventor
苏杰
王锴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ant Blockchain Technology Shanghai Co Ltd
Original Assignee
Ant Blockchain Technology Shanghai Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ant Blockchain Technology Shanghai Co Ltd filed Critical Ant Blockchain Technology Shanghai Co Ltd
Priority to CN202310962172.6A priority Critical patent/CN117234517A/zh
Publication of CN117234517A publication Critical patent/CN117234517A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本公开提供一种接口参数校验方法、装置、设备及存储介质,在程序源码中为待校验的接口定义的接口方法携带了预设的注解信息;接口方法包含接口参数,注解信息包含用于对接口方法包含的接口参数进行空值校验的参数表达式,参数表达式指示指定的待校验的目标接口参数;校验方法包括:拦截针对接口方法的调用请求;响应于拦截到的针对接口方法的调用请求,获取接口方法携带的注解信息,并从调用请求中解析出注解信息中的参数表达式中所指示的目标接口参数的参数值;校验解析出的目标接口参数的参数值是否为空值,若各个目标接口参数的参数值都不为空值,进一步针对从调用请求解析出的参数值进行非空值校验。

Description

接口参数校验方法、装置、设备及存储介质
技术领域
本公开涉及计算机技术领域,尤其涉及接口参数校验方法、装置、设备及存储介质。
背景技术
在产品研发过程中,基于安全等考虑,需要对接口的调用请求中的接口参数进行校验。已有的参数校验方案中,一种方式是采用硬编码实现,但硬编码方式具有可读性差、可维护性差和重用性差等缺点。另一些参数校验方案,是对要校验的接口参数添加校验注解,此种方案中多个接口复用同一个接口参数的情况下,容易产生冲突问题。
发明内容
为克服相关技术中存在的问题,本公开提供了接口参数校验方法、装置、设备及存储介质。
根据本说明书实施例的第一方面,提供一种接口参数校验方法,在程序源码中为待校验的接口定义的接口方法携带了预设的注解信息;接口方法包含至少一个接口参数,注解信息包含用于对接口方法包含的接口参数进行空值校验的参数表达式,参数表达式指示待校验的至少一个目标接口参数;校验方法包括:
拦截针对接口方法的调用请求;
响应于拦截到的针对接口方法的调用请求,获取接口方法携带的注解信息,并从调用请求中解析出注解信息中的参数表达式中所指示的各个目标接口参数的参数值;
校验解析出的各个目标接口参数的参数值是否为空值,若各个目标接口参数的参数值都不为空值,进一步针对从调用请求解析出的参数值进行非空值校验。
根据本说明书实施例的第二方面,提供一种接口参数校验装置,在程序源码中为待校验的接口定义的接口方法携带了预设的注解信息;接口方法包含至少一个接口参数,注解信息包含用于对接口方法包含的接口参数进行空值校验的参数表达式,参数表达式指示待校验的至少一个目标接口参数;校验装置包括:
拦截模块,用于:拦截针对接口方法的调用请求;
获取模块,用于:响应于拦截到的针对接口方法的调用请求,获取接口方法携带的注解信息,并从调用请求中解析出注解信息中的参数表达式中所指示的目标接口参数的参数值;
校验模块,用于:校验解析出的目标接口参数的参数值是否为空值,若各个目标接口参数的参数值都不为空值,进一步针对从调用请求解析出的参数值进行非空值校验。
根据本说明书实施例的第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行计算机程序时实现前述第一方面方法实施例的步骤。
根据本说明书实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现前述第一方面方法实施例的步骤。
本说明书的实施例提供的技术方案可以包括以下有益效果:
本说明书实施例中,将不再采用对接口方法中包含的参数单独进行注解的方式,而是采用对接口方法整体进行注解的方式;
一方面,通过为接口方法添加包含用于对接口方法进行空值校验的参数表达式,可以在对接口方法包含的参数进行校验时,先从接口方法包含的注解信息中解析出上述参数表达式,再利用该参数表达式对该接口方法包含的参数进行空值校验,在通过空值校验后,再结合额外的规则对该接口方法包含的参数进行非空值校验,从而可以将空值校验和非空值校验两种校验流程独立开来,先进行空值校验再进行非空值校验,有助于提升对接口方法包含的参数进行校验的校验效率。
另一方面,相关方案中采用对接口方法中包含的参数单独进行注解的方式,若不同接口方法需要复用相同参数,有些接口方法需要对该参数进行空值校验,但有些接口可能不需要对参数进行空值校验,如此可能存在不同接口方法对相同参数的空值校验需求具有冲突的问题,从而导致该参数无法被不同接口方法复用。因此,通过为接口方法添加包含用于对接口方法进行空值校验的参数表达式,被复用的接口参数,在一个接口方法下需要被空值校验,则将参数添加在该接口方法的空值校验的参数表达式中即可;在其他接口方法下不需要被空值校验,则无需添加在空值校验的参数表达式中。因此这种注解方式还可以提升被校验参数被不同接口方法复用的复用率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本公开的原理。
图1是本说明书根据一示例性实施例示出的一种接口参数校验方法的流程图。
图2是本说明书根据一示例性实施例示出的一种参数表达式的示意图。
图3是本说明书根据一示例性实施例示出的一种接口参数校验装置所在计算机设备的一种硬件结构图。
图4是本说明书根据一示例性实施例示出的一种接口参数校验装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本公开所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
在产品研发过程中,基于安全等考虑,需要对接口的调用请求中的接口参数进行校验。接口参数的校验包括空值校验和非空值校验。空值校验用于检查参数值是否为空,可以避免接口方法对空值进行操作时出现异常。非空值校验则是对参数值进行特定规则的校验,例如校验手机号码参数的参数值是否满足设定的手机号码位数、校验邮箱参数的参数值是否满足设定的邮箱格式、校验名称参数的参数值是否满足设定的名称长度等等,非空值校验的具体规则根据实际场景进行配置。
已有的参数校验方案中,一种方式是采用硬编码实现,硬编码是指直接在代码中写入具体的数值、字符串或逻辑,而不使用变量、常量或配置文件进行抽象和配置。在参数校验方面,硬编码指的是在代码中直接编写对参数的校验逻辑,而不使用特定的验证框架或工具类。这意味着将校验规则和逻辑直接嵌入到代码中,因此,硬编码方式具有可读性差、可维护性差和重用性差等缺点。
在Java(一种编程语言的名称)语言等场景下,参数校验还可以使用HibernateValidate(一种用于Java Bean验证的开源框架,其中Java Bean是指符合Java Beans规范的一种特殊的Java类)工具,开发者可以通过注解的方式在Java Bean的属性上添加验证规则,从而实现验证逻辑的定义和管理。在运行时,当对象的属性被赋值后,HibernateValidator会自动触发验证过程,并根据注解定义的规则来判断属性是否满足要求。
在Hibernate Validate中,校验注解是直接添加在参数的定义之前,用于描述该参数的校验规则;也即是,校验注解是对接口参数设置的,与接口参数相关联。作为例子,通过以下
表1示出相关技术中的校验方案:
表1
首先请见上述表1中的第二行,在该示例中,RequestEntity类有三个属性:ID、memo和ids。通过在属性上添加相应的注解,即可指定校验规则。其中注解的含义如下:
@NotNull注解用于校验参数是否非空;即参数的空值校验。
@Size注解用于校验参数的大小范围;@Size是参数的一种非空值校验;实际应用中非空值校验可以有很多种,此处为了示例方便,仅以一种为例进行说明。
由此可知,在Hibernate Validate中是对参数添加注解,一个参数可能既需要进行空值校验也需要进行非空值校验。例如上述例子中参数memo和参数ids既有空值校验注解也有非空值校验注解。在参数校验过程中会把参数的空值校验和非空值的校验合并在一起。具体的,其按照类定义中参数的顺序,校验流程的顺序是:
①对调用请求中的ID校验非空;
②对调用请求中的memo校验非空;
③对memo校验大小范围;
④对ids校验非空;
⑤对ids校验大小范围。
可以理解,空值校验只需要检查参数的参数值是否为空即可,而非空值校验则可能涉及较多复杂的逻辑,例如可能会检查参数的参数值是否满足一个或多个设定条件,这涉及更多的比较或计算等操作。因此,对参数进行非空值校验的处理效率,通常会低于参数的空值校验的处理效率。
Hibernate Validate中将一个参数的空值校验和非空值的校验合并在一起的方式,其结束校验的效率较低。以接口方法的参数包括上述的RequestEntity类为例,若调用请求中ids的参数值是空值,按照校验流程中各参数的校验顺序,在执行到步骤④的ids的空值校验时,由于ids的空值校验不通过,因此会结束校验,该调用请求因未通过校验而无需执行接口方法。
此处的校验效率具有提升的空间。从校验流程可以看出,在执行到步骤④的ids的空值校验时之前,需要先进行步骤③的memo的大小范围的非空值校验,而非空值校验的校验速度会慢于空值校验,如果能将步骤④的ids的空值校验,安排在步骤③的memo的大小范围的非空值校验之前,则可以更快地结束校验,提升校验处理效率。
并且,由于参数既要进行空值校验又要进行非空值校验,在一些场景下可能还会导致接口参数中一些参数无法被不同接口复用的问题。例如,请见上述表1中第一行和第三行定义的两个接口方法:接口方法update和接口方法insert;
对于接口方法update而言,其参数的校验需求是:对RequestEntity类中属性ID进行空值校验,以及分别对属性memo和属性ids进行空值校验和非空值校验;为了满足上述需求,在定义RequestEntity类的代码中,在三个属性的定义中均设置了校验注解:
其中,属性ID标记了一个用于进行空值校验的注解@NotNull,表示调用update接口的请求中属性ID的属性值不能为空;
属性memo标记了两个注解,@NotNull用于对memo进行空值校验,表示调用update接口的请求中属性memo的属性值不能为空;@Size用于对memo进行非空值校验,表示调用update接口的请求中属性memo的属性值的最大值不能超过10;
属性ids也同理。
对于接口方法insert而言,实际上它的接口参数理论上也可以是上述的RequestEntity类。然而,存在接口方法insert的参数校验需求,与接口update的参数校验需求之间可能会有冲突的情况。例如,接口方法insert可能仅需要对RequestEntity类中的属性ID进行空值校验即可,属性memo和属性ids均无需进行空值校验,这意味着调用insert接口方法的调用请求中可以不携带RequestEntity类中属性memo和属性ids的属性值,也意味着定义RequestEntity类的代码中属性memo和属性ids无需标记空值校验注解。
如此,产生的冲突即:
(1)接口方法update需要对属性memo和ids进行空值校验和非空值校验,需要在定义RequestEntity类的代码中为属性memo和ids添加校验注解;
(2)接口方法insert无需对属性memo和ids进行空值校验,不需要在定义RequestEntity类的代码中为属性memo和ids添加空值校验注解。
为了解决该冲突问题,一种方案就是放弃对参数RequestEntity的复用,如上面表1中第一行和第三行示出的,在update的接口中引入上述接口参数RequestEntity类,而在insert接口下则引入另一个接口参数,表1中的示例为RequestEntity_new类,表1中第四行即增加的RequestEntity_new类的定义,实际上这两个类,RequestEntity类和RequestEntity_new类的属性是一致的。
如此,update的接口中,接口参数UpdateError类的属性memo和ids可以标注空值校验和非空值校验,而insert接口下接口参数UpdateError_new类的属性memo和ids可以不标注空值校验。
另一种解决方案中,为了实现两个接口对参数RequestEntity类的复用,可以在RequestEntity_new类的定义中,对属性memo和ids不标注空值校验;但是需要在update接口方法的定义中用硬编码的方式实现对属性memo和ids的空值校验,也即是在update接口方法的定义中,编写用于对参数memo和ids进行空值校验的代码。如此,则存在硬编码方案的缺陷。
基于此,本说明书实施例提供了一种接口参数校验方案,首先通过下面的表2先进行简单说明:
表2
表2中的第一行和第三行分别是接口方法update和接口方法insert的定义,将不再采用对接口方法中包含的参数单独进行注解的方式,而是采用对接口方法整体进行空值注解的方式,表2中以“@EmptyParamCheck(参数表达式)”作为注解信息一个示例。其中,两个接口方法复用了同一个RequestEntity类作为接口方法的参数,接口方法添加了包含用于对接口方法进行空值校验的参数表达式:
表中接口方法update以“{"RequestEntity.ID","RequestEntity.memo","RequestEntity.ids"}”作为一个示例,表示RequestEntity类的三个属性ID、memo和ids作为被空值校验的参数;
表中接口方法insert以“{"RequestEntity.ID"}”作为一个示例,表示RequestEntity类的属性ID作为被空值校验的参数。
一方面,本实施例通过为接口方法添加包含用于对接口方法进行空值校验的参数表达式,可以在对接口方法包含的参数进行校验时,先从接口方法包含的注解信息中解析出上述参数表达式,再利用该参数表达式对该接口方法包含的参数进行空值校验,在通过空值校验后,再结合额外的规则对该接口方法包含的参数进行非空值校验,从而可以将空值校验和非空值校验两种校验流程独立开来,先进行空值校验再进行非空值校验,有助于提升对接口方法包含的参数进行校验的校验效率。
另一方面,相关方案中采用对接口方法中包含的参数单独进行注解的方式,当不同接口方法复用相同参数时,有些接口方法需要对该参数进行空值校验,但有些接口可能不需要对参数进行空值校验,如此可能存在不同接口方法对相同参数的空值校验需求具有冲突的问题,从而导致该参数无法被不同接口方法复用。因此,通过为接口方法添加包含用于对接口方法进行空值校验的参数表达式,被复用的接口参数,在一个接口方法下需要被空值校验,则添加在该接口方法的空值校验的参数表达式中即可;在其他接口方法下不需要被空值校验,则无需添加在空值校验的参数表达式中。因此这种注解方式还可以提升被校验参数被其它接口方法复用的复用率。
接下来对本实施例方案进行详细说明。
本实施例中,在程序源码中可以为待校验的接口定义的接口方法携带预设的注解信息;接口方法可以包含至少一个接口参数,注解信息可以包含用于对接口方法包含的接口参数进行空值校验的参数表达式,参数表达式可以指示指定的待校验的目标接口参数。
本实施例中,接口方法包含的接口参数即接口方法的入参,接口参数可以有一个或多个;参数表达式中指定的待校验的目标接口参数,可以是接口方法包含的全部或部分接口参数。待校验的目标接口参数可以是由开发人员指定的。
其中,注解(Annotation)是编程语言中用于提供元数据的特殊语法结构,可以被应用于类、方法、变量和其他程序元素,用于向编译器、工具或运行时环境提供额外的信息。注解通过在代码中添加特定的注解标记,并使用预定义或自定义的注解类型来表示。注解不会直接影响程序的执行,但可以被编译器和工具用于生成代码、验证代码的正确性或执行特定的操作。此处的编程语言可以包括Java或Python等支持注解的语言。
以Java语言为例,如下示出了本实施例中注解信息的一种实现方式:
@EmptyParamCheck({"RequestEntity.ID","RequestEntity.memo","RequestEntity.ids"})”
public Result<?>update(UpdateError request)
{
……
}
上述例子中涉及一个名为update接口的接口方法。在Java语言中注解采用符号“@”表示,且注解信息标注在接口方法的定义之前。上述例子中,注解信息即“@EmptyParamCheck({"RequestEntity.ID","RequestEntity.memo","RequestEntity.ids"})”,其中“EmptyParamCheck”表示本实施例的用于空值校验的注解的注解名称,该名称在实际应用中可以根据需要灵活进行配置,本实施例对此不进行限定。该注解的开发包(如编译后的产物)需要引入至程序源码中。
“{"RequestEntity.ID","RequestEntity.memo","RequestEntity.ids"}”即参数表达式,其指示了指定的待校验的目标接口参数;该例子中,用参数表达式被大括号包围,每个接口参数被一个双引号包围,各个接口参数之间采用逗号进行分隔。实际应用中,其他参数表达式的具体表示方式可以基于所使用的编程语言、框架或工具等并根据需要进行灵活的调整,本实施例对此不进行限定。
本实施例中,程序源码中待校验的接口可以有多个,源码中为不同待校验的接口定义的接口方法可以携带相同的预设注解的注解名称,但参数表达式则可以基于接口方法的实际接口参数根据需要进行配置。
由于本实施例是对接口方法配置了预设的注解信息,通过注解信息来指定该接口方法中需要进行空值校验的目标接口参数,相对于已有技术在接口参数定义时对接口参数配置空值校验注解和/或非空值校验注解,本实施例可以在校验过程中将空值校验和非空值校验独立开来。校验过程可以如图1所示,包括如下步骤:
步骤102、拦截针对接口方法的调用请求。
步骤104、响应于拦截到的针对接口方法的调用请求,获取接口方法携带的注解信息,并从调用请求中解析出注解信息中的参数表达式中所指示的各个目标接口参数的参数值。
步骤106、校验解析出的各个目标接口参数的参数值是否为空值,若所述各个目标接口参数的参数值都不为空值,进一步针对从调用请求解析出的参数值进行非空值校验。
本实施例的校验流程可以是在程序运行过程中执行,当程序接收到调用接口方法的调用请求后,可以先对指定参数进行校验,根据校验结果再确定是否需要执行接口方法。针对步骤102,一些编程语言的开发工具提供有拦截器实现对调用请求的拦截。以Java为例,可以使用Spring框架的AOP(面向切面编程)来实现拦截。具体的,可以通过创建一个切面类,切面类的切点配置了预设注解对应的类在程序中的全路径。如此,切面类中切点指定了需要拦截的带有“预设注解的注解名称”的接口方法,切面类和接口方法实现了关联,通过切面类可以拦截针对接口方法的调用请求。其他编程语言,如Python,可以利用Django框架中的中间件来拦截请求。不同编程语言和框架可能提供了不同的拦截机制,可以根据实际应用场景灵活实现,本实施例对此不进行限定。
程序源码中的注解信息可以被编译器保留,针对步骤104,在程序运行时可以访问和解析接口方法包含的注解信息,例如,可以通过反射等方式实现。如此,可以得到注解信息中的参数表达式。
接口方法的定义可以包括方法名、参数列表和返回类型等。参数列表指定了调用该方法时需要传递的参数信息,包括参数名称和参数类型。当调用该接口方法时,调用请求需要按照接口方法定义的参数列表来提供参数值,确保传递的参数类型和数量与接口方法一致。因此,通过调用请求可以解析出与接口方法定义的参数列表中所有接口参数一致的参数值。
如此,可以根据参数表达式中所指示的目标接口参数,进一步可以从调用请求中解析出目标接口参数的参数值,从而可以执行后续的校验步骤。
其中,由于接口方法携带注解信息,并且通过参数表达式指定待校验的接口参数,因此可以将空值校验和非空值校验接口,两者可以解耦并单独执行,并且不同接口方法可以复用相同参数。如前述的update接口和insert接口可以复用相同参数RequestEntity实体类,针对update接口的空值校验需求,在参数表达式中指定待校验的目标接口参数为RequestEntity实体类包含的三个属性,针对insert接口的空值校验需求,在参数表达式中指定待校验的目标接口参数为RequestEntity实体类中的ID属性。
在一些例子中,参数表达式可以指示指定的待校验的目标接口参数的参数名称,作为一个例子:
@EmptyParamCheck({"name","address"})
void myMethod(String name,int age,String address);
上述例子中,myMethod这个接口方法里的参数列表包括3个参数,名称分别为name、age和address;在注解信息中参数表达式“{"name","address"}”中指示了待校验的接口参数的参数名称。
如此,根据参数表达式中指示的目标接口参数,从调用请求中解析出目标接口参数的参数值时,根据参数表达式指示的目标属性的属性名称,可以从调用请求中解析出与目标属性的属性名称对应的属性值。
上述例子中,参数表达式中采用接口参数的名称来指示目标接口参数,为了简化参数表达式,提升开发人员编写参数表达式的编写效率,在一些例子中,接口方法的接口参数的类型为基本类型,参数表达式包括:目标接口参数在接口方法的参数列表中的目标位置;
根据参数表达式中指示的目标接口参数,从调用请求中解析出目标接口参数的参数值,包括:
根据参数表达式包括的目标接口参数在接口方法的参数列表中的目标位置,从调用请求中解析出与目标位置对应的接口参数的参数值。
在编程语言中,基本类型(Primitive Types)指的是具有固定大小和默认值的数据类型,其代表参数值是单个的数据值,而不是对象或复杂的数据结构。例如,在Java中,int是一种基本类型。当声明一个int类型的参数时,它只能存储整数值,而无法拥有更复杂的结构或子属性。基本类型的参数只能表示固定大小和默认值的数据,没有额外的属性或方法可用于访问或修改其内部结构。
在大多数编程语言中,基本类型包括以下几种常见类型:
1.整数类型(Integer Types):如整数(int)、长整数(long)、短整数(short)、字节(byte)等。
2.浮点数类型(Floating-Point Types):如浮点数(float)、双精度浮点数(double)等。
3.布尔类型(Boolean Type):表示真值的类型,通常为true或false。
4.字符类型(Character Type):表示单个字符,如字符(char)。
5.其他基本类型:某些语言还可能提供其他基本类型,如十六进制数或二进制数等。
基于此,对于接口方法中类型为基本类型的接口参数,本实施例在参数表达式中采用目标接口参数在接口方法的参数列表中的目标位置来指示目标接口参数,如此开发人员可以更简便地指定目标接口参数。作为例子:
@EmptyParamCheck({0,2})
void myMethod(String name,int age,String address);
myMethod这个接口方法里的参数列表包括3个参数,通过0和2表示来表示接口方法里的name和address是要校验的参数。此处实施例采用数字来表示位置,实际应用中也可以根据需要配置其他方式,本实施例对此不进行限定。
实际应用中,上述两个实施例还可以根据需要结合使用。例如,参数表达式中指示多个目标接口参数,一些目标接口参数采用目标位置表示,一些目标接口参数采用参数名称表示,本实施例对此不进行限定。
上述接口方法myMethod的接口参数的定义可以包含于接口方法的定义或独立于接口方法的定义,在一些例子中,程序为基于面向对象编程语言的程序;接口方法的接口参数的类型为实体类,实体类包括一个或多个属性;实体类的定义独立于接口方法的定义。
参数表达式指示:实体类的一个或多个属性中待校验的各个目标属性的属性名称。
根据参数表达式中指示的目标接口参数,从调用请求中解析出目标接口参数的参数值,可以包括:
根据参数表达式指示的各个目标属性的属性名称,从调用请求中解析出与各个目标属性的属性名称对应的属性值。
接口方法的参数类型可以是面向对象编程语言中的实体类。实体类(EntityClass)是一种表示具体对象的数据模型,通常包含属性(字段)和相关方法。在接口方法中,可以使用实体类作为参数类型来传递对象的实例。
请见如下示例:
void saveUser(User user);
在这个示例中,接口方法名为“saveUser”,它接受一个名为“user”的参数,参数类型为“User”实体类。在“User”实体类的定义中,定义了该实体类包括如下两个属性name和age,用于表示用户对象的信息。若这3个属性作为目标接口参数,则参数表达式中需要指示User下的这三个属性的属性名称,一个实现方式可以是:
{"User.name",User.age"}。
如此,可以根据参数表达式指示的目标属性的属性名称,从调用请求中解析出与目标属性的属性名称对应的属性值。
上述实施例中接口方法的接口参数的类型可以是实体类,而实体类中的某个属性也可以是实体类,如此,实体类的属性会包括一层或多层嵌套子属性。例如:
假设接口方法Method包括如下三个参数:ID、Person、Email;其中,参数Person的类型是实体类;
该Person类包括如下属性:name和address;其中,该address的类型也是实体类;
该address类包括如下属性:street、city和postalCode。
假设待校验的目标接口参数包括name、street和city,参数表达式的一种实现方式可以是:
{"Person.name","Person.address.street","Person.address.city"}.
实际上,此处参数表达式中每个属性的描述,也表示了每个属性的属性访问路径。属性访问路径是按照对象层级结构,从外层对象到内层对象依次访问属性的路径。例如"Person.address.city"表示通过属性的属性访问路径,从调用请求中获取Person对象中address属性的city属性的属性值。
为了简化参数表达式,在一些例子中,如果接口方法的接口参数中包含具有共同父属性的多个子属性,参数表达式中可以采用如下方式指示具有共同父属性的待校验的多个目标子属性:
将父属性的属性名称作为前缀,在父属性的属性名称之后,采用成对的标识符,包围多个目标子属性中的各个目标子属性的属性名称。
如上述实施例中,属性name和属性address具有共同父属性Person,而属性street具有共同父属性address,在参数表达式中描述这三个属性时,可以将父属性的属性名称抽离出来,作为例子,一种实现可以是:
上述例子中,以父属性的属性名称Person作为前缀,在父属性的属性名称Person之后,采用一对花括号“{}”作为成对的标识符,该标识符包围了父属性Person下的子属性name和子属性address。当然,实际应用中,还可以采用其他成对的标识符,例如一对圆括号“()”、一对方括号“[]”、一对单引号或一对双引号等等,本实施例对此不进行限定。
同理,对于父属性address下的两个子属性,以父属性的名称address作为前缀,也采用一对花括号作为成对的标识符,该标识符包围了父属性address下的子属性street和子属性city。
如此,相对于上一种实现方式,参数表达式中父属性的属性名称只需要编写一次即可,对于需要在参数表达式中指定多个具有共同父属性的子属性的情况,可以提升开发人员编写参数表达式的效率。
对于上述经过简化的参数表达式,在根据参数表达式指示的目标属性的属性名称,从调用请求中解析出与目标属性的属性名称对应的属性值时,可以基于简化的参数表达式还原出各个子属性的属性访问路径,例如可以从参数表达式中获取成对的标识符内包围的具有共同父属性的多个目标子属性中的各个目标子属性的属性名称,并在获取到的各个目标子属性的属性名称之前添加父属性的属性名称作为前缀,以生成与多个目标子属性中的各个目标子属性对应的属性访问路径;根据与多个目标子属性中的各个目标子属性对应的属性访问路径,从调用请求中解析出与多个目标子属性中的各个目标子属性的属性名称对应的属性值。如此,可以通过简化的参数表达式还原出各个目标子属性的属性访问路径,进一步从调用请求中解析出对应的属性值。
在一些例子中,实体类的属性中可以包括:可存储多个元素的属性;
对于可存储多个元素的目标属性,参数表达式中目标属性的属性名称可以携带特定标识符,以指示目标属性可存储多个元素;
根据所述参数表达式指示的目标属性的属性名称,从所述调用请求中解析出与所述目标属性的属性名称对应的属性值,可以包括:
若从所述参数表达式中解析到目标属性的属性名称携带所述特定标识符,从所述调用请求中解析出所述目标属性的元素数量n,并根据所述目标属性的属性名称生成所述目标属性的n个元素中各个元素的属性访问路径;
根据所述目标属性的n个元素中各个元素的属性访问路径,从所述调用请求中解析出与所述目标属性的n个元素中各个元素的属性值。
本实施例中,可存储多个元素的目标属性的类型,可以包括列表List类型或数组Array类型等,这些类型的属性可以存储多个元素,这些元素的具体类型不进行限定。
例如有如下实体类的定义:
其中,Result类包含有:
data:类型为Data的属性,用于存储数据对象。
Data类型是Result类的静态内部类,包括如下子属性:
list:类型为List<Address>的属性,用于存储地址对象的列表。其中,List下的元素的类型为实体类Address。
name:类型为String的属性。
Address类是Result类的静态内部类,包括如下子属性:
address:类型为String的属性。
校验需求是针对data类的name属性和data类list属性中Address类的address属性进行空值校验;由于list属性是列表List类型,该list属性可以存储多个元素,此处的元素具体是实体对象,也即是,list中的元素都是一个个的实体对象,address是list中每个元素(实体对象)的属性。如此调用请求中就可以携带一个或多个元素。
如此,本实施例中参数表达式对于data下list属性Address类中的address属性,可以采用“data.list[*].address”来指示要校验调用请求中每个Address类中的address属性。其中特定标识符采用“[*]”实现,表示获取调用请求中目标属性的所有元素。实际应用中还可以采用其他的特定标识符,本实施例对此不进行限定。
如此,可以从调用请求中解析出目标属性包括的元素数量n,根据目标属性的属性名称生成所述目标属性的n个元素中各个元素的属性访问路径,根据目标属性的n个元素中各个元素的属性访问路径,从调用请求中解析出与目标属性的n个元素中各个元素的属性值;例如,假设从调用请求中目标属性包括的元素数量为2,即n=2,则可以生成如下两个属性访问路径:
data.list[0].address和data.list[1].address
data.list[0].address表示访问list属性中索引为0(即第一个)的元素的属性值;具体的,此处该元素是实体类,进一步可访问该元素中的address属性。
同样的,data.list[1].address表示访问list属性中索引为1(即第二个)的元素的属性值,同理进一步可访问该元素中的address属性。
本实施例还可以同前述的参数表达式的简化实施例相结合,如图2所示,①和②表示两种参数表达式的实现,①中示出了本实施例的采用特定标识表示目标属性包含多个元素,②中进一步将父属性的属性名称“data”作为前缀,示出了对①的参数表达式的简化;③则表示用于从调用请求中解析出各个属性的属性访问路径。
在一些例子中,本实施例方法还可以包括:若校验出其中一个目标接口参数的参数值为空值,结束校验并输出空值校验异常。
通过本实施例,由于先执行空值校验再执行非空值校验,一旦有一个目标接口参数的参数值为空值时,即可结束校验,输出空值校验异常;因此,对于一个调用请求而言,如果其携带的参数无法通过空值校验,则无需继续执行该调用请求调用的接口方法,从而可以提升校验效率。在所有目标接口参数的参数值都通过空值校验后,再进行非空值校验。
其中,进行非空值校验的接口参数,可以根据实际需要进行指定,可以是调用请求中携带的全部或部分接口参数,可以与空值校验的接口参数相同或不同,本实施例对此不进行限定。非空值校验的实现可以参考已有技术的方案,例如前述的,将非空值校验的注解配置在接口参数的定义中。由于要进行空值校验的接口参数已经配置在前述的参数表达式中,则接口参数的定义中可以未包含已有技术中对接口参数的空值校验注解;当然,在接口参数的定义中包含已有技术的对接口参数的空值校验注解根据需要也是可行的,这并不影响本实施例方案的实现。
进一步的,如果有某个指定的接口参数未通过非空值校验,同样可以结束校验,无需执行接口方法。若从调用请求解析出的参数值都通过非空值校验后,输出校验通过消息,以基于调用请求执行接口方法。
由上述实施例可见,通过为接口方法添加包含用于对接口方法进行空值校验的参数表达式,可以在对接口方法包含的参数进行校验时,先从接口方法包含的注解信息中解析出上述参数表达式,再利用该参数表达式对该接口方法包含的参数进行空值校验,在通过空值校验后,再结合额外的规则对该接口方法包含的参数进行非空值校验,从而可以将空值校验和非空值校验两种校验流程独立开来,先进行空值校验再进行非空值校验,有助于提升对接口方法包含的参数进行校验的校验效率。
另一方面,通过为接口方法添加包含用于对接口方法进行空值校验的参数表达式,被复用的接口参数,在一个接口方法下需要被空值校验,则将参数添加在该接口方法的空值校验的参数表达式中即可;在其他接口方法下不需要被空值校验,则无需添加在空值校验的参数表达式中。因此这种注解方式还可以提升被校验参数被其它接口方法复用的复用率。
与前述接口参数校验方法的实施例相对应,本说明书还提供了接口参数校验装置及其所应用的计算机设备的实施例。
本说明书接口参数校验装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本说明书接口参数校验装置所在计算机设备的一种硬件结构图,除了图3所示的处理器310、内存330、网络接口320、以及非易失性存储器340之外,实施例中接口参数校验装置331所在的计算机设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
如图4所示,图4是本说明书根据一示例性实施例示出的一种接口参数校验装置的框图,在程序源码中为待校验的接口定义的接口方法携带了预设的注解信息;接口方法包含至少一个接口参数,注解信息包含用于对接口方法包含的接口参数进行空值校验的参数表达式,参数表达式指示指定的待校验的目标接口参数;校验装置包括:
拦截模块41,用于:拦截针对接口方法的调用请求;
获取模块42,用于:响应于拦截到的针对接口方法的调用请求,获取接口方法携带的注解信息,并从调用请求中解析出注解信息中的参数表达式中所指示的目标接口参数的参数值;
校验模块43,用于:校验解析出的目标接口参数的参数值是否为空值,若各个目标接口参数的参数值都不为空值,进一步针对从调用请求解析出的参数值进行非空值校验。
在一些例子中,参数表达式指示待校验的至少一个目标接口参数的参数名称;
获取模块42,还用于:
根据参数表达式指示的待校验的至少一个目标接口参数的参数名称,从调用请求中解析出与各个目标接口参数的参数名称对应的参数值。
在一些例子中,程序为基于面向对象编程语言的程序;接口方法的接口参数的类型为实体类,实体类包括一个或多个属性;
参数表达式指示:实体类的一个或多个属性中待校验的目标属性的属性名称;
获取模块42,还用于:
根据参数表达式指示的待校验的各个目标属性的属性名称,从调用请求中解析出与各个目标属性的属性名称对应的属性值。
在一些例子中,实体类的属性中包括:一层或多层嵌套子属性;
如果接口方法的接口参数中包含具有共同父属性的多个子属性,参数表达式中采用如下方式指示具有共同父属性的待校验的多个目标子属性:
将父属性的属性名称作为前缀,在父属性的属性名称之后,采用成对的标识符,包围多个目标子属性中的各个目标子属性的属性名称;
获取模块42,还用于:
从参数表达式中获取成对的标识符内包围的具有共同父属性的多个目标子属性中的各个目标子属性的属性名称,并在获取到的各个目标子属性的属性名称之前添加父属性的属性名称作为前缀,以生成与多个目标子属性中的各个目标子属性对应的属性访问路径;
根据与多个目标子属性中的各个目标子属性对应的属性访问路径,从调用请求中解析出与多个目标子属性中的各个目标子属性的属性名称对应的属性值。
在一些例子中,实体类的属性中包括:可存储多个元素的属性;
对于可存储多个元素的目标属性,参数表达式中所述目标属性的属性名称携带特定标识符,以指示目标属性可存储多个元素;
获取模块42,还用于:
若从所述参数表达式中解析到目标属性的属性名称携带所述特定标识符,从所述调用请求中解析出所述目标属性的元素数量n,并根据所述目标属性的属性名称生成所述目标属性的n个元素中各个元素的属性访问路径;
根据所述目标属性的n个元素中各个元素的属性访问路径,从所述调用请求中解析出与所述目标属性的n个元素中各个元素的属性值。
在一些例子中,校验模块43,还用于:
若校验出其中一个目标接口参数的参数值为空值,结束校验并输出空值校验异常。
在一些例子中,校验模块43,还用于:
若从调用请求解析出的参数值都通过非空值校验后,输出校验通过消息,以基于调用请求执行接口方法。
上述接口参数校验装置中各个模块的功能和作用的实现过程具体详见上述接口参数校验方法中对应步骤的实现过程,在此不再赘述。
相应的,本说明书实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现前述接口参数校验方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行程序时实现接口参数校验方法实施例的步骤。
相应的,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现接口参数校验方法实施例的步骤。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例可以应用于一个或者多个计算机设备中,计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,计算机设备的硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital SignalProcessor,DSP)、嵌入式设备等。
所述计算机设备可以是任何一种可与用户进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
所述计算机设备还可以包括网络设备和/或用户设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(CloudComputing)的由大量主机或网络服务器构成的云。
所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该申请的保护范围内。
其中,“具体示例”、或“一些示例”等的描述意指结合所述实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本说明书的其它实施方案。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书的范围仅由所附的权利要求来限制。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

Claims (10)

1.一种接口参数校验方法,在程序源码中为待校验的接口定义的接口方法携带了预设的注解信息;所述接口方法包含至少一个接口参数,所述注解信息包含用于对所述接口方法包含的接口参数进行空值校验的参数表达式,所述参数表达式指示待校验的至少一个目标接口参数;所述校验方法包括:
拦截针对所述接口方法的调用请求;
响应于拦截到的针对所述接口方法的调用请求,获取所述接口方法携带的注解信息,并从所述调用请求中解析出所述注解信息中的参数表达式中所指示的各个目标接口参数的参数值;
校验解析出的所述各个目标接口参数的参数值是否为空值,若所述各个目标接口参数的参数值都不为空值,进一步针对从所述调用请求解析出的参数值进行非空值校验。
2.根据权利要求1所述的方法,所述参数表达式指示待校验的至少一个目标接口参数的参数名称;
所述从所述调用请求中解析出所述注解信息中的参数表达式中所指示的各个目标接口参数的参数值,包括:
根据所述参数表达式指示的待校验的至少一个目标接口参数的参数名称,从所述调用请求中解析出与所述各个目标接口参数的参数名称对应的参数值。
3.根据权利要求1所述的方法,所述程序为基于面向对象编程语言的程序;所述接口方法的接口参数的类型为实体类,所述实体类包括一个或多个属性;
所述参数表达式指示:所述实体类的一个或多个属性中待校验的各个目标属性的属性名称;
所述从所述调用请求中解析出所述注解信息中的参数表达式中所指示的各个目标接口参数的参数值,包括:
根据所述参数表达式指示的待校验的各个目标属性的属性名称,从所述调用请求中解析出与所述各个目标属性的属性名称对应的属性值。
4.根据权利要求3所述的方法,所述实体类的属性中包括:一层或多层嵌套子属性;
如果所述接口方法的接口参数中包含具有共同父属性的多个子属性,所述参数表达式中采用如下方式指示具有共同父属性的待校验的多个目标子属性:
将所述父属性的属性名称作为前缀,在所述父属性的属性名称之后,采用成对的标识符,包围所述多个目标子属性中的各个目标子属性的属性名称;
所述根据所述参数表达式指示的目标属性的属性名称,从所述调用请求中解析出与所述目标属性的属性名称对应的属性值,包括:
从所述参数表达式中获取所述成对的标识符内包围的具有共同父属性的多个目标子属性中的各个目标子属性的属性名称,并在获取到的各个目标子属性的属性名称之前添加所述父属性的属性名称作为前缀,以生成与所述多个目标子属性中的各个目标子属性对应的属性访问路径;
根据与所述多个目标子属性中的各个目标子属性对应的属性访问路径,从所述调用请求中解析出与所述多个目标子属性中的各个目标子属性的属性名称对应的属性值。
5.根据权利要求3所述的方法,所述实体类的属性中包括:可存储多个元素的属性;
对于可存储多个元素的目标属性,所述参数表达式中所述目标属性的属性名称携带特定标识符,以指示所述目标属性可存储多个元素;
所述根据所述参数表达式指示的目标属性的属性名称,从所述调用请求中解析出与所述目标属性的属性名称对应的属性值,包括:
若从所述参数表达式中解析到目标属性的属性名称携带所述特定标识符,从所述调用请求中解析出所述目标属性的元素数量n,并根据所述目标属性的属性名称生成所述目标属性的n个元素中各个元素的属性访问路径;
根据所述目标属性的n个元素中各个元素的属性访问路径,从所述调用请求中解析出与所述目标属性的n个元素中各个元素的属性值。
6.根据权利要求1所述的方法,所述方法还包括:
若校验出其中一个所述目标接口参数的参数值为空值,结束校验并输出空值校验异常。
7.根据权利要求1所述的方法,所述方法还包括:
若从所述调用请求解析出的参数值都通过非空值校验后,输出校验通过消息,以基于所述调用请求执行所述接口方法。
8.一种接口参数校验装置,在程序源码中为待校验的接口定义的接口方法携带了预设的注解信息;所述接口方法包含至少一个接口参数,所述注解信息包含用于对所述接口方法包含的接口参数进行空值校验的参数表达式,所述参数表达式指示待校验的至少一个目标接口参数;所述校验装置包括:
拦截模块,用于:拦截针对所述接口方法的调用请求;
获取模块,用于:响应于拦截到的针对所述接口方法的调用请求,获取所述接口方法携带的注解信息,并从所述调用请求中解析出所述注解信息中的参数表达式中所指示的各个目标接口参数的参数值;
校验模块,用于:校验解析出的所述各个目标接口参数的参数值是否为空值,若所述各个目标接口参数的参数值都不为空值,进一步针对从所述调用请求解析出的参数值进行非空值校验。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现权利要求1至7任一所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至7任一所述方法的步骤。
CN202310962172.6A 2023-08-01 2023-08-01 接口参数校验方法、装置、设备及存储介质 Pending CN117234517A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310962172.6A CN117234517A (zh) 2023-08-01 2023-08-01 接口参数校验方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310962172.6A CN117234517A (zh) 2023-08-01 2023-08-01 接口参数校验方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN117234517A true CN117234517A (zh) 2023-12-15

Family

ID=89097375

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310962172.6A Pending CN117234517A (zh) 2023-08-01 2023-08-01 接口参数校验方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN117234517A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117707653A (zh) * 2024-02-06 2024-03-15 天津医康互联科技有限公司 参数监控方法、装置、电子设备及计算机可读存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117707653A (zh) * 2024-02-06 2024-03-15 天津医康互联科技有限公司 参数监控方法、装置、电子设备及计算机可读存储介质
CN117707653B (zh) * 2024-02-06 2024-05-10 天津医康互联科技有限公司 参数监控方法、装置、电子设备及计算机可读存储介质

Similar Documents

Publication Publication Date Title
CN107704265B (zh) 一种面向业务流可配置的规则生成方法
US20240168735A1 (en) System and method for compiling high-level language code into a script executable on a blockchain platform
US10324909B2 (en) Omega names: name generation and derivation utilizing nested three or more attributes
Beazley Python essential reference
CN107644323B (zh) 一种面向业务流的智能审核系统
US7849509B2 (en) Detection of security vulnerabilities in computer programs
US10083016B1 (en) Procedurally specifying calculated database fields, and populating them
US9575736B2 (en) Advanced interactive command-line front-end for graph analysis systems
US9860063B2 (en) Code analysis tool for recommending encryption of data without affecting program semantics
CN107924326A (zh) 对经更新的类型的迁移方法进行覆盖
US10552127B2 (en) Method and system for developing relation-context specific software applications
US11398911B1 (en) System for interacting objects as tokens on a blockchain using a class-based language
Sangiorgi et al. Environmental bisimulations for probabilistic higher-order languages
CN111522558B (zh) 基于Java的动态配置规则的方法、装置、系统和可读介质
US20160203011A1 (en) Data transfer guide
CN117234517A (zh) 接口参数校验方法、装置、设备及存储介质
US8091069B2 (en) Module specification language and meta-module
Wu et al. Foundational proof checkers with small witnesses
US11275625B2 (en) System and method for automated application programming interface generation
US10049030B2 (en) System and method for test output evaluation of a JAVA component
US9898467B1 (en) System for data normalization
US20140215433A1 (en) Class oriented file format for modeling and persisting bpmn scripting code
Kuć et al. Elasticsearch Server
US10719424B1 (en) Compositional string analysis
US11144287B2 (en) Compile time validation of programming code

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