接口注册、执行方法、装置和管理系统与流程

未命名 07-23 阅读:83 评论:0


1.本发明涉及计算机技术领域,尤其涉及一种接口注册、执行方法、装置和管理系统。


背景技术:

2.系统研发成果进行共享最主流的方式就是将研究的成果发布成服务,其他系统研发可以通过调用服务的方式来复用这个功能。这也是软件即服务(saas,software-as-a-service)以及平台即服务(paas,platform as a service)的核心思想。这些服务的本质是可以满足一个个功能的接口。很多时候系统研发所做的最核心的事情,就是开发一个个功能接口,供其他研发人员调用,这是很多互联网企业主流的研发模式。
3.目前,功能接口的研发往往是针对项目进行的。例如要研发一个新的功能接口,往往需要创建一个项目或者在一个已有的项目上创建一个分支,开发相应的代码,然后对整个项目进行编译打包、部署,发布到集群环境中。所谓的接口研发,背后往往是一个个项目的研发。
4.在实现本发明的过程中,本发明的发明人发现现有基于项目的接口开发管理方法存在以下问题:
5.第一、基于项目的方式研发、管理、维护接口,使得接口的研发变成了项目的研发,增加了研发的工作量和技术复杂度,增加了接口研发和调试的时间成本。项目的上线往往需要编译,打包,部署等操作,所以基于项目的接口管理维护往往也需要做这些事情,一个接口的一点点改动,或者新增一些接口,都要对整个项目进行重新编译,打包和部署。如果这个项目比较大,那么可能需要花费很长的编译和部署时间,并且每一次编译项目需要消耗很多的系统资源。研发提交一段接口的代码有时候需要很长的时间,才能发布到线上看到效果。当一些接口研发不能在本地调试,需要很长时间才能发布到线上,当遇到一些问题的时候,那么会大大提升调试这个接口的时间。
6.第二、接口之间的耦合度大,接口的新增和修改容易引入新的问题。不仅如此,很多接口的新增和修改,都要涉及项目的编译和打包,有些时候本地可以执行成功,而线上的代码却编译不过,因为本地的环境和线上并不能保证完全一致。有些时候一些新的接口使用的技术框架与老的接口不兼容,这样就很难在一个项目中一起发布。
7.综上所述,基于项目的接口管理维护方式,使得接口的研发管理维护变成了项目的研发管理维护流程,这种模式让本来很简单的事情变得复杂化了,一个事情流程变得复杂了,那么就可能在各个流程和环节上出现各种问题,本质上就相当于提升了研发的成本,降低了服务的可靠性。


技术实现要素:

8.有鉴于此,本发明提供了一种接口注册、执行方法、装置和管理系统,降低接口研发的技术门槛,提升接口的研发效率,并降低接口管理的复杂度。
9.为实现上述目的,根据本发明的第一个方面,提供了一种接口注册方法。
10.本发明的接口注册方法包括:解析接口配置文件,以得到接口配置信息;根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器;确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册。
11.可选地,所述方法还包括:创建自定义类加载器,以通过所述自定义类加载器执行所述根据所述接口配置信息加载接口的实现类的步骤。
12.可选地,所述接口配置文件包括:主库文件配置项,用于配置当前接口文件使用的主库文件;引用接口文件配置项,用于配置当前接口文件引用的其他接口文件;以及,可执行文件配置项,用于配置当前接口文件的可执行文件;所述接口配置文件还包括:接口实现类包路径配置项,用于在通过注解的方式定义接口的情况下,配置接口实现类所在的包文件路径;和/或,接口实现类基本信息配置项,用于在通过配置的方式定义接口的情况下,配置接口实现类的基本信息;其中,所述接口实现类的基本信息包括:接口实现类的类名、以及所使用的方法名。
13.可选地,所述自定义类加载器包括:第一类加载器,用于加载主库文件配置项下配置的全部路径下的包文件;第二类加载器,继承于所述第一类加载器,用于加载引用接口文件配置项下配置的全部路径下的包文件;第三类加载器,继承于所述第二类加载器,用于加载可执行文件配置项下配置的全部路径下的包文件。
14.可选地,所述根据接口配置信息加载接口的实现类包括:调用第三类加载器加载可执行文件配置项下配置的全部路径下的包文件;在接口实现类包路径配置项不为空的情况下,扫描接口实现类包路径配置项配置的包文件路径下的全部类文件,以从中加载带有注解的类文件;在接口实现类基本信息配置项不为空的情况下,根据接口实现类基本信息配置项指定的接口实现类的基本信息加载接口的实现类。
15.可选地,所述接口唯一标识为接口的请求路由;所述将接口唯一标识和所述接口执行器对应存储包括:将所述接口的请求路由添加至路由树中;其中,所述路由树中所述请求路由对应的路径包含一个或多个结点,每个结点用于存储该请求路由所包含的对应级别的路由参数;在所述接口的请求路由对应的路径的末级结点存储相应的接口执行器。
16.为实现上述目的,根据本发明的第二个方面,提供了一种接口执行方法。
17.本发明的接口执行方法包括:响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数;所述请求参数包括:接口唯一标识;查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器;调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。
18.可选地,所述接口唯一标识为接口的请求路由;所述已注册的接口信息以路由树的形式存储;所述查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器包括:将所述接口的请求路由拆分成多个级别的路由参数,以得到由所述多个级别的路由参数构成的数组;根据所述数组在所述路由树中进行路径检索;在检索出所述请求路由对应的路径的情况下,从所述路径的末级结点中获取与所述接口调用请求的请求类型对应的接口执行器。
19.可选地,所述方法还包括:在从所述路由树中未检索出所述请求路由对应的路径,或者从所述请求路由对应的路径的末级节点获取不到与所述接口调用请求的请求类型对
应的接口执行器的情况下,从接口文件存储路径查找所述请求路由对应的接口文件,并将查询结果返回至所述用户端。
20.为实现上述目的,根据本发明的第三个方面,提供了一种接口注册装置。
21.本发明的接口注册装置包括:解析模块,用于解析接口配置文件,以得到接口配置信息;加载模块,用于根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器;注册模块,用于确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册。
22.为实现上述目的,根据本发明的第四个方面,提供了一种接口执行装置。
23.本发明的接口执行装置包括:解析模块,用于响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数;所述请求参数包括:接口唯一标识;查询模块,用于查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器;执行模块,用于调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。
24.为实现上述目的,根据本发明的第五个方面,提供了一种接口管理系统。
25.本发明的接口管理系统包括:接口注册装置,用于解析接口配置文件,以得到接口配置信息;所述接口注册装置还用于根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器;所述接口注册装置还用于确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册;接口执行装置,用于响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数;所述请求参数包括:接口唯一标识;所述接口执行装置还用于查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器;所述接口执行装置还用于调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。
26.为实现上述目的,根据本发明的第六个方面,提供了一种电子设备。
27.本发明的电子设备,包括:一个或多个处理器;以及,存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明的接口注册方法或接口执行方法。
28.为实现上述目的,根据本发明的第四个方面,提供了一种计算机可读介质。
29.本发明的计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明的接口注册方法或接口执行。
30.上述发明中的一个实施例具有如下优点或有益效果:在本发明实施例中,通过解析接口配置文件以得到接口配置信息,根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器,将接口唯一标识和所述接口执行器对应存储这些步骤,实现了接口的注册。与现有基于项目的接口研发方式相比,本发明的接口注册方法,大大简化了接口注册或者说接口发布的复杂度,降低了接口研发的技术门槛,提升了接口的研发效率。由于实现了针对接口粒度进行发布、管理和维护,使得接口的新增修改变化不会影响其他接口的功能,降低了接口之间的耦合度。
31.上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
32.附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
33.图1是本发明实施例可以应用于其中的示例性系统架构图;
34.图2是根据本发明第一实施例的接口注册方法的主要流程示意图;
35.图3是一种示例性的路由树示意图;
36.图4是根据本发明第二实施例的接口执行方法的主要流程示意图;
37.图5是根据本发明第三实施例的接口注册装置的主要模块示意图;
38.图6是根据本发明第四实施例的接口执行装置的主要模块示意图;
39.图7是根据本发明第五实施例的接口管理系统的主要模块示意图;
40.图8是适于用来实现本发明实施例的电子设备的计算机系统的结构示意图。
具体实施方式
41.以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
42.需要指出的是,在不影响本发明实施的情况下,本发明中的各个实施例以及实施例中的技术特征可以相互组合。
43.图1示出了可以应用本发明实施例的接口注册方法或接口执行方法或接口注册装置或接口执行装置或接口管理系统的示例性系统架构100。
44.用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用。
45.终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
46.服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的接口管理类平台提供支持的后台管理服务器。
47.需要说明的是,本发明实施例所提供的接口注册方法或接口执行方法一般由服务器执行,相应地,接口注册装置或接口执行装置一般设置于服务器中。
48.应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
49.第一实施例
50.图2是根据本发明第一实施例的接口注册方法的主要流程示意图。如图2所示,本发明实施例的接口注册方法包括:
51.步骤s201:解析接口配置文件,以得到接口配置信息。
52.在介绍接口配置文件之前,首先对接口文件进行说明。接口文件是指定义一些接口所需要的全部文件体系。接口文件主要包含了定义一个接口所需要的内容。接口文件包含了接口的配置文件、可执行文件、以及其他附加文件三种类型的文件。其中,接口的配置文件主要是以配置文件的方式描述了接口的基本信息,例如接口由哪个类的哪个方法实现,以及接口的唯一标识是什么等;可执行文件主要是定义接口的程序文件,主要包含了程
序jar包以及依赖的jar包等,可执行文件是运行的核心;其他附加文件是指除了可执行文件和接口配置文件之外的一些文件,用户可以根据需要,放置一些自己的文件。例如一些接口的研发需要访问一些数据,加载一些模型或者读取一些配置等,这些文件都可以作为附加文件存在于接口文件中。用户只需要根据接口的上下文路径,访问到相应的文件即可。
53.在一个可选实施方式中,为了方便维护,接口文件采用了与tomcat(tomcat是由apache软件基金会属下jakarta项目开发的servlet容器,可以作为单独的web服务器)中的web项目类似的结构,即将一个接口的所有文件全部放到一个目录下,这个目录的名字即为上下文,即用户发送http请求的根目录。例如,可将接口的配置文件放到上下文下的web-inf/web目录下,接口的可执行文件放到上下文下的web-inf/lib目录下,这种目录结构的设计和tomcat的web项目基本一致,只不过协议不同。这样维护起来看上去更加友好,使得熟悉web项目的人员很容易上手开发
54.接口配置文件是定义接口的核心内容,接口注册装置的实现依赖于接口配置文件。具体实施时,接口配置文件可采用xml(可扩展标记语言)文件格式。
55.在一个可选示例中,接口配置文件包括:主库文件配置项、引用接口文件配置项、可执行文件配置项、接口实现类包路径配置项、以及接口实现类基本信息配置项。
56.主库文件配置项,用于配置当前接口文件使用的主库文件。例如,主库文件配置项可命名为base-lib,用于指定当前接口文件使用的主库文件,主库文件是一个目录,主要存放一些通用的jar包,这些通用的jar包通常和技术领域有关,例如,某一个接口研发需要使用mybatis相关技术,那么可以把mybatis相关包放入该目录。具体实施时,可以让多个接口文件复用主库文件下的库文件,不需要把所依赖的jar包全部打入到接口文件,这样会更轻量化一些。当然不使用主库文件,而把全部的jar包都打入到接口文件也是可以的,只不过这样做,接口文件会大一些,不利于管理维护,而接口文件如果只包含接口执行最核心的jar包,这样会更轻量化一些。此外,在具体实施时,主库文件配置项base-lib可以有一个或多个。当指定了多个base-lib时,本质相当于把所有的base-lib加到了一起,作为一个整体。
57.引用接口文件配置项,用于配置当前接口文件引用的其他接口文件。例如,引用接口文件配置项可命名为ext-lib,该配置项主要用于当前接口文件引用其他接口文件的库文件,可以进一步提升库文件加载的灵活性。一般而言,该配置项可在接口文件存在依赖的时候使用,例如a团队开发了nlp领域相关的接口a,b团队想对a团队的研发成果做一些适配,研发新的接口b,这种情况,b团队并不需要把a团队研发的接口a的全部可执行文件都包含进来,只需要在接口配置文件中引用接口a的库文件即可。
58.可执行文件配置项,用于配置当前接口文件的可执行文件。例如,可执行文件配置项可命名为lib,主要用于定义当前接口文件的可执行文件路径。具体实施时,还可设置默认可执行文件路径。比如当用户不设置可执行文件的路径时,可从默认路径(比如默认路径为web-inf/lib)下查找可执行文件。
59.接口实现类包路径配置项,用于在通过注解的方式定义接口的情况下,配置接口实现类所在的包文件路径。例如,接口实现类包路径配置项可命名为base-package,主要定义了接口查找的包路径,这种方式主要是通过注解的方式定义接口。用户在实现一个接口类时,需要附加一些诸如httpservice等的注解,可以把某一个类的某一个方法定义为接口
类和方法。如果是以注解的方式定义的接口类,那么只需提供base-package参数即可,base-package参数告诉接口注册装置从哪个包去加载接口类。
60.接口实现类基本信息配置项,用于在通过配置的方式定义接口的情况下,配置接口实现类的基本信息,其中,所述接口实现类的基本信息包括:接口实现类的类名、以及所使用的方法名。例如,接口实现类基本信息配置项可命名为server-class,server-class是通过配置的方式去定义接口实现类,这种方式需要在接口配置文件中写明,接口由哪个类的哪个方法实现。另外,server-class中还可写明接口的唯一标识等信息。此外,在具体实施时,考虑到配置项base-package和配置项server-class均可用于定义接口信息,因此接口配置文件中包括配置项base-package和配置项server-class中的其中一个即可。
61.在另一个可选示例中,接口配置文件除了包括主库文件配置项、引用接口文件配置项、可执行文件配置项、接口实现类包路径配置项、以及接口实现类基本信息配置项之外,还包括文件下载路径配置项、全局参数列表配置项。
62.文件下载路径配置项,可命名为download,该配置项用于定义文件下载的路径,如果一个请求发送到了download配置项配置的路径下,将以文件下载的方式返回结果,用户在浏览器端可以下载这个文件。该配置主要提供了文件下载功能的支持,接口注册装置可根据这个配置项动态修改请求的请求头,增加一些参数,来实现下载功能。
63.全局参数列表配置项,可命名为param-list,该配置项用于定义一个全局参数列表,这些参数可以在上下文的缓存中访问,用户可以在实现接口类的时候访问这些参数。
64.在一个示例性场景中,响应于用户端的接口注册请求,接口注册装置开始执行图2所示接口注册方法流程。在接收到用户的接口注册请求后,接口注册装置访问接口配置文件,对接口配置文件进行解析,以得到接口配置信息。其中,所述接口配置信息包括各个接口配置项下配置的参数信息,比如server-class配置项下的参数信息等等。
65.在另一个示例性场景中,接口注册装置定时扫描指定目录下的接口文件,并对合法的接口文件进行加载,并按照图2所示流程进行注册。
66.在一个可选实施方式中,为了实现对接口文件版本的管控,给接口文件的文件名添加了时间戳和删除标志(比如删除标志位deleted)等后缀信息。具体来说,接口文件的文件名可采用诸如空格等分隔符进行分割,最开始的部分为接口上下文(context),接下来的部分为时间戳。其中,时间戳可以为用户上传接口文件时系统赋予的当前时刻的时间。另外,当用户删除一个接口文件时,可以在接口文件的文件名的后缀置为deleted,即在接口文件名所包含的上下文、时间戳之后添加删除标志“deleted”。在该可选实施方式中,可根据如下方式对合法的接口文件进行加载:扫描指定目录(比如指定目录为webapp)下的全部接口文件,把全部接口文件按照接口上下文(context)进行分类,然后排除带有删除标志的接口文件,再把每个类别下的接口文件按照时间戳进行排序,取该类别下时间戳最大的接口文件进行加载并注册。这样一来,只需扫描同一个上下文类别下的的全部接口文件(包含不同时间戳的和带有deleted标志的),即可查看同一个接口上下文的全部历史版本,可以对这些版本进行管理和维护,例如,可以把历史的某一个接口版本恢复到当前版本,以实现接口的回滚。
67.步骤s202:根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器。
68.可选地,在步骤s202之前,本发明实施例的方法还包括:创建自定义类加载器,以通过所述自定义类加载器根据所述接口配置信息动态加载接口的实现类,创建接口可执行器。
69.由于使用了动态加载,一来可以实现接口的热部署,即可以实现不对服务器进行重启便可以完成对接口的升级;二来类加载器之间可以实现执行代码的隔离。不同的接口文件是由不同的类加载器实现的,不同的接口文件执行代码是从类加载器层面进行隔离的。比如,一个接口文件使用的技术框架可能与另一个接口文件存在冲突,由于这两个接口文件是在加载器层面进行了隔离,所以执行时不会有任何问题。由于在加载器层面对代码进行了隔离,所以用户开发接口文件时,只需要考虑一个接口文件内部的库和依赖环境即可,不需要考虑与其他接口文件的关系。
70.在一个可选实施方式中,设计的自定义类加载器包括:最顶层的第一类加载器(又可称为base类加载器)、继承于第一类加载器的第二类加载器(又可称为ext加载器)、继承于第二类加载器的第三类加载器(又可称为接口文件类加载器)。也就是说,第一类加载器是第二类加载器的父加载器,第二类加载器是第三类加载器的父加载器。第一类加载器,用于加载主库文件配置项下配置的全部路径下的包文件;第二类加载器,用于加载引用接口文件配置项下配置的全部路径下的包文件;第三类加载器,用于加载可执行文件配置项下配置的全部路径下的包文件。
71.也就是说,第三类加载器主要用来加载接口文件中打包的jar包,而第一类加载器和第二类加载器是为了给接口文件减负的,可以将一些比较通用的jar包放在这些加载器中,从而让多个接口文件去复用,这样可以降低每一个接口文件的大小,不必在每一个接口文件中都打入相同的jar包。例如编写所有的接口文件可能都需要输出日志功能,那么可能每一个接口文件中都需要调用输出日志功能相关jar包,那么此时,可以把输出日志功能相关jar包放入到base类加载器中,这样每一个接口文件无需打包输出日志功能相关jar包了。
72.java虚拟机中加载一个新的类时,会从底层加载器去加载,如果没有找到,会尝试从其父加载器中加载,如果找不到继续从上一级加载器中尝试加载,直至成功加载;如果从顶层加载器也未找到,则抛出异常。按照这个加载逻辑,当第三类加载器和第一类加载器同时存在一个类的时候,那么会从第三类加载器中加载。
73.基于java虚拟机的类加载机制,上述可选实施方式设计的自定义类加载器具有如下优势:能够确保接口文件中提供的类具有更高的优先级,进而,当不清楚父加载器中是否存在一个jar包时,就可以把这个包打包进接口文件,这样确保执行不会有问题,不会发生找不到类文件(classnotfoundexception)的异常,最多就是父加载器中也存在这个jar包,然而会以子加载器中存在的jar包为准,另外当父加载器中的jar包和子加载器中的jar包的版本不一致时,也会以子加载器中的包为准。
74.示例性地,在步骤s202中,调用最底层的第三类加载器加载可执行文件配置项下配置的全部路径下的包文件,然后通过反射机制创建接口实例对象,并把相应的方法的调用封装形成接口执行器。具体来说,可通过以下两种方式加载接口的实现类:第一种方式为,在接口实现类包路径配置项不为空的情况下,扫描接口实现类包路径配置项配置的包文件路径下的全部类文件,以从中加载带有注解的类文件。与从全部的类文件中直接搜索
带有注解的类文件相比,通过预先在配置文件中的配置项base-package设置搜索的基础包,圈定一个搜索的范围,再通过扫描配置项base-package配置的基础包下的全部类文件,把带有注解的类文件找出来,大大提高了搜索带有注解的类文件的效率。第二种方式为,在接口实现类基本信息配置项不为空的情况下,根据接口实现类基本信息配置项指定的接口实现类的基本信息加载接口的实现类。
75.步骤s203:确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册。
76.在接口注册装置根据配置文件中的描述动态创建类加载器,加载相应的类,创建接口对象实例并把相应的方法的调用封装形成接口执行器之后,对创建的接口执行器和接口唯一标识进行对应存储。
77.示例性地,在步骤s203中,可从接口配置文件中解析出接口唯一标识。接口唯一标识如同一个接口的id,用来区分所调用的是哪一个接口。接口唯一标识本质上也是一种参数,只不过这个参数比较特殊,相当于一个接口的命名,用来唯一标识一个接口。接口唯一标识可通过多种方式定义,比如可以用一个请求参数名来定义。
78.在一可选实施方式中,采用请求路由作为接口唯一标识。请求路由可理解为请求的路径,该请求路径是多级的。例如,当http请求为“https://www.xiaohongshu.com/discovery/item/5f9f6d9f00000000010072b4?id=1001&session=sldfjkljwerjlsdffjlsdfj”时,该请求中的“https://www.xiaohongshu.com”是网站的域名,类似于请求的ip和端口等信息,“discovery/item/5f9f6d9f00000000010072b”是请求路由,而“?”后面的部分“id=1001&session=sldfjkljwerjlsdffjlsdfj”为请求的参数。在该示例中,请求路由的各级路由参数是以”/”进行分隔的,这种处理方法类似于操作系统的文件目录结构,一个文件夹下可以包含一个或多个文件。类似的,一个路由下,可以包含一个或多个子路由,例如“discovery/item/”路由下可以包含“discovery/item/129798345924342”路由,而“discovery”下可以包含“discovery/info”路由。可见,路由的基本形式是一个树形的结构,一个路由可以包含一个或多个子路由,每一个子路由都从属于父路由,也就是说一个子路由会把父路由作为前缀。
79.当采用请求路由作为接口唯一标识时,所述将接口唯一标识和所述接口执行器对应存储包括:将所述接口的请求路由添加至路由树中;其中,所述路由树中所述请求路由对应的路径包含一个或多个结点,每个结点用于存储该请求路由所包含的对应级别的路由参数;在所述接口的请求路由对应的路径的末级结点存储相应的接口执行器。
80.图3是一种示例性的路由树示意图。如图3所示,从根结点出发,到任意子结点的一条路径,即代表为一条请求路由。例如,请求路由discovery/item/aaa,对应路由树中由结点discovery、结点item以及结点aaa构成的路径;请求路由discovery/item/bbb,对应路由树中由结点discovery、结点item以及结点bbb构成的路径;请求路由discovery/item/ccc,对应路由树中由结点discovery、结点item以及结点ccc构成的路径。如图3所示的路由树充分考虑了http路由请求的树形结构,以路由树的存储方式进行接口信息的存储,有助于后续实现路由的分级快速查找。具体实施时,可将每个结点的全部子结点都存储于一个hashmap(hashmap是基于哈希表的map接口的非同步实现)中,这样在每个结点查找一个具体的子结点时,可以利用hash(哈希)检索的方式,从而大幅度提升路由检索效率。
81.在如图3所示路由树中,路由树中的每一个结点上都可以有三个执行器,分别为对应post请求的执行器(可命名为posthandler)、对应get请求的执行器(可命名为gethandler)、以及对应文件上传请求的执行器(可命名为filehandler),这三种执行器默认为空,表示默认不存在这三种执行器。只有当注册一条接口时,才会根据请求类型在路径的末级节点上添加相应的接口执行器。例如,想要注册的接口的唯一标识为/discovery/item/aaa,那么会把该请求路由中包含的多级路由参数添加到路由树中,构建一条由结点discovery、结点item以及结点aaa构成的路径,然后根据接口的请求类型在该路径末级结aaa上添加接口可执行器。比如,假设接口请求类型为post请求,则在末级结点上将可执行器posthandler设定为a,这样即完成了接口的注册。
82.在接口配置文件模式下,接口的请求路由可由uri属性定义。类和方法都有uri属性,类的uri属性和方法的uri属性拼接到一起,再补充上接口文件名即可构成一条完整的路由。例如:接口文件nlp下,有一个类class的uri为system,方法的uri为interface/manager,那么这个接口方法的完整路由即为:nlp/system/interface/manager,可以通过这个路由定位到该方法。当使用注解方法定义路由时与之类似,只不过uri属性将由httpservice注解的value属性代替,其余处理逻辑与配置文件一致。
83.在本发明实施例中,通过以上步骤实现了接口的注册。与现有基于项目的接口研发方式相比,本发明的接口注册方法,大大简化了接口注册或者说接口发布的复杂度,降低了接口研发的技术门槛,提升了接口的研发效率。由于实现了针对接口粒度进行发布、管理和维护,使得接口的新增修改变化不会影响其他接口的功能,降低了接口之间的耦合度。
84.第二实施例
85.图4是根据本发明第二实施例的接口执行方法的主要流程示意图。如图4所示,本发明实施例的接口执行方法包括:
86.步骤s401:响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数;所述请求参数包括:接口唯一标识。
87.示例性地,在步骤s401中,从用户端的接口调用请求中解析出相应的参数,这些参数主要包含接口唯一标识,另外还可包括请求类型(比如post请求或get请求)、请求头和请求体(通常情况下,只有post请求才有请求体)等。在解析出各个请求参数后,可将请求参数保存至一个hashmap中,以方便方便后续访问,为调用接口执行器做准备。
88.接口唯一标识本质上也是一种参数,只不过这个参数比较特殊,相当于一个接口的命名,用来唯一标识一个接口。接口唯一标识可通过多种方式定义,比如可以用一个请求参数名来定义。在一可选实施方式中,采用请求路由作为接口唯一标识。
89.可选地,在步骤s402之前,本发明实施例的接口执行方法还包括以下步骤:基于步骤s401解析出的请求参数进行一些系统级的处理,这些系统级的处理主要是完成一些技术框架、平台的整合工作以及一些通用的处理等,例如权限验证,登录信息校验,以及一些token(令牌)校验等。
90.步骤s402:查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器。
91.在一个可选示例中,所述接口唯一标识为接口的请求路由,所述已注册的接口信息以路由树的形式存储。在通过步骤s401解析出接口的请求路由后,将所述接口的请求路
由拆分成多个级别的路由参数,以得到由所述多个级别的路由参数构成的数组;根据所述数组在所述路由树中进行路径检索;在检索出所述请求路由对应的路径的情况下,从所述路径的末级结点中获取与所述接口调用请求的请求类型对应的接口执行器。
92.例如,假设解析出的请求路由为“discovery/item/aaa”,接下来按照分隔符“/”进行路由参数的拆分,进而得到一个由discovery、item、aaa构成的数组。然后,对于该数组中的每个元素,按顺序从预先构建的路由树中进行检索,若检索到该请求路由对应的路径,从该路径的末级结点中根据请求类型获取相应的接口执行器。比如,请求类型为post请求,则从末级结点中获取post请求对应的接口执行器;比如,请求类型为get请求,则从末级结点中获取get请求对应的接口执行器。
93.进一步,用户还可以在配置文件和注解中指定检索策略。比如,可将检索策略设置为全匹配检索策略、前缀匹配、后缀匹配、或者通配符匹配等。每一种检索策略,本质都是针对上述路由树的一种查询算法。另外,用户也可以自己实现路由检索接口,定义自己的路由检索策略。由于支持多样化的路由检索策略,可以让用户对路由的检索逻辑变得十分丰富,可以让用户定义出更加复杂灵活地接口。
94.步骤s403:调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。
95.在一个可选示例中,在路由树中检索到最末级结点后,根据请求类型(比如post请求或者get请求)来获取末级结点上的接口执行器(比如post请求对应的接口执行器posthandler或者get请求对应的接口执行器gethandler等)。如果获取到相应的接口执行器,接下来可根据解析出的接口入参调用该接口执行器。
96.进一步,在上述可选示例中,接口执行方法还可包括以下步骤:在从所述路由树中未检索出所述请求路由对应的路径,或者从所述请求路由对应的路径的末级节点获取不到与所述接口调用请求的请求类型对应的接口执行器的情况下,从接口文件存储路径查找所述请求路由对应的接口文件,并将查询结果返回至所述用户端。具体实施时,若从接口文件存储路径成功获取到所述请求路由对应的接口文件,则返回接口文件内容,如果获取不到所述请求路由对应的接口文件,则抛出异常。这样以来,可以让接口文件中支持对静态资源文件的访问。
97.在上述可选示例中,在将接口请求路由添加至路由树中,后续能从路由树中快速检索出相应的接口执行器,然后调用接口执行器的方法。基于该特点,用户只需要对某一个服务器上的路由进行管理,就可以实现对接口的管理维护。比如控制某一个接口开启和关闭,只需要控制某一条路由是否有效即可,该策略让用户对接口的管控十分灵活、精细。
98.可选地,在步骤s403中,在调用接口方法进行处理时,主要涉及参数适配、预处理模块调用、后处理模块调用、结果集适配这四个过程。其中,核心的过程是参数适配和结果集的适配过程。
99.在调用一个方法时,需要给这个方法传参。考虑到参数是用户通过某些数据格式传递过来的,因此可能需要对这些参数格式进行适配处理,然后传递到相应的方法。例如,当用户发送http请求的时候,用户的请求参数往往有特定的格式。比如,当用户发送post请求时,post请求包含了一个请求体,该请求体可以封装特定格式的数据信息,比较常见的是以json(是一种轻量级的数据交换格式)格式发送过来的请求体,同样也可以封装base64
(base64是一种网络上常见的用于传输8bit字节码的编码方式之一,它是一种基于64个可打印字符来表示二进制数据的方法)格式或其他序列化的数据结构。该请求体封装的也是数据,只不过附加了相应的数据处理协议,前端用什么样的传输方法,后端采用相应地方法解析即可。此外当调用端进行文件上传时,请求体包含文件的数据流,后端需要实现对数据流的处理,例如把这个文件的数据流保存到一个地方,这样就完成了文件上传服务。
100.接口服务方法需要定义一个处理方法get/post,来确定接口服务方法所能处理的用户请求。比如,如果接口服务方法配置了处理方法为post类型,那么这个接口只能用来处理用户的post请求,如果接口服务方法配置了处理方法为get类型,那么这个接口只能用来处理用户的get请求。
101.在对用户传入的参数进行适配处理后,将这些参数传递到相应的方法。具体来说,参数传递方法包括默认传参和主动传参。其中,默认传参是通过数据类型进行参数传递的方式,示例性流程如下:如果接口服务方法为get类型,会默认把从请求中解析出的key-value(键值对)形式的请求参数封装至一个map对象(requestmap)中,然后将其传递给接口服务方法中java.util.map类型的参数,如果接口服务方法中不含有java.util.map类型的参数,则不做处理;如果接口服务方法是post类型,那么会在上述的map类型参数传递基础上,需要把请求体传递给接口服务方法。请求体传递首先判断是否包含文件流,如果包含文件流则将文件流传递给接口服务方法的文件流对象,否则会把请求体传递给接口服务方法的string(字符串)类型对象。
102.主动传参主要通过配置和注解把一个具体的请求参数传递给接口服务方法的一个具体的参数的方法,示例性流程如下:如果是配置的方法,把method结点下的request-param结点配置的值,作为参数名,以这个参数名作为key(键),从map对象requestmap中获取value(值),然后按顺序传递给接口服务方法;如果是注解方式,需要用户编写接口服务方法的时候,给具体的方法参数添加requestparam(请求参数)注解,然后把注解的值作为参数的key(键),从map对象requestmap中获取value(值),传递给具体的参数。
103.预处理主要是在接口服务方法调用前插入一个处理,后处理主要是在结果返回后插入一个处理。预处理模块和后处理模块这两个模块都可以访问用户请求的参数信息和请求头等基本信息以及一些上下文的变量等。此外,后处理模块还可以访问用户的返回值信息。预处理模块和后处理模块可以支持用户以配置的方式注册一些预处理器和后处理器接口的实现类,完成用户指定的预处理和后处理功能。
104.预处理和后处理模块的设计,可以让用户以切面编程的方式对某一批接口注册添加一些通用的处理方法。例如性能监控,限流,以及用户的session(会话)校验等。这些通用的功能都可以在预处理和后处理功能模块中实现,不需要在用户编写接口服务方法的过程中去实现,这样可以让这些通用的功能以及平台框架的一些规范与用户的接口实现深度解耦,用户实现接口业务逻辑时,无需关心这些实现,而在接口的注册时候添加相应的处理功能即可。
105.结果集适配主要是对接口服务方法的返回值进行适配,适配成统一的格式,由于接口服务方法可能执行成功,也可能执行失败,如果执行成功,那么需要将结果的返回值返回给调用方,如果执行失败,需要把失败相关的信息返回给调用方,这样设计的好处是调用方可以以统一的方式处理返回结果,此外还可以获得执行的异常信息,以便于对接口执行
情况做出相应的判断。
106.一种示例性的结果集适配方式如下:返回结果包含了result,data,info三个核心的参数,其中,result为本次执行的结果,如果为0表示执行成功,如果为1表示执行发生了异常,如果为2则表示发生了警告;data表示本次请求返回的数据,一般以json格式返回,当然也可以采用其他序列化的数据格式;info为本次执行的描述信息。一般而言,当result为0时,data有效,用户可以使用data对象,当result非0时,表示data无效,此时data为空,而info有效,含义为异常信息,也就是说当执行发生异常时,系统会把返回结果的result置为1,并把异常信息放入到info属性中,返回给调用端。采用这种结果集适配逻辑有很多好处,一来可以解决返回值和异常处理等所有情况,满足所有功能,二来这种处理方式让调用方的对所有的结果有统一的数据返回格式,方便调用方对结果的处理,第三,这种方式可以让用户不再需要对传统复杂的http返回状态码做处理,成功失败一目了然。
107.结果集适配功能可以通过注解和配置的方法进行关闭。如果关闭了结果集适配功能,当方法执行成功,将会把方法的原生返回值以json方式发送给调用方,当方法执行失败,将会返回给调用方具体的http状态码。
108.在本发明实施例中,通过以上步骤实现了高效快捷地接口运行。与现有基于项目的接口研发方式相比,本发明的接口执行方法,大大简化了接口执行的复杂度,降低了接口研发的技术门槛,提升了接口的研发效率。由于实现了针对接口粒度进行运行、管理和维护,使得接口的新增修改变化不会影响其他接口的功能,降低了接口之间的耦合度。
109.第三实施例
110.图5是根据本发明第三实施例的接口注册装置的主要模块示意图。如图5所示,本发明实施例的接口注册装置500包括:解析模块501、加载模块502、注册模块503。
111.解析模块501,用于解析接口配置文件,以得到接口配置信息。
112.接口配置文件是定义接口的核心内容,接口注册装置的实现依赖于接口配置文件。具体实施时,接口配置文件可采用xml(可扩展标记语言)文件格式。
113.在一个可选示例中,接口配置文件包括:主库文件配置项、引用接口文件配置项、可执行文件配置项、接口实现类包路径配置项、以及接口实现类基本信息配置项。
114.在另一个可选示例中,接口配置文件除了包括主库文件配置项、引用接口文件配置项、可执行文件配置项、接口实现类包路径配置项、以及接口实现类基本信息配置项之外,还包括文件下载路径配置项、全局参数列表配置项。
115.在一个示例性场景中,响应于用户端的接口注册请求,接口注册装置开始执行接口注册流程。在接收到用户的接口注册请求后,接口注册装置访问接口配置文件,对接口配置文件进行解析,以得到接口配置信息。其中,所述接口配置信息包括各个接口配置项下配置的参数信息,比如server-class配置项下的参数信息等等。
116.在另一个示例性场景中,接口注册装置定时扫描指定目录下的接口文件,并对合法的接口文件进行加载、注册。
117.加载模块502,用于根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器。
118.可选地,本发明实施例的接口注册装置还包括:加载器创建模块,用于创建自定义类加载器,以通过所述自定义类加载器根据所述接口配置信息动态加载接口的实现类,创
建接口可执行器。
119.由于使用了动态加载,一来可以实现接口的热部署,即可以实现不对服务器进行重启便可以完成对接口的升级;二来类加载器之间可以实现执行代码的隔离。不同的接口文件是由不同的类加载器实现的,不同的接口文件执行代码是从类加载器层面进行隔离的。比如,一个接口文件使用的技术框架可能与另一个接口文件存在冲突,由于这两个接口文件是在加载器层面进行了隔离,所以执行时不会有任何问题。由于在加载器层面对代码进行了隔离,所以用户开发接口文件时,只需要考虑一个接口文件内部的库和依赖环境即可,不需要考虑与其他接口文件的关系。
120.在一个可选示例中,设计的自定义类加载器包括:最顶层的第一类加载器(又可称为base类加载器)、继承于第一类加载器的第二类加载器(又可称为ext加载器)、继承于第二类加载器的第三类加载器(又可称为接口文件类加载器)。也就是说,第一类加载器是第二类加载器的父加载器,第二类加载器是第三类加载器的父加载器。第一类加载器,用于加载主库文件配置项下配置的全部路径下的包文件;第二类加载器,用于加载引用接口文件配置项下配置的全部路径下的包文件;第三类加载器,用于加载可执行文件配置项下配置的全部路径下的包文件。
121.也就是说,第三类加载器主要用来加载接口文件中打包的jar包,而第一类加载器和第二类加载器是为了给接口文件减负的,可以将一些比较通用的jar包放在这些加载器中,从而让多个接口文件去复用,这样可以降低每一个接口文件的大小,不必在每一个接口文件中都打入相同的jar包。例如编写所有的接口文件可能都需要输出日志功能,那么可能每一个接口文件中都需要调用输出日志功能相关jar包,那么此时,可以把输出日志功能相关jar包放入到base类加载器中,这样每一个接口文件无需打包输出日志功能相关jar包了。
122.java虚拟机中加载一个新的类时,会从底层加载器去加载,如果没有找到,会尝试从其父加载器中加载,如果找不到继续从上一级加载器中尝试加载,直至成功加载;如果从顶层加载器也未找到,则抛出异常。按照这个加载逻辑,当第三类加载器和第一类加载器同时存在一个类的时候,那么会从第三类加载器中加载。
123.基于java虚拟机的类加载机制,上述可选实施方式设计的自定义类加载器具有如下优势:能够确保接口文件中提供的类具有更高的优先级,进而,当不清楚父加载器中是否存在一个jar包时,就可以把这个包打包进接口文件,这样确保执行不会有问题,不会发生找不到类文件(classnotfoundexception)的异常,最多就是父加载器中也存在这个jar包,然而会以子加载器中存在的jar包为准,另外当父加载器中的jar包和子加载器中的jar包的版本不一致时,也会以子加载器中的包为准。
124.进一步,当采用上述示例的自定义类加载器时,加载模块502根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器可具体包括:调用最底层的第三类加载器加载可执行文件配置项下配置的全部路径下的包文件,然后通过反射机制创建接口实例对象,并把相应的方法的调用封装形成接口执行器。具体来说,加载模块502可通过以下两种方式加载接口的实现类:第一种方式为,在接口实现类包路径配置项不为空的情况下,扫描接口实现类包路径配置项配置的包文件路径下的全部类文件,以从中加载带有注解的类文件。与从全部的类文件中直接搜索带有注解的类文件相比,通过预先在配
置文件中的配置项base-package设置搜索的基础包,圈定一个搜索的范围,再通过扫描配置项base-package配置的基础包下的全部类文件,把带有注解的类文件找出来,大大提高了搜索带有注解的类文件的效率。第二种方式为,在接口实现类基本信息配置项不为空的情况下,根据接口实现类基本信息配置项指定的接口实现类的基本信息加载接口的实现类。
125.注册模块503,用于确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册。
126.示例性地,注册模块503可从解析模块解析结果中获取接口唯一标识。接口唯一标识如同一个接口的id,用来区分所调用的是哪一个接口。接口唯一标识本质上也是一种参数,只不过这个参数比较特殊,相当于一个接口的命名,用来唯一标识一个接口。接口唯一标识可通过多种方式定义,比如可以用一个请求参数名来定义。
127.在一可选实施方式中,采用请求路由作为接口唯一标识。请求路由可理解为请求的路径,该请求路径是多级的。例如,当http请求为“https://www.xiaohongshu.com/discovery/item/5f9f6d9f00000000010072b4?id=1001&session=sldfjkljwerjlsdffjlsdfj”时,该请求中的“https://www.xiaohongshu.com”是网站的域名,类似于请求的ip和端口等信息,“discovery/item/5f9f6d9f00000000010072b”是请求路由,而“?”后面的部分“id=1001&session=sldfjkljwerjlsdffjlsdfj”为请求的参数。在该示例中,请求路由的各级路由参数是以”/”进行分隔的,这种处理方法类似于操作系统的文件目录结构,一个文件夹下可以包含一个或多个文件。类似的,一个路由下,可以包含一个或多个子路由,例如“discovery/item/”路由下可以包含“discovery/item/129798345924342”路由,而“discovery”下可以包含“discovery/info”路由。可见,路由的基本形式是一个树形的结构,一个路由可以包含一个或多个子路由,每一个子路由都从属于父路由,也就是说一个子路由会把父路由作为前缀。
128.当采用请求路由作为接口唯一标识时,注册模块503将接口唯一标识和所述接口执行器对应存储包括:注册模块503将所述接口的请求路由添加至路由树中;其中,所述路由树中所述请求路由对应的路径包含一个或多个结点,每个结点用于存储该请求路由所包含的对应级别的路由参数;注册模块503在所述接口的请求路由对应的路径的末级结点存储相应的接口执行器。
129.在本发明实施例中,通过以上装置实现了接口的注册。与现有基于项目的接口研发方式相比,本发明的接口注册装置,大大简化了接口注册或者说接口发布的复杂度,降低了接口研发的技术门槛,提升了接口的研发效率。由于实现了针对接口粒度进行发布、管理和维护,使得接口的新增修改变化不会影响其他接口的功能,降低了接口之间的耦合度。
130.第四实施例
131.图6是根据本发明第四实施例的接口执行装置的主要模块示意图。如图6所示,本发明实施例的接口执行装置600包括:解析模块601、查询模块602、执行模块603。
132.解析模块601,用于响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数。其中,所述请求参数包括:接口唯一标识。
133.示例性地,解析模块601从用户端的接口调用请求中解析出相应的参数,这些参数主要包含接口唯一标识,另外还可包括请求类型(比如post请求或get请求)、请求头和请求
体(通常情况下,只有post请求才有请求体)等。在解析出各个请求参数后,可将请求参数保存至一个hashmap中,以方便方便后续访问,为调用接口执行器做准备。
134.接口唯一标识本质上也是一种参数,只不过这个参数比较特殊,相当于一个接口的命名,用来唯一标识一个接口。接口唯一标识可通过多种方式定义,比如可以用一个请求参数名来定义。在一可选实施方式中,采用请求路由作为接口唯一标识。
135.可选地,本发明实施例的接口执行装置还包括:系统级处理模块,用于基于解析模块601解析出的请求参数进行一些系统级的处理,这些系统级的处理主要是完成一些技术框架、平台的整合工作以及一些通用的处理等,例如权限验证,登录信息校验,以及一些token(令牌)校验等。
136.查询模块602,用于查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器。
137.在一个可选示例中,所述接口唯一标识为接口的请求路由,所述已注册的接口信息以路由树的形式存储。在通过解析模块601解析出接口的请求路由后,将所述接口的请求路由拆分成多个级别的路由参数,以得到由所述多个级别的路由参数构成的数组。接下来,查询模块602根据所述数组在所述路由树中进行路径检索;在检索出所述请求路由对应的路径的情况下,从所述路径的末级结点中获取与所述接口调用请求的请求类型对应的接口执行器。
138.例如,假设解析出的请求路由为“discovery/item/aaa”,接下来按照分隔符“/”进行路由参数的拆分,进而得到一个由discovery、item、aaa构成的数组。然后,对于该数组中的每个元素,查询模块602按顺序从预先构建的路由树中进行检索,若检索到该请求路由对应的路径,查询模块602从该路径的末级结点中根据请求类型获取相应的接口执行器。比如,请求类型为post请求,则查询模块602从末级结点中获取post请求对应的接口执行器;比如,请求类型为get请求,则查询模块602从末级结点中获取get请求对应的接口执行器。
139.进一步,用户还可以在配置文件和注解中指定检索策略。比如,可将检索策略设置为全匹配检索策略、前缀匹配、后缀匹配、或者通配符匹配等。每一种检索策略,本质都是针对上述路由树的一种查询算法。另外,用户也可以自己实现路由检索接口,定义自己的路由检索策略。由于支持多样化的路由检索策略,可以让用户对路由的检索逻辑变得十分丰富,可以让用户定义出更加复杂灵活地接口。
140.执行模块603,用于调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。
141.在一个可选示例中,在路由树中检索到最末级结点后,根据请求类型(比如post请求或者get请求)来获取末级结点上的接口执行器(比如post请求对应的接口执行器posthandler或者get请求对应的接口执行器gethandler等)。如果获取到相应的接口执行器,接下来执行模块603可根据解析出的接口入参调用该接口执行器。
142.进一步,在上述可选示例中,查询模块602还可用于:在从所述路由树中未检索出所述请求路由对应的路径,或者从所述请求路由对应的路径的末级节点获取不到与所述接口调用请求的请求类型对应的接口执行器的情况下,从接口文件存储路径查找所述请求路由对应的接口文件,并将查询结果返回至所述用户端。具体实施时,若查询模块602从接口文件存储路径成功获取到所述请求路由对应的接口文件,则返回接口文件内容,如果获取
不到所述请求路由对应的接口文件,则抛出异常。这样以来,可以让接口文件中支持对静态资源文件的访问。
143.在上述可选示例中,在将接口请求路由添加至路由树中,后续能从路由树中快速检索出相应的接口执行器,然后调用接口执行器的方法。基于该特点,用户只需要对某一个服务器上的路由进行管理,就可以实现对接口的管理维护。比如控制某一个接口开启和关闭,只需要控制某一条路由是否有效即可,该策略让用户对接口的管控十分灵活、精细。
144.在本发明实施例中,通过以上装置实现了高效快捷地接口运行。与现有基于项目的接口研发方式相比,本发明的接口执行装置,大大简化了接口执行的复杂度,降低了接口研发的技术门槛,提升了接口的研发效率。由于实现了针对接口粒度进行运行、管理和维护,使得接口的新增修改变化不会影响其他接口的功能,降低了接口之间的耦合度。
145.第五实施例
146.图7是根据本发明第五实施例的接口管理系统的主要模块示意图。如图7所示,本发明实施例的接口管理系统700包括:接口注册装置701、接口执行装置702。
147.接口注册装置701,用于将用户开发的业务逻辑实现类添加到系统服务中。接口注册装置701会把指定路径(比如webapps路径)下的接口文件进行加载、创建实例、进行适配、并完成路由注册等一系列操作,从而使得接口最终可以在线上使用。
148.接口注册装置701包括解析模块、加载模块、以及注册模块。其中,解析模块用于解析接口配置文件,以得到接口配置信息;加载模块,用于根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器;注册模块,用于确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册。
149.关于接口注册装置中各模块的详细介绍,可参考第三实施例的相关说明,在此不再赘述。
150.接口执行装置702,用于实现对已注册接口执行器的调用、运行。接口执行装置702包括:解析模块、查询模块以及执行模块。其中,解析模块,用于响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数;所述请求参数包括接口唯一标识;查询模块,用于查询已注册的接口信息,以得到与接口唯一标识对应的接口执行器;执行模块,用于调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。
151.关于接口执行装置中各模块的详细介绍,可参考第四实施例的相关说明,在此不再赘述。
152.可选地,接口管理系统700还包括:公共系统服务装置、以及公共数据缓存池。
153.其中,公共系统服务装置主要是对接口进行管理,主要包含了元数据服务、文件管理服务、监听服务、以及路由管理服务。
154.元数据服务主要描述了接口的元数据信息,即主要包含了哪些接口、接口调用情况如何、以及性能怎样等。
155.文件管理服务主要是用于管理和维护接口的相关文件。例如:可执行文件、配置文件以及其他附加数据文件等。
156.监听服务主要是对接口分布式管理的支持。示例性地,监听服务可采用主从模式,即从节点会和主节点之间存在心跳检测,该服务主要把从节点的一些信息同步给主节点。这样用户只需要访问主节点即可查看所有结点的接口元数据信息。另外当主节点发生变化
时,主节点会下发一些命令,让从节点自动完成升级操作,这样用户只需要对主节点的接口进行管理(比如增加或删除一些接口),从结点会自动从主节点更新这些变化,并把更新情况返回给主节点,以方便查看各个子节点接口升级状况。
157.路由管理服务主要是对路由的管理,比如增加和删除一些路由等。路由管理服务主要是为接口新增和修改时提供了类似于数据库事务的技术保障,可以实现只有接口升级成功后才会修改路由,并且支持接口的回滚操作,即将新版本接口回退到历史的某一个版本。此外,通过路由管理的相关技术,可以实现一个接口升级和修改时候服务0延迟,即从老版本的接口切换到新版本的接口不会有服务的中断。
158.具体路由管理策略如下:当创建一个接口时,只有当一个接口实例完全创建成功时,才会添加一条路由,否则提示接口升级失败,只有当路由创建成功后,这个服务才能被正常使用;当升级一个接口时,只有当一个接口的执行器都创建成功,确保新版本的接口执行都没有问题,再去替换一条路由,即把接口的执行器替换成新的,而接口的唯一标识不发生修改;此外,当升级接口时,可以把接口发布到一个临时的路由上,先进行自测,当自测没有问题的时候再去替换老版本接口路由,这种模式可以最大限度的保证接口的稳定性,当一些接口服务要求稳定行比较高的时候,可以考虑采用这种策略,这种策略可以为用户提供上线前的进一步测试。
159.公共数据缓存池主要完成了数据的存储功能。这些数据主要包括接口元数据、路由信息、上下文加载器、接口执行器等,这些数据的存储其实比较简单,主要是设计一个合理的数据结构,将一些内存的对象保存下来,可以快速的查找和访问这些对象即可。
160.在本发明实施例中,通过以上接口管理系统能够大大降低接口研发的技术门槛,大大提升接口的研发效率,并降低接口管理的复杂度。通过使用该系统,将使接口的研发变得十分简洁,可以实现本地可执行即可发布到线上,该平台可以系统完善地解决企业的接口管理和开发的需求。具体来说,本发明实施例中的接口管理系统能够实现以下至少一种有益效果:
161.1、本方案支持配置文件的方式实现实例的创建和方法的调用,并发布成接口,大大简化了接口研发的复杂度。很多时候,对于一些开源的技术实现,用户甚至不需要编写任何代码,只需要维护一段配置文件,便可以将之发布成接口。
162.2、本方案为每一个接口文件独立设计了一套类加载器的机制,让不同的接口文件有独立的执行体系,执行互不干扰,这样新开发的接口不会对老版本的接口造成影响。此外用户研发接口时,不需要考虑其余其他接口的兼容问题,例如包冲突问题等,只需要考虑当前接口的执行即可,只要保证当前接口可以执行,那么部署到环境中,一定是可以执行的。
163.3、本方案采用了接口执行器的技术,可以在接口执行器前后织入一些预处理器和后处理器,可以让一些平台性的功能和技术在这些处理器中去实现,用户在实现接口时无需考虑这些技术。这样可以实现接口的实现细节与平台的技术框架、规范完全解耦,这些技术对于用户来讲是透明的,用户只需要关心接口的业务逻辑即可。大大简化了用户研发接口的复杂度,使接口项目变得更加轻量化,易于管理和维护。
164.4、本方案实现了树形的路由管理策略,只有路由创建成功,接口方能发挥作用。该技术让接口的管理维护更加灵活可靠,并配合自定义类加载器和类动态加载机制,让接口支持热部署,无中断升级。
165.5、本方案支持多种路由检索策略,并且用户可以自定义路由检索策略,基于这个技术,用户可以定义出很多更加强大的接口,例如上文提到的模板接口
166.6、本方案维护的接口文件里面包含的可执行文件而非源码,接口升级过程可以实现动态加载,而无需编译。大大提升了可靠性和升级的效率。因为线上编译可能失败,而且也消耗服务器资源。
167.7、本方案实现了分布式一主多从的监听服务架构,实现了对分布式环境的支持,当主服务的一些接口发生变化时,会自动同步到各个子服务,用户只需要管理和维护主服务上面的接口即可,各个子服务会自动更新。
168.8、本方案支持对接口粒度的资源调配,即可以配置某一条接口配置的结点数,而以往情况只能控制在项目粒度。例如:可以实现同一个接口文件下的某一个接口配置5个结点,而另一个接口配置10个结点,这种技术可以让资源的调控控制在接口粒度,可以精确控制任何一个接口的服务结点数,这让资源的调控更加精准精细,更容易让服务器的资源利用率处于一个合理的范围。当发现某一个接口调用频次非常高时,那么可以直接扩展这个接口的结点数。而以往情况只能扩展这个接口的所在项目的结点数,资源的调控显得更加粗糙。
169.下面参考图8,其示出了适于用来实现本发明实施例的电子设备的计算机系统800的结构示意图。图8示出的计算机系统仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
170.如图8所示,计算机系统800包括中央处理单元(cpu)801,其可以根据存储在只读存储器(rom)802中的程序或者从存储部分808加载到随机访问存储器(ram)803中的程序而执行各种适当的动作和处理。在ram 803中,还存储有系统800操作所需的各种程序和数据。cpu 801、rom 802以及ram 803通过总线804彼此相连。输入/输出(i/o)接口805也连接至总线804。
171.以下部件连接至i/o接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至i/o接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
172.特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(cpu)801执行时,执行本发明的系统中限定的上述功能。
173.需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便
携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。
174.附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
175.描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括解析模块、加载模块和注册模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,解析模块还可以被描述为“解析接口配置文件以得到接口配置信息的模块”。
176.作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备执行以下流程:解析接口配置文件,以得到接口配置信息;根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器;确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册;或者,当上述一个或者多个程序被一个该设备执行时,使得该设备执行以下流程:响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数;所述请求参数包括:接口唯一标识;查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器;调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。
177.根据本发明实施例的技术方案,能够大大简化接口研发的复杂度,降低接口研发的技术门槛,提升接口的研发效率。由于实现了针对接口粒度进行发布、管理和维护,使得接口的新增修改变化不会影响其他接口的功能,降低了接口之间的耦合度。
178.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明
白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

技术特征:
1.一种接口注册方法,其特征在于,所述方法包括:解析接口配置文件,以得到接口配置信息;根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器;确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:创建自定义类加载器,以通过所述自定义类加载器执行所述根据所述接口配置信息加载接口的实现类的步骤。3.根据权利要求1所述的方法,其特征在于,所述接口配置文件包括:主库文件配置项,用于配置当前接口文件使用的主库文件;引用接口文件配置项,用于配置当前接口文件引用的其他接口文件;以及,可执行文件配置项,用于配置当前接口文件的可执行文件;所述接口配置文件还包括:接口实现类包路径配置项,用于在通过注解的方式定义接口的情况下,配置接口实现类所在的包文件路径;和/或,接口实现类基本信息配置项,用于在通过配置的方式定义接口的情况下,配置接口实现类的基本信息;其中,所述接口实现类的基本信息包括:接口实现类的类名、以及所使用的方法名。4.根据权利要求3所述的方法,其特征在于,所述自定义类加载器包括:第一类加载器,用于加载主库文件配置项下配置的全部路径下的包文件;第二类加载器,继承于所述第一类加载器,用于加载引用接口文件配置项下配置的全部路径下的包文件;第三类加载器,继承于所述第二类加载器,用于加载可执行文件配置项下配置的全部路径下的包文件。5.根据权利要求4所述的方法,其特征在于,所述根据接口配置信息加载接口的实现类包括:调用第三类加载器加载可执行文件配置项下配置的全部路径下的包文件;在接口实现类包路径配置项不为空的情况下,扫描接口实现类包路径配置项配置的包文件路径下的全部类文件,以从中加载带有注解的类文件;在接口实现类基本信息配置项不为空的情况下,根据接口实现类基本信息配置项指定的接口实现类的基本信息加载接口的实现类。6.根据权利要求1所述的方法,其特征在于,所述接口唯一标识为接口的请求路由;所述将接口唯一标识和所述接口执行器对应存储包括:将所述接口的请求路由添加至路由树中;其中,所述路由树中所述请求路由对应的路径包含一个或多个结点,每个结点用于存储该请求路由所包含的对应级别的路由参数;在所述接口的请求路由对应的路径的末级结点存储相应的接口执行器。7.一种接口执行方法,其特征在于,所述方法包括:响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数;所述请求参数包括:接口唯一标识;查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器;调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。8.根据权利要求7所述的方法,其特征在于,所述接口唯一标识为接口的请求路由;所述已注册的接口信息以路由树的形式存储;所述查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器包括:
将所述接口的请求路由拆分成多个级别的路由参数,以得到由所述多个级别的路由参数构成的数组;根据所述数组在所述路由树中进行路径检索;在检索出所述请求路由对应的路径的情况下,从所述路径的末级结点中获取与所述接口调用请求的请求类型对应的接口执行器。9.根据权利要求8所述的方法,其特征在于,所述方法还包括:在从所述路由树中未检索出所述请求路由对应的路径,或者从所述请求路由对应的路径的末级节点获取不到与所述接口调用请求的请求类型对应的接口执行器的情况下,从接口文件存储路径查找所述请求路由对应的接口文件,并将查询结果返回至所述用户端。10.一种接口注册装置,其特征在于,所述装置包括:解析模块,用于解析接口配置文件,以得到接口配置信息;加载模块,用于根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器;注册模块,用于确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册。11.一种接口执行装置,其特征在于,所述装置包括:解析模块,用于响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数;所述请求参数包括:接口唯一标识;查询模块,用于查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器;执行模块,用于调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。12.一种接口管理系统,其特征在于,所述系统包括:接口注册装置,用于解析接口配置文件,以得到接口配置信息;所述接口注册装置还用于根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器;所述接口注册装置还用于确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册;接口执行装置,用于响应于用户端的接口调用请求,解析出所述接口调用请求中的请求参数;所述请求参数包括:接口唯一标识;所述接口执行装置还用于查询已注册的接口信息,以得到与所述接口唯一标识对应的接口执行器;所述接口执行装置还用于调用所述接口执行器,并将所述接口执行器的执行结果发送至所述用户端。13.一种电子设备,其特征在于,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6,7-9中任一所述的方法。14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-6,7-9中任一所述的方法。

技术总结
本发明公开了一种接口注册、执行方法、装置和管理系统,涉及计算机技术领域。其中,接口注册方法包括:解析接口配置文件,以得到接口配置信息;根据所述接口配置信息加载接口的实现类,基于所述接口的实现类创建接口执行器;确定接口唯一标识,将所述接口唯一标识和所述接口执行器对应存储,以完成接口的注册。通过以上步骤实现了快捷高效地接口注册,大大简化了接口注册或者说接口发布的复杂度,降低了接口研发的技术门槛,提升了接口的研发效率。提升了接口的研发效率。提升了接口的研发效率。


技术研发人员:吕望 王艳花
受保护的技术使用者:北京京东世纪贸易有限公司
技术研发日:2022.01.05
技术公布日:2023/7/22
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐