API接口访问方法、转换方法、装置、设备及存储介质与流程

文档序号:32672439发布日期:2022-12-24 02:59阅读:158来源:国知局
API接口访问方法、转换方法、装置、设备及存储介质与流程
api接口访问方法、转换方法、装置、设备及存储介质
技术领域
1.本技术涉及计算机技术领域,尤其涉及一种api接口访问方法、转换方法、装置、设备及存储介质。


背景技术:

2.web服务常用的接口协议有rest协议和soap协议。由于rest协议可以降低开发的复杂性,提高系统的可伸缩性,越来越多的web服务开始采用rest协议设计和实现。目前,很多系统对外开放的api接口都是采用rest协议进行访问调用,但也存在很多第三方系统希望以soap协议去调用接口。
3.针对上述需求,相关技术中往往是同时写一套rest协议接口和一套soap协议接口,使得第三方系统可以分别调用。但是这种方式会增加系统开发和维护的工作量,从而增加系统成本。


技术实现要素:

4.本技术实施例的主要目的在于提出一种api接口访问方法、转换方法、装置、设备及存储介质,能够使得第三方系统可以通过soap协议来调用rest接口。
5.为实现上述目的,本技术实施例的第一方面提出了一种api接口访问方法,所述方法包括:获取web service接口请求;其中,所述web service接口请求为soap协议请求;根据所述web service接口请求,获取待访问的api接口的接口信息;其中,所述api接口为rest协议接口;根据所述接口信息,得到所述api接口对应的接口结构描述信息;根据所述接口结构描述信息,将所述web service接口请求转换成rest请求;发送所述rest请求到所述api接口。
6.在一些实施例中,所述web service接口请求包含xml请求报文,所述api接口的接口信息包括api接口类名和api实现类类名;所述根据所述web service接口请求,获取待访问的api接口的接口信息,包括:根据所述web service接口请求的xml请求报文,获取请求路径;根据所述请求路径,获取所述api接口的api接口类名和api实现类类名;所述根据所述接口信息,得到所述api接口对应的接口结构描述信息,包括:根据所述api接口类名和api实现类类名,用java反射机制,解析出所述api接口的对应的接口结构描述信息。
7.在一些实施例中,所述接口结构描述信息包括入参结构信息和出参结构信息;其中,所述入参结构信息包括入参方法信息和入参类型信息,所述出参结构信息包括出参方法信息和出参类型信息;所述根据所述api接口类名和api实现类类名,用java反射机制,解析出所述api接
口的对应的接口结构描述信息,包括:根据所述api接口类名,用java反射机制获取对应的入参方法信息和出参方法信息;根据所述api实现类类名和所述入参方法信息、出参方法信息,用java反射机制获取对应的入参类型信息和出参类型信息;根据所述入参类型信息和出参类型信息,形成所述接口结构描述信息。
8.在一些实施例中,所述根据所述接口结构描述信息,将所述web service接口请求转换成rest请求,包括:解析所述xml请求报文,得到第一对象节点值;根据所述接口结构描述信息,构建json对象;将第一对象节点值对应存储到所述json对象,得到rest请求的主体信息;根据所述主体信息,组装成所述rest请求。
9.在一些实施例中,所述解析所述xml请求报文,得到第一对象节点值,包括:将所述xml请求报文转换成文档类数据,从所述文档类数据中获取主体信息;根据第一遍历规则遍历所述文档类数据主体信息中的第一对象节点,获取得到多个第一对象节点对应的第一对象节点值;其中,所述第一遍历规则为逐层遍历或递归遍历,所述第一对象节点包括纯文本element元素节点和对象类型element元素节点。
10.在一些实施例中,所述获取web service接口请求之前,还包括:监听已实现平台预设注解规则注解的api接口实例;获取并存储监听到的所述api接口实例的请求路径、api接口类名和api实现类类名。
11.在一些实施例中,所述获取web service接口请求之前,还包括:通过预设的wsdl描述获取接口,获取得到所述api接口的wsdl描述信息;根据所述wsdl描述信息,组装得到所述web service接口请求。
12.在一些实施例中,所述api接口的wsdl描述信息由以下方式获取得到:监听已实现平台预设注解规则注解的api接口实例;获取并存储监听到的所述api接口实例的请求路径;根据所述api接口实例的请求路径,得到所述api接口的接口信息;根据所述接口信息,得到所述api接口对应的接口结构描述信息;根据所述接口结构描述信息和预设的目标格式模板,构建所述api接口的wsdl描述信息。
13.在一些实施例中,所述api接口的接口信息包括api接口类名;所述根据所述api接口实例的请求路径,得到所述api接口的接口信息,包括:识别所述api接口实例的请求路径,得到所述api接口类名;所述根据所述接口信息,得到所述api接口对应的接口结构描述信息,包括:根据所述api接口类名和api实现类类名,用java反射机制,解析出所述api接口的对应的接口结构描述信息。
14.在一些实施例中,所述根据所述接口结构描述信息和预设的目标格式模板,构建所述api接口的wsdl描述信息,包括:
遍历所述api接口的对应的接口结构描述信息,为wsdl基础元素节点赋值;其中,所述基础元素节点包括以下的至少一种:接口名、命名空间、调用路径;根据所述接口结构描述信息对应的参数类型,构造wsdl类型节点;根据所述接口结构描述信息对应的方法信息,构造生成对应的element元素节点;利用所述目标格式模板,将所述wsdl基础元素节点、wsdl类型节点、element元素节点组装形成目标格式的wsdl描述信息;其中,所述目标格式为xml格式。
15.在一些实施例中,所述发送所述rest请求到所述api接口之后,还包括:获取来自所述api接口的json响应报文;根据所述json响应报文,解析得到响应主体信息;获取预设的xml响应报文模板;根据所述响应主体信息和所述xml响应报文模板,组装得到xml响应报文;将所述xml响应报文发送给web service请求方。
16.在一些实施例中,还包括:获取所述api接口的访问策略;所述访问策略包括以下的至少一种:鉴权访问策略、限流访问策略、熔断策略;当所述访问策略包括鉴权访问策略,所述根据所述web service接口请求,获取待访问的api接口的接口信息,包括:根据所述web service接口请求,获取待访问的api接口的接口信息和访问账号;根据所述访问账号和预设的账号权限对应关系,判断所述访问账号的访问权限;当所述访问策略包括限流访问策略,所述根据所述web service接口请求,获取待访问的api接口的接口信息之后,包括:获取待访问的api接口的限流访问策略;根据限流访问策略,对所述api接口进行对应流量控制;当所述访问策略包括熔断访问策略,所述根据所述web service接口请求,获取待访问的api接口的接口信息之后,包括:获取待访问的api接口的熔断访问策略;根据熔断访问策略,对所述api及接口进行对应熔断保护控制。
17.为实现上述目的,本技术实施例的第二方面提出了一种api接口描述转换方法,所述方法包括:监听已实现平台预设注解规则注解的api接口实例;所述api接口为rest协议接口;获取并存储监听到的所述api接口实例的请求路径;根据所述api接口实例的请求路径,得到所述api接口的接口信息;根据所述接口信息,得到所述api接口对应的接口结构描述信息;根据所述接口结构描述信息和预设的目标格式模板,构建所述api接口的wsdl描述信息。
18.在一些实施例中,所述api接口的接口信息包括api接口类名;所述根据所述api接口实例的请求路径,得到所述api接口的接口信息,包括:识别所述api接口实例的请求路径,得到所述api接口类名;所述根据所述接口信息,得到所述api接口对应的接口结构描述信息,包括:根据所述api接口类名和api实现类类名,用java反射机制,解析出所述api接口的
对应的接口结构描述信息。
19.在一些实施例中,所述根据所述接口结构描述信息和预设的目标格式模板,构建所述api接口的wsdl描述信息,包括:遍历所述api接口的对应的接口结构描述信息,为wsdl基础元素节点赋值;其中,所述基础元素节点包括以下的至少一种:接口名、命名空间、调用路径;根据所述接口结构描述信息对应的参数类型,构造wsdl类型节点;根据所述接口结构描述信息对应的方法信息,构造生成对应的element元素节点;利用所述目标格式模板,将所述wsdl基础元素节点、wsdl类型节点、element元素节点组装形成目标格式的wsdl描述信息;其中,所述目标格式为xml格式。
20.为实现上述目的,本技术实施例的第三方面提出了一种api接口访问装置,包括:第一模块,用于获取web service接口请求;其中,所述web service接口请求为soap协议请求;第二模块,用于根据所述web service接口请求,获取待访问的api接口的接口信息;第三模块,用于根据所述接口信息得到所述api接口对应的接口结构描述信息;第四模块,用于根据所述接口结构描述信息,将所述web service接口请求转换成rest请求;第五模块,用于发送所述rest请求到所述api接口。
21.为实现上述目的,本技术实施例的第四方面提出了一种电子设备,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面实施例所述的api接口访问方法,或第二方面实施例所述的api接口描述转换方法。
22.为实现上述目的,本技术实施例的第五方面提出了一种存储介质,所述存储介质为计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面实施例所述的api接口访问方法,或第二方面实施例所述的api接口描述转换方法。
23.本技术实施例提出的api接口访问方法、转换方法、装置、设备及存储介质,至少具有如下有益效果:本技术实施例第一方面提供的api接口访问方法,包括:获取web service接口请求,根据所述web service接口请求,获取待访问的api接口的接口信息,根据所述接口信息,得到所述api接口对应的接口结构描述信息,根据所述接口结构描述信息,将所述web service接口请求转换成rest请求,发送所述rest请求到所述api接口。本技术实施例与相关技术相比,通过对web service接口请求信息的解析,并根据待访问api接口的接口结构描述信息将web service接口请求信息转换为待访问api接口的访问请求,实现通过soap协议来访问rest业务接口,从而能够实现接口统一协议调用,进而有效降低接口提供方系统的开发和维护的工作量。
24.本技术实施例第二方面提供的接口描述转换方法,包括:监听已实现平台预设注解规则注解的api接口实例,获取并存储监听到的所述api接口实例的请求路径,根据所述
api接口实例的请求路径,得到所述api接口的接口信息,根据所述接口信息,得到所述api接口对应的接口结构描述信息,根据所述接口结构描述信息和预设的目标格式模板,构建所述api接口的wsdl描述信息。本技术实施例与相关技术相比,通过将api接口的接口描述转换为wsdl描述信息,以方便第三方查看,从而方便用户通过soap协议来访问rest业务接口。
25.可以理解的是,上述第三方面至第五方面与相关技术相比存在的有益效果与上述第一方面或第二方面与相关技术相比存在的有益效果相同,可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
26.图1是本技术实施例提供的api接口访问方法对应的系统架构示意图;图2是本技术实施例提供的api接口访问方法的流程图;图3是图2中的步骤s102至s103的流程图;图4是图3中的步骤s203的流程图;图5是图2中的步骤s104的流程图;图6是图4中的步骤s401的流程图;图7是图2中的步骤s101之前的流程图;图8是本技术实施例提供的open api接口设计流程图;图9是本技术实施例提供的open api接口注册流程图;图10是本技术实施例提供的平台服务器api服务界面示意图;图11是本技术实施例提供的平台服务器账号管理界面示意图;图12是本技术实施例提供的平台服务器授权管理界面示意图;图13是图2中的步骤s101之前的另一个流程图;图14是图8中的步骤s701的流程图;图15是图9中的步骤s805的流程图;图16是本技术实施例提供的构造wsdl描述流程图;图17是图2中的步骤s105之后的流程图;图18是本技术实施例提供的api接口访问流程图;图19是本技术实施例提供的api接口访问装置功能模块示意图;图20是本技术实施例提供的电子设备的硬件结构示意图。
27.附图标记:web service请求方 110、平台服务器 120、第一模块 121、第二模块 122、第三模块 123、第四模块 124、第五模块 125、接口提供方 130、电子设备 140、处理器 141、存储器 142、输入/输出接口 143、通信接口 144、总线 145。
具体实施方式
28.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本技术,并不用于限定本技术。
29.需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻
辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
30.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。
31.为了更好地理解本技术提供的技术方案,在此对本文中出现的术语进行相应地说明:soap:简单对象访问协议(simple object access protocol),是交换数据的一种协议规范,是一种轻量的、简单的、基于xml的协议,它被设计成在web上交换结构化的和固化的信息。
32.rest:表征状态转移(representational state transfer),一种软件架构风格。如果一个架构符合rest的约束条件和原则,则称其为restful架构。
33.api:应用程序接口(application program interface),是指预先定义的函数,以提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。open api即开放api,以供第三方开发者使用。
34.open api:开放平台。指软件系统通过公开其应用程序编程接口(api)或函数(function)来使外部的程序可以增加该软件系统的功能或使用该软件系统的资源,而不需要更改该软件系统的源代码。
35.xml:可扩展标记语言(extensible markup language),标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
36.json:javascript对象表示法(javascript object notation),是一种轻量级的数据交换格式,json是存储和交换文本信息的语法,类似xml。
37.wsdl:网络服务描述语言(web services description language),是一门基于xml的语言,用于描述web services以及如何对它们进行访问。
38.web services:即web服务,是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的xml标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。
39.json schema:用来对现有的json数据格式进行描述(字段类型、内容长度、是否必须存在、取值示例等)。
40.反射机制:在java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。
41.web服务api的早期标准是soap,其本质提供的是异构化接口,即使有wsdl作为描述文档,也没有改变“服务异构化api”这个事实。所以基于soap的服务五花八门,不利于网络时代的通用共享的需求,而rest就是通用需求下的产物。rest使用了标准http,因此它相对于soap更加简单,而且soap仅支持xml,rest允许多种不同的数据格式,例如json,json更适用于承载数据而且解析起来更快,因此rest也更好地支持浏览器客户端,同时rest具备
更好的性能和可扩展性等优点。
42.因此很多系统对外开放的接口都采用了rest协议,这说明曾经流行的soap现在逐渐被rest替代,但是依然有很多第三方系统以soap协议去调用接口,这使得开发人员在开发基于restful风格的新项目时,仍然需要调用soap web服务,因此需要在开发程序中额外构建soap客户端或者同时写一套rest接口和soap接口,由此增加了项目的开发难度和成本,而且当一个系统对外开发的接口数量较多时,开发难度和成本随之显著增加。
43.基于此,本技术实施例提供了一种api接口访问方法、转换方法、装置、设备及存储介质,能够使得第三方系统可以通过soap协议来调用rest业务接口。
44.本技术实施例提供的api接口访问方法、转换方法、装置、设备及存储介质,具体通过如下实施例进行说明。
45.需要说明的是,在本技术的各个具体实施方式中,当涉及到需要根据用户信息、用户行为数据,用户历史数据以及用户位置信息等与用户身份或特性相关的数据进行相关处理时,都会先获得用户的许可或者同意,例如,获取用户存储的数据以及用户的缓存数据访问请求时,均会先获得用户的许可或者同意;或者,获取系统的内容数据时,需要先获得用户的许可或者同意,在导入数据到新的系统上时,也需要先获得用户的许可或者同意。而且,对这些数据的收集、使用和处理等,都会遵守相关国家和地区的相关法律法规和标准。此外,当本技术实施例需要获取用户的敏感个人信息时,会通过弹窗或者跳转到确认页面等方式获得用户的单独许可或者单独同意,在明确获得用户的单独许可或者单独同意之后,再获取用于使本技术实施例能够正常运行的必要的用户相关数据。
46.本技术实施例中的api接口访问方法可以通过如下实施例进行说明。
47.参照图1所示,图1是本技术一个实施例提供的用于执行api接口访问方法的系统架构示意图。在图1的示例中,该系统架构包括web service请求方110、平台服务器120和接口提供方130。
48.其中,平台服务器120与web service请求方110通信连接,用于接收web service请求方110发起的web service接口请求,例如soap请求,在平台服务器120内实现对接口请求的转换,并向接口提供方130发送转换后符合相应规格的接口请求,例如rest请求。
49.接口提供方130与平台服务器120通信连接,用于接收平台服务器120的请求,对接收到的请求进行处理并返回请求结果给平台服务器120。平台服务器120对接口提供方130返回的请求结果进行解析并组装成web service请求方110对应的响应报文,使web service请求方110通过平台服务器120得以顺利访问接口提供方130的接口。
50.在本技术一些实施例中,web service请求方110与平台服务器120建立远程通信连接,例如互联网连接,平台服务器120与接口提供方130建立通信连接,例如远程互联网连接或本地服务连接。
51.在本技术一些实施例中,web service请求方110可以是手机客户端等第三方系统,也可以是本地平台服务器的soap ui模拟调用工具。
52.本技术实施例描述的系统架构以及应用场景是为了更加清楚的说明本技术实施例的技术方案,并不构成对于本技术实施例提供的技术方案的限定,本领域技术人员可知,随着系统架构的演变和新应用场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
53.本领域技术人员可以理解的是,图1中示出的系统架构并不构成对本技术实施例的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
54.参照图2所示,图2是本技术实施例提供的api接口访问方法的一个可选的流程图,该api接口访问方法应用于平台服务器,例如应用于如图1所示实施例中的平台服务器120,该api接口访问方法包括但不限于包括步骤s101至步骤s105。
55.步骤s101,获取web service接口请求;在本技术一些实施例中,平台服务器120通过与web service请求方110的通信连接从而获取web service请求方110发出的web service接口请求,其中,web service接口请求为soap协议请求。需要指出的是,web service请求方110可以是手机客户端等第三方系统本身,也可以是和第三方系统具有通信连接的其他系统,或者是平台服务器120本地的接口调用工具(如soap ui工具),其可以通过模拟调用发出web service接口请求,本技术实施例对此不做具体限制。
56.步骤s102,获取待访问的api接口的接口信息;在本技术一些实施例中,平台服务器120根据web service接口请求获取待访问的api接口的接口信息,具体的,api接口为rest协议接口,由接口提供方130提供。可以理解的是,接口提供方130可以是远程的也可以是本地服务,对不同的接口提供方130,平台服务器120调用对应的report解析待访问的api接口以获取接口信息。示例性的,web service请求方110发起soap请求(web service接口请求)请求访问接口提供方130提供的rest接口,那么待访问的api接口即为rest接口。
57.步骤s103,得到api接口对应的接口结构描述信息;在本技术一些实施例中,平台服务器120根据接口信息进一步得到api接口对应的接口结构描述信息,具体的,当api接口为rest接口时,接口结构描述信息可以为json schema描述。
58.步骤s104,将web service接口请求转换成rest请求;在本技术一些实施例中,平台服务器120根据接口结构描述信息将web service接口请求转换成rest请求。示例性的,平台服务器120根据接口的json schema描述将web service接口请求转换成rest请求。
59.步骤s105,发送所述rest请求到所述api接口;示例性的,平台服务器120将web service请求方110的soap请求转换成rest请求后,平台服务器120对接口提供方130发起rest请求,可以理解的是,接口提供方为open api接口提供方,因此平台服务器120发送rest请求到api接口以完成web service请求方110发起的请求。
60.参照图3所示,在本技术一些实施例中,步骤s102到s103过程中还可以包括但不限于包括步骤s201步骤s203。
61.步骤s201,根据web service接口请求的xml请求报文,获取请求路径;可以理解的是,web service请求方110发起的web service接口请求为soap请求时,其包含xml请求报文,因此在本技术一些实施例中,平台服务器120通过对xml请求报文进行解析从而获取请求路径。示例性的,从httpservletrequest(用来处理一个对servlet的http格式的请求信息)获取请求路径。
62.步骤s202,获取所述api接口的api接口类名(即api接口classname)和api实现类类名(即api实现类classname);在本技术的一些实施例中,平台服务器120根据请求路径进一步获取api接口的api接口类名和api实现类类名,可以理解的是,还可以获取应用地址信息。
63.可以理解的是,待访问的api接口为开放接口。例如,待访问的api接口可以是具有与平台服务器约定的open api注解的open api接口,open api注解内容可以根据需要自定义,平台服务器120可以通过监听各个api接口是否具有约定的open api注解,以获取和存储api接口的接口信息。
64.示例性的,约定的open api注解部分内容可以如下,主要包含接口运行时间、开放接口声明、对外开放的接口协议、接口名称等信息:@open api注解定义:@retention(retentionpolicy.runtime) 接口运行时间@globalextensionpoint(label = "开放接口声明", config =open apiconfig.class, listener ="com.xxxx.tic.gateway.core.service.ticgatewayapiservice")public @interface open api {/** interfaceabilityextension对应的模块id */string moduleid() default "";/** 接口协议,指需要对外开放的接口api */class《 》 apiinterface();/** 接口名称 */string label();}。
65.示例性的,当api接口为rest接口时,通过请求路径获取实现open api注解的rest接口实例信息,包括rest接口所在的应用信息,api接口类名、api实现类类名,以及应用地址信息。
66.步骤s203,用java反射机制,解析出api接口的对应的接口结构描述信息;在本技术的一些实施例中,根据api接口类名和api实现类类名,通过java的反射机制,解析出api接口对应的接口结构描述信息。示例性的,通过openapi注解获得api接口应用信息,判断接口提供方130是远程还是本地服务,调用对应的report接口进行解析,通过api接口类名及api实现类类名,用java反射解析出调用接口的出入参json schema信息。
67.参照图4所示,在本技术一些实施例中,步骤s203还可以包括但不限于包括步骤s301至步骤s303。
68.步骤s301,用java反射机制获取对应的入参方法信息和出参方法信息;需要指出的是,接口结构描述信息包括入参结构信息和出参结构信息,其中,入参结构信息包括入参方法信息和入参类型信息,出参结构信息包括出参方法信息和出参类型信息。示例性的,一个项目中的java类的父类名为isysnotifytodoanddonequeryapi,当该java类打上@open api后,表示父类里面的所有接口都需要作为开放接口给到第三方系统调用。在本技术一些实施例中,根据api接口类名,用java反射机制获取对应的入参方法信息和出参方法信息。具体的,根据@open api注解声明的isysxxxxopen api,用java反射机
制获取api接口类名,从而获取得到方法信息。
69.步骤s302,用java反射机制获取对应的入参类型信息和出参类型信息;在本技术一些实施例中,根据api实现类类名和入参方法信息、出参方法信息,用java反射机制获取对应的入参类型信息和出参类型信息。示例性的,遍历接口类名里面的方法method信息,通过实现类及method,通过method.getgenericparametertypes()及method.getgenericreturntype()分别拿到方法的入参类型信息和出参类型信息。
70.下面用一个具体示例说明用java反射机制,解析出api接口的对应的接口结构描述信息的过程:1.该示例中,该api接口的java类打上@open api注解后,表示父类isysnotifytodoanddonequeryapi里面的所有接口都需要作为开放接口给到第三方系统调用。
71.该示例中,open api注解主要包括以下内容:@open api(moduleid="simple-app",label="消息中心开放接口",apiinterface=isysxxxxopen api.class)@requestmapping("/api/simple-app/demowebservice ")public class sysxxxxopen api implements isysxxxxopen api {public response《string》 done(@requestbody notifycontext context) {return dispatch(context, cmd_done);}其中,requestmapping为该api接口实例的路径值。通过api接口实例的路径值,可通过java反射的方式解析得到rest api接口的接口类名(api接口classname),并进一步获取接口schema描述的代码,具体示例如下:首先,开放接口isysxxxxopen api的注解声明示例如下:@setter@getterpublic class ticopen apidto{/*接口协议*/private string apiinterface;/** 接口名称 */private string label;/** rest路径 */private string resturl;/** 类型清单 */private map《string, jsonschema》 types;/** rest方法清单 */private list《ticopen apimethoddto》 methods;}开放接口方法描述信息如下:@setter
@getterpublicclassticopenapimethoddto{/**方法名称*/privatestringlabel;/**方法id*/privatestringid;/**入参描述*/privatejsonschemaargument;/**出参描述*/privatejsonschemareturntype;}根据以上@openapi注解声明的isysxxxxopenapi,用java反射获取它本身的api接口类名,即api接口classname(ifaceclazz),以及api实现类的api实现类类名,api实现类classname(implclazz),获取到它所有的方法信息,遍历ifaceclazz里面的方法信息method,通过api实现类的implclazz及方法信息method,用method.getgenericparametertypes()及method.getgenericreturntype()分别拿到方法的入参和出参type,根据不同的type转成对应的schema参数描述。具体过程如下:

根据openapi注解解析restapi,得到api实现类。
72.@returnrestapi返回所有接口名称、每个接口schema描述信息、接口请求路径

根据api接口类名和api实现类类名,获取restapi接口schema描述,包括:构造接口方法schema描述,包含构造基础属性、接口入参、接口出参,得到各类型参数;根据类型参数构造jsonschema。
73.步骤s303,形成接口结构描述信息;在本技术一些实施例中,根据入参类型信息和出参类型信息,形成接口结构描述信息,具体的,根据不同的类型信息形成对应的jsonschema参数描述。可以理解的是,根据api接口类名,通过java反射机制可以获取出该api接口类中具有什么接口及方法,方法中进一步包含有出入参的对象信息,根据对象的属性通过对应的jsonschema参数描述即可形成该api接口的接口结构描述信息。
74.示例性的,以待访问接口为send接口为例,通过java反射拿到send类型入参方法信息、出参方法信息的schema部分描述如下:"label":"发送消息","id":"send",//方法名称"argument":{"type":"object",//入参类型-对象"$schema":"notifysendcontext_in"//入参方法信息},"returntype":{"type":"object",//出参类型-对象"$schema":"response_string_out"//出参方法信息
}},方法出入参对象属性(入参类型信息和出参类型信息)schema部分描述如下:"properties":{//send接口入参属性(入参类型信息)"appname":{"type":"string","id":"appname"}
……
"properties":{//done接口入参属性字段描述"appname":{"type":"string","id":"appname"},
……
"properties":{//出参属性字段描述(出参类型信息)"code":{"type":"string","id":"code","description":"成功/错误的messagekey"},
……
参照图5所示,在本技术一些实施例中,步骤s104还可以包括但不限于包括步骤s401至步骤s404。
75.步骤s401,解析xml请求报文,得到第一对象节点信息;在本技术一些实施例中,第一对象节点为element元素节点,示例性的,平台服务器120对webservice请求方110的soap请求中的xml请求报文进行解析从而获取得到element元素节点信息。
76.步骤s402,根据接口结构描述信息,构建json对象;在本技术一些实施例中,根据jsonschema参数描述信息构建json对象jsonobject。
77.步骤s403,将第一对象节点值对应存储到json对象,得到rest请求的主体信息;在本技术一些实施例中,将第一对象节点信息对应的节点值存储到json对象jsonobject中,从而得到rest请求的主体信息。
78.步骤s404,组装成rest请求;在本技术一些实施例中,根据rest接口的jsonschema参数描述,将jsonobject对象转成rest接口中的json请求参数对象,并提取出rest请求方法名称信息,从而组成rest请求。
79.参照图6所示,在本技术一些实施例中,步骤s401还可以包括但不限于包括步骤s501至步骤s502。
80.步骤s501,将xml请求报文转换成文档类数据,从文档类数据中获取主体信息;在本技术一些实施例中,平台服务器120将soap请求的xml请求报文转换成文档类
数据,可以是txt文档或doc文档,基于文档类数据获取soap请求的主体信息,可以理解的是,主体信息包括接口名name、命名空间dns、调用路径等location。
81.步骤s502,根据第一遍历规则遍历文档类数据主体信息中的第一对象节点,获取得到多个第一对象节点对应的第一对象节点值;可以理解的是,第一遍历规则为逐层遍历或递归遍历,第一对象节点包括纯文本element元素节点和对象类型element元素节点。示例性的,先声明一个json object对象(json对象),用于存储请求所有element元素节点值信息,再层层遍历文档类数据中的element元素节点,如果是纯文本element节点,获取到节点值后,存储到json object对象中,如果是对象类型element节点,则递归遍历element对象子节点,将节点值存储到json object对象。
82.可以理解的是,可根据rest接口参数schema描述,将xml请求报文的主体内容转成rest接口中的json请求参数对象。
83.示例性的,将xml请求报文的主体内容转换成rest请求主体body,以得到rest api请求的json报文的部分操作命令如下:public string getexecutebody() {// 从soap请求xml报文中解析出需要调用的接口名称loadmethod();if (method == null) {return null;}// 定位xml请求报文的主体内容,转换成rest api请求的json报文element element = getbody().elements().get(0);jsonobject json = new jsonobject();// 解析xml请求报文,将节点值存储到jsonobject对象xmltojson(element, json);object value = json.get(soapnaming.operation_input_root);// 根据入参格式转换value = jsonschemautil.convert(value, method.getargument(), false, "",api.gettypes());// 返回return jsonutil.tojsonstring(value);}示例性的,步骤s502中,可将web service请求的xml请求报文转换成文档类数据document,从文档类数据document获取到头部header和主体body信息。先构建声明一个json object对象,用来存储请求所有element节点值信息,再层层遍历或递归遍历document中的element节点,分别处理纯文本element节点与对象类型element节点,获取到节点值后,存储到jsonobject。
84.参照图7所示,在本技术一些实施例中,步骤s101之前还可以包括但不限于包括步
骤s601至步骤s602。
85.步骤s601,监听已实现平台预设注解规则注解的api接口实例;在本技术一些实施例中,需要对外暴露,例如对web端、手机客户端等除了平台服务器120之外的第三方系统暴露的rest接口均通过实现open api自定义注解进行注册,以便统一维护,处理接口认证、鉴权、限流、熔断以及统一日志与监控等工作。可以理解的是,open api接口支持rest与soap协议调用。
86.参照图8所示的open api接口设计流程图,首先通过自定义open api注解,然后再定义open api注解监听器,通过监听扫描open api注解信息判断是否存在open api接口实例。在一些示例中,open api注解监听器可以通过平台服务器中的容器实现。
87.步骤s602,获取并存储监听到的所述api接口实例的请求路径、api接口类名和api实现类类名;在本技术一些实施例中,参照图8所示的open api接口设计示意图,当监听到已实现平台预设注解规则注解的open api接口实例时,获取其requestmapping信息,然后将requestmapping路径作为id、接口协议classname信息注入到缓存,即缓存open api接口实例的请求路径及实例实现类。
88.本技术一些实施例中的实现平台预设注解规则注解的api接口实例,参照图9所示的open api接口注册流程图,首先通过平台服务器120定义rest接口api,api实例实现open api自定义注解,指定接口所属的应用名称、需要对外暴露的接口协议,其中对外是指对web、手机客户端等的第三方系统,然后设置api授权信息,基于授权信息判断是否需要进行认证,如果授权信息不需要认证则代表api授权为匿名访问直接授权成功,否则需要创建认证账号,可以理解的是,身份认证通常是指账号认证,如果是rest方式访问接口,支持接口basic认证或oauth2认证,如果是soap方式访问,则支持ws-security(usertoken)认证,此时api授权为账号访问从而授权成功;授权成功后判断是否需要限流,不需要限流则结束,否则进行全局限流或者接口限流。
89.进一步的,在上述过程中,利用平台服务器120的api网关管理对各个过程进行管理,具体的,api网关管理包括:api服务、账号管理和授权管理。参照图10所示的平台服务器api服务界面示意图,示例性的,平台服务器可以通过注解监听器(可通过容器实现)扫描已实现open api注解的rest接口,并在api服务界面中,所有配置@open api注解的服务都会被读取显示到平台服务器平台的api服务列表中。具体的,包括序号、api名称、api分类、api路径及其他相关操作信息等。
90.参照图11所示的平台服务器账号管理界面示意图,示例性的,账号管理用于配置第三方实际调用时使用的授权账号,由于平台服务器网关对外开放的api通常都要进行身份认证,账号管理则配置提供给第三方的认证账号信息。可以理解的是,在新建账号时,可以选择账号的认证方式,平台服务器平台提供soap和rest两种协议类型,soap对应有ws-security认证,而rest则对应有basic认证或oauth2认证。
91.参照图12所示的平台服务器授权管理界面示意图,示例性的,授权管理中可以配置各个业务模块open api的访问策略,支持账号访问和匿名访问,具体的,可以平台服务器平台的在“账号名称”处配置哪些账号可以访问api服务,在“可访问api服务”处配置哪些api服务可以被第三方服务,以及在“可使用的客户端ip”处限制哪些ip可以访问api服务
等,具体可以按照实际需求进行设置,本技术实施例不做限制。
92.参照图13所示,在本技术一些实施例中,步骤s101之前还可以包括但不限于包括步骤s701至步骤s702。
93.步骤s701,通过预设的wsdl描述获取接口,获取得到api接口的wsdl描述信息;在本技术一些实施例中,平台服务器提供专门的接口,例如wsdl接口,以获取rest接口的wsdl描述信息,不仅可以检测服务可用性,还可以查看接口出入参的详细信息,可以理解的是,通过wsdl接口可基于soap ui模拟调用rest接口。因此,本技术一些实例中通过预设的wsdl描述获取rest接口,从而获取得到rest接口的wsdl描述信息。
94.示例性的,可通过定义一个urlmapping为“/web service/**”的动态get请求接口,支持已实现open api注解的rest接口获取wsdl描述。
95.接口定义信息会在内部上缓存预设时间(如1天),若接口变动后需要立即刷新,执行refresh指令,如:/webservice/simple-app/demoweb service-refresh。若想获取最新接口描述信息,执行wsdl指令,如:/webservice/simple-app/demowebservice-wsdl。
96.步骤s702,组装得到web service接口请求;在本技术一些实施例中,根据得到的wsdl描述信息,组装得到web service接口请求,即soap请求。
97.参照图14所示,在本技术一些实施例中,步骤s701还可以包括但不限于包括步骤s801至步骤s805。
98.步骤s801,监听已实现平台预设注解规则注解的api接口实例;在本技术一些实施例中,首先通过自定义open api注解,然后再定义open api注解监听器,通过扫描open api注解信息监听是否存在open api接口实例。
99.步骤s802,获取并存储监听到的api接口实例的请求路径;在本技术一些实施例中,当监听到已实现平台预设注解规则注解的open api接口实例时,获取并存储监听到的api接口实例的请求路径,具体的,open api注解监听器把监听到所有已实现open api注解的接口实例的请求路径值作为open api唯一标识id,并将其缓存起来。
100.步骤s803,得到api接口的接口信息;在本技术一些实施例中,open api注解监听器还将请求路径与api接口实现类类名缓存起来,在api接口调用时,通过识别url请求路径,获取到调用api接口的接口信息。
101.步骤s804,得到api接口对应的接口结构描述信息;在本技术一些实施例中,基于open api接口实现类类名,通过java反射机制获取得到open api接口下的所有出入参描述信息,即得到api接口对应的接口结构描述信息。
102.步骤s805,根据接口结构描述信息和预设的目标格式模板,构建api接口的wsdl描述信息;在本技术一些实施例中,根据出入参描述信息和目标格式模板,例如wsdl描述模板构建api接口的wsdl描述信息。
103.在本技术一些实施例中,api接口的接口信息包括api接口类名,所以根据api接口实例的请求路径得到api接口的接口信息,包括得到api接口类名。示例性的,open api注解监听器将请求路径与api接口实现类类名缓存起来,在api接口调用时,通过识别url请求路
径,获取到调用api接口的接口信息及api接口类名。
104.进一步的,根据api接口类名和api实现类类名,用java反射机制,解析出api接口对应的接口结构描述信息。示例性的,得到open api接口下的所有出入参描述信息。
105.参照图15所示,在本技术一些实施例中,步骤s805还可以包括但不限于包括步骤s901至步骤s904。
106.步骤s901,遍历api接口的对应的接口结构描述信息,为wsdl基础元素节点赋值;可以理解的是,wsdl基础元素节点包括以下的至少一种:接口名、命名空间、调用路径。在本技术一些实施例中,根据wsdl标准规范设置wsdl基础元素节点,如接口名name、命名空间dns、调用路径location等,通过遍历open api接口json schema出入参描述给上述基础元素节点进行赋值。
107.步骤s902,根据接口结构描述信息对应的参数类型,构造wsdl类型节点;在本技术一些实施例中,根据java反射机制生成rest接口json schema参数描述时获取到的不同参数类型集合,遍历构造出complextype对象类型节点和simpletype枚举类型节点的wsdl类型节点。
108.步骤s903,根据接口结构描述信息对应的方法信息,构造生成对应的element元素节点;在本技术一些实施例中,调取rest接口所有的方法描述json schema,根据不同类型的json schema构造生成对应的element元素节点。
109.步骤s904,利用目标格式模板,将wsdl基础元素节点、wsdl类型节点、element元素节点组装形成目标格式的wsdl描述信息;在本技术一些实施例中,动态生成wsdl文档描述,需要预定义wsdl模板的xml文档,以便精确描述soap接口信息,因此文档规范必须遵循wsdl xml模式。具体的,文档内容定义types、message、operation、porttype、bingding、port、service等元素节点,接口描述信息指定为参数占位符。wsdl上下文构造完成组装的根节点对象传递给目标格式模板,组装形成目标格式的wsdl描述信息。
110.在本技术一些实施例中,关于采集rest接口数据并构造wsdl上下文的具体流程参照图16所示,首先接收到wsdl接口描述请求,然后通过获取open api接口实例信息,从而组装open api接口的json schema信息,构造wsdl上下文,组装接口名name、命名空间dns、调用路径location等基础属性,然后构造xml schema数据类型定义类型节点,具体的,解析对象参数类型构造complextype节点,或者解析枚举参数类型构造simpletype节点,然后解析api出入参属性,遍历方法信息,接着解析api接口schema描述构造操作节点,最后判断是否转换成功,如果转换成功则返回wsdlview成功视图,否则判断失败原因并组装失败信息后返回wsdlview失败视图。可以理解的是,当open api实例不存在、调用的接口api不存在或者wsdl上下文构造失败时,也对失败的原因进行判断并组装失败信息后返回wsdl失败视图。
111.示例性的,可通过定义一个urlmapping为“/web service/**”的动态get请求接口,支持已实现open api注解的rest接口获取wsdl描述。若想获取最新接口描述信息,执行wsdl指令,如:/web service/simple-app/demoweb service-wsdl。
112.示例性的,第三方(如web service接口请求方)可以通过以下示例请求获取rest
接口的wsdl描述:请求路径:http://127.0.0.1:xxxx/web service/simple-app/demowebservice-wsdlxxxx请求方式:get请求类型:application/xml。
113.参照图17所示,在本技术一些实施例中,步骤s105之后还可以包括但不限于包括步骤s1001至步骤s1005。
114.步骤s1001,获取来自api接口的json响应报文;在本技术一些实施例中,当平台服务器120发送rest请求到接口提供方130后,接口提供方130对接收到的rest请求进行解析处理后应答形成对应的json响应报文,从而通过api接口返回被平台服务器120获取。
115.步骤s1002,解析得到响应主体信息;在本技术一些实施例中,平台服务器120对接收到的json响应报文进行解析从而得到响应主体信息,可以理解的是,响应主体信息包括接口名等。
116.步骤s1003,获取预设的xml响应报文模板;在本技术一些实施例中,web service请求方110发起的请求是基于xml的soap请求,因此平台服务器120需要获取预设的xml响应报文模块,以将接口提供方130返回的json响应报文进行转换。
117.在本技术一些实施例中,soap协议转换需自定义soap请求响应xml模板依赖文件,即xml响应报文模板。xml响应报文模板可以包括调用失败xml模板、调用成功xml模板,xml响应报文模板可以包含xml响应报文的格式,主体信息参数指定为参数占位符。
118.步骤s1004,组装得到xml响应报文;在本技术一些实施例中,根据响应主体信息和xml响应报文模板,组装得到xml响应报文。
119.示例性的,可以将xml响应报文模板中的参数占位符替换为响应主体信息,以组装形成xml响应报文。例如,通过方法名组装出soap响应报文(xml响应报文)中的“ns2:”、与命名空间dns等信息,用rest出参json schma描述信息,递归解析出数组、对象与简单类型的rest出参信息(响应主体信息),根据wsdl标准规范(xml响应报文模板)组装成对应xml响应报文。
120.例如,对于调用成功的情况,可以获取调用成功xml模板,将调用成功xml模板中的参数占位符替换为调用成功json响应报文的响应主体信息,以组装形成调用成功的xml响应报文;对于调用失败的情况,可以获取调用失败xml模板,将调用失败xml模板中的参数占位符替换为调用失败json响应报文的响应主体信息,以组装形成调用失败的xml响应报文。
121.步骤s1005,发送给web service请求方。
122.在本技术一些实施例中,将组装好的xml响应报文发送给web service请求方110,示例性的,web service请求方110可以是soap ui模拟工具或其他第三方系统,本技术实施例对此不做限制。
123.示例性的,解析rest接口返回json响应报文,转成xml响应报文的部分过程如下:

获取rest接口返回json响应报文;

递归解析json响应报文的body信息;

将解析得到的json响应报文的body信息传递给soap-response.xml(xml响应报文模板。
124.至此,平台服务器完成了从web service接口请求到请求响应的过程,实现了通过soap协议访问rest接口。
125.在本技术一些实施例中,在api接口访问过程中还包括获取api接口的访问策略,包括鉴权访问策略、限流访问策略、熔断策略中的至少一种。
126.示例性的,当访问策略包括鉴权访问策略时,根据web service接口请求获取待访问的api接口的接口信息过程中还包括:根据web service接口请求,获取待访问的api接口的接口信息和访问账号,根据访问账号信息和预设的账号权限对应关系,判断所述访问账号的访问权限。
127.示例性的,当访问策略包括限流访问策略,根据web service接口请求,获取待访问的api接口的接口信息之后还包括:获取待访问的api接口的限流访问策略,根据限流访问策略,对api接口进行对应流量控制。
128.示例性的,当访问策略包括熔断访问策略,根据web service接口请求,获取待访问的api接口的接口信息之后还包括:获取待访问的api接口的熔断访问策略,根据熔断访问策略,对api及接口进行对应熔断保护控制。
129.下面以三个示例进一步说明本技术api接口访问方法。
130.示例一参照图18所示的api接口访问流程图,在本技术一些实施例中,包括以下步骤:1.web service请求方110发起的web service接口请求为soap请求,可以理解的是,web service请求方可以是第三方系统,也可以是soap ui模拟工具。
131.示例性的,当soap ui模拟工具发起soap请求前,可以通过get请求连接wsdl接口从而获取wsdl描述文档模块,然后根据文档模板对参数进行填充形成入参报文,即可模拟调用web service接口。
132.2.平台服务器120根据soap请求获取soap接口详情,然后解析soap请求中的xml请求报文,获取待访问的rest接口的接口信息。
133.3.平台服务器120接着对待访问的接口信息进行接口鉴权,如果鉴权不通过,则结束web service请求方的接口访问请求。
134.示例性的,通过soap请求url信息,判断该接口是否需要ws-usertoken认证鉴权,需要鉴权则解析出的报文头部信息获取到用户名密码,处理鉴权逻辑。
135.4.如果鉴权通过,则获取json schema接口描述,将xml请求报文转换成rest请求主体,平台服务器120对接口提供方130发起rest请求。
136.5.接口提供方130对接收到的rest请求进行解析处理后返回请求结果到平台服务器120。具体的,执行rest请求过程中通过调用对应的rest接口,获取接口响应json报文。
137.6.解析rest接口响应的json响应报文,组装成xml响应报文。由于不同的接口返回的数据结构不同,本技术统一以string类型接收返回参数。可以理解的是,请求结果为基于的json的响应报文,平台服务器120对json响应报文进行解析后组装形成对应的xml响应报文,即soap调用响应解析。具体的,可通过方法名组装出soap响应报文中的“ns2:”、与命名
空间“dns”等信息,使用rest出参jsonschema描述信息,递归解析出数组、对象与简单类型的rest出参信息,根据wsdl描述文档模板规范,组装成对应xml响应报文。
138.7.将发送xml响应报文至webservice请求方,完成对rest接口的访问请求。
139.通过webservice请求调用rest接口的请求报文和响应报文示例如下,该示例中,rest接口对应为send服务(发送信息服务)。
140.其中,webservice请求路径:http://127.0.0.1:xxxx/webservice/simple-app/demowebservicexxxx请求方式:post请求类型:application/xmlwebservice接口请求报文:《soapenv:envelopexmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:api="http://api.xxxx.sys.xxxx.com/"》《soapenv:header/》//soap头部信息《soapenv:body》//body请求体《api:send_in》//接口名称《arg0》//接口入参节点《appname》paas《/appname》《creator》88888888《/creator》《entityid》2e1hp8j1fw10v1fjgw81《/entityid》《entityname》com.xxxx.kms.exam.activity《/entityname》《link》#/current/kms-exam/kmsexamcandidatedetail/1fdp93e31w8mnw2gw3h21doj3nl324n2i9w0《/link》《modulename》kms-exam《/modulename》《notifytype》todo,dingtalktodo《/notifytype》《orgproperty》fdloginname《/orgproperty》《subject》请您参加【知识问答】考试-050601《/subject》《targets》["11118888"《/targets》《todolevel》3《/todolevel》《todotype》1《/todotype》《/arg0》《/api:send_in》《/soapenv:body》《/soapenv:envelope》xml响应报文(调用成功):《soap:envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"》《soap:body》//body响应体
《ns2:send_outxmlns:ns2="http://api.xxxx.sys.xxxx.com/"》《return》//接口出参节点《msg》您的操作已成功!《/msg》《traceid》1g8lo51mtw8swjhpsw10cjns4knv4am3mkw0《/traceid》《code》return.optsuccess《/code》《data》1g8lo51nlw8vwckon8w3k11l1lhgh5gg2nw0《/data》《success》true《/success》《/return》《/ns2:send_out》《/soap:body》《/soap:envelope》本技术实施例第一方面提供的api接口访问方法,包括:获取webservice接口请求,根据所述webservice接口请求,获取待访问的api接口的接口信息,根据所述接口信息,得到所述api接口对应的接口结构描述信息,根据所述接口结构描述信息,将所述webservice接口请求转换成rest请求,发送所述rest请求到所述api接口。本技术实施例与相关技术相比,通过对webservice接口请求信息的解析,并根据待访问api接口的接口结构描述信息将webservice接口请求信息转换为待访问api接口的访问请求,实现通过soap协议来访问rest业务接口,从而能够实现接口统一协议调用,进而有效降低接口提供方系统的开发和维护的工作量。
[0141]
综上所述,本技术实施例可将soap协议转为rest协议,可用于第三方系统(webservice请求方)通过平台服务器调用本系统已指定的openapi的场景。在接口调用前,可以通过java反射的方式解析接口属性,生成xml形式的wsdl描述,使得第三方系统可以通过soap协议来调用业务接口,而各个业务模块不需要单独为接口去发布webservice服务。系统开发的时候只需要提供rest协议的接口,通过在网关层(或拦截器,即平台服务器)中对请求报文进行转换。另外,对外提供接口的wsdl的地址,则可以自动把rest接口对外开放为soap接口。
[0142]
第三方系统常用的接口协议有:rest协议、soap协议等方式,每个接口也会有细微的差异,而本技术实施例对外接口统一以rest协议调用,利用平台服务器的协议转换功能,能将第三方系统的接口差异抹平,实现零编码快速集成不同接口协议。
[0143]
另外,当业务模块restapi接口需要暴露给第三方系统调用时,通过在api接口实现类声明openapi注解可以将业务模块的接口调用托管给集成平台。协议转换使本系统接口既支持rest方式调用,也支持soap方式调用。而通过openapi注解声明,还能利用平台服务器实现本系统预定义的集成能力,如接口认证、限流、熔断、统一日志与监控,使整个集成过程更加无缝连接。
[0144]
在本技术一些实施例中,提供一种接口描述转换方法,具体步骤可以包括但不限于包括以下步骤s1101至s1105。
[0145]
步骤s1101,监听已实现平台预设注解规则注解的api接口实例;在本技术一些实施例中,首先通过自定义openapi注解,然后再定义openapi注解监听器,通过扫描openapi注解信息监听是否存在openapi接口实例,可以理解的是,
api接口为rest协议接口。
[0146]
步骤s1102,获取并存储监听到的api接口实例的请求路径;在本技术一些实施例中,当监听到已实现平台预设注解规则注解的open api接口实例时,获取并存储监听到的api接口实例的请求路径,具体的,open api注解监听器把监听到所有已实现open api注解的接口实例的请求路径值作为open api唯一标识id,并将其缓存起来。
[0147]
步骤s1103,得到api接口的接口信息;在本技术一些实施例中,open api注解监听器还将请求路径与api接口实现类类名缓存起来,在api接口调用时,通过识别url请求路径,获取到调用api接口的接口信息。
[0148]
步骤s1104,得到api接口对应的接口结构描述信息;在本技术一些实施例中,基于open api接口实现类类名,通过java反射机制获取得到open api接口下的所有出入参描述信息,即得到api接口对应的接口结构描述信息。
[0149]
步骤s1105,根据接口结构描述信息和预设的目标格式模板,构建api接口的wsdl描述信息;在本技术一些实施例中,根据描述信息和目标格式模板,例如wsdl描述模板进而构建api接口的wsdl描述信息。
[0150]
在本技术一些实施例中,平台服务器平台提供专门的接口,例如wsdl接口,以获取rest接口的wsdl描述信息,不仅可以检测服务可用性,还可以查看接口出入参的详细信息,可以理解的是,通过wsdl接口可基于soap ui模拟调用rest接口。因此,本技术一些实例中通过预设的wsdl描述获取rest接口,从而获取得到rest接口的wsdl描述信息。
[0151]
示例性的,wsdl接口定义,通过定义一个urlmapping为“/web service/**”的动态get请求接口,支持已实现open api注解的rest接口获取wsdl描述。
[0152]
接口定义信息会在内部上缓存预设时间(如1天),若接口变动后需要立即刷新,执行refresh指令,如:/web service/simple-app/demoweb service-refresh。若想获取最新接口描述信息,执行wsdl指令,如:/web service/simple-app/demoweb service-wsdl。
[0153]
在本技术一些实施例中,api接口的接口信息包括api接口类名,所以根据api接口实例的请求路径得到api接口的接口信息,包括得到api接口类名。示例性的,open api注解监听器将请求路径与api接口实现类类名缓存起来,在api接口调用时,通过识别url请求路径,获取到调用api接口的接口信息及api接口类名。
[0154]
进一步的,根据api接口类名和api实现类类名,用java反射机制,解析出api接口对应的接口结构描述信息。示例性的,得到open api接口下的所有出入参描述信息。
[0155]
在本技术一些实施例中,步骤s1105还可以包括但不限于包括步骤s1201至步骤s1204。
[0156]
步骤s1201,遍历api接口的对应的接口结构描述信息,为wsdl基础元素节点赋值;可以理解的是,wsdl基础元素节点包括以下的至少一种:接口名、命名空间、调用路径。在本技术一些实施例中,根据wsdl标准规范设置wsdl基础元素节点,如接口名name、命名空间dns、调用路径location,遍历open api接口json schema出入参描述给上述基础元素节点进行赋值。
[0157]
步骤s1202,根据接口结构描述信息对应的参数类型,构造wsdl类型节点;
在本技术一些实施例中,根据java反射机制生成rest接口json schema参数描述时获取到的不同参数类型集合,遍历构造出complextype对象类型节点和simpletype枚举类型节点的wsdl类型节点。
[0158]
步骤s1203,根据接口结构描述信息对应的方法信息,构造生成对应的element元素节点;在本技术一些实施例中,调取rest接口所有的方法描述json schema,根据不同类型的json schema构造生成对应的element元素节点。
[0159]
步骤s1204,利用目标格式模板,将wsdl基础元素节点、wsdl类型节点、element元素节点组装形成目标格式的wsdl描述信息;在本技术一些实施例中,动态生成wsdl文档描述,需要预定义wsl模板的xml文档,以便精确描述rest接口信息,因此文档规范必须遵循wsdl xml模式。具体的,文档内容定义types、message、operation、porttype、bingding、port、service等元素节点,接口描述信息指定为参数占位符。wsdl上下文构造完成组装的根节点对象传递给目标格式模板,组装形成目标格式的wsdl描述信息。
[0160]
在本技术一些实施例中,关于采集rest接口数据并构造wsdl上下文的具体流程参照图16所示,首先接收到wsdl接口描述请求,然后通过获取open api接口实例信息,从而组装open api接口的json schema信息,构造wsdl上下文,组装接口名name、命名空间dns、调用路径location等基础属性,然后构造xml schema数据类型定义类型节点,具体的,解析对象参数类型构造complextype节点,或者解析枚举参数类型构造simpletype节点,然后解析api出入参属性,遍历方法信息,接着解析api接口schema描述构造操作节点,最后判断是否转换成功,如果转换成功则返回wsdlview成功视图,否则判断失败原因并组装失败信息后返回wsdlview失败视图。可以理解的是,当open api实例不存在、调用的接口api不存在或者wsdl上下文构造失败时,也对失败的原因进行判断并组装失败信息后返回wsdl失败视图。
[0161]
示例性的,wsdl接口定义,通过定义一个urlmapping为“/web service/**”的动态get请求接口,支持已实现open api注解的rest接口获取wsdl描述。
[0162]
接口定义信息会在内部上缓存预设时间(如1天),若接口变动后需要立即刷新,执行refresh指令,如:/web service/simple-app/demoweb service-refresh。若想获取最新接口描述信息,执行wsdl指令,如:/web service/simple-app/demoweb service-wsdl。
[0163]
示例性的,第三方(如web service接口请求方)可以通过以下示例请求获取rest接口的wsdl描述:请求路径:http://127.0.0.1:xxxx/web service/xxxxx请求方式:get请求类型:application/xml。
[0164]
本技术实施例第二方面提供的接口描述转换方法,包括:监听已实现平台预设注解规则注解的api接口实例,获取并存储监听到的所述api接口实例的请求路径,根据所述api接口实例的请求路径,得到所述api接口的接口信息,根据所述接口信息,得到所述api接口对应的接口结构描述信息,根据所述接口结构描述信息和预设的目标格式模板,构建所述api接口的wsdl描述信息。本技术实施例与相关技术相比,通过将api接口的接口描述
转换为wsdl描述信息,以方便第三方查看,从而方便用户通过soap协议来访问rest业务接口。即是说,本技术实施例系统开发的时候只需要提供rest协议的接口,对外提供接口的wsdl的地址,实现自动把rest接口对外开放为soap接口。
[0165]
综上所述,本发明一方面公开了一种rest接口转换为web service接口的方法,能将内部的rest协议转换成soap协议,屏蔽了接口差异,避免同一接口多次编写的麻烦;另一方面公开了一种rest接口的描述转换方法,可以将rest接口的接口描述转换为wsdl描述信息。主要解决的问题有两个:一是动态生成接口的wsdl信息,二是使用soap方式调用接口过程中,对接口参数进行数据结构转换。
[0166]
参照图19所示,图19是本技术实施例提供的一种api接口访问装置功能模块示意图,可以实现上述api接口方法或api接口描述转换方法,该api接口访问装置设置于平台服务器120中,具体包括:第一模块121,用于获取web service接口请求;其中,web service接口请求为soap协议请求。在本技术一些实施例中,将发起web service接口请求的对象称为web service请求方110,可以理解的是,web service请求方110可以是手机客户端、web端等第三方系统,也可以是平台服务器120本地的soap ui模拟工具,本技术实施例对此不做限制。
[0167]
第二模块122,用于根据web service接口请求,获取待访问的api接口的接口信息。在本技术一些实施例中,web service请求方110发起的soap请求希望访问由接口提供方130提供的rest接口,可以理解的是,接口提供方130可以是远程的也可以是本地服务,对不同的接口提供方130,api接口访问装置中的第二模块122通过调用对应的report解析待访问的api接口,即rest接口,以获取rest接口信息。
[0168]
第三模块123,用于根据接口信息得到api接口对应的接口结构描述信息。在本技术一些实施例中,第三模块123根据第二模块122得到的接口信息,进一步得到api接口对应的接口描述信息,示例性的,当api接口为rest接口时,接口结构描述信息为json schema描述。
[0169]
第四模块124,用于根据接口结构描述信息,将web service接口请求转换成rest请求。在本技术的一些实施例中,第四模块124根据接口结构描述信息,即json schema描述信息,转换成rest请求。
[0170]
第五模块125,用于发送所述rest请求到所述api接口。在本技术一些实施例中,在第四模块124将web service请求方110的soap请求转换成rest请求后,平台服务器120对接口提供方130发起rest请求,可以理解的是,接口提供方为open api接口提供方,因此第五模块125发送rest请求到api接口以完成web service请求方110发起的请求。
[0171]
请参阅图20,图20示意了本技术一实施例的电子设备的硬件结构,电子设备140包括:处理器141,可以采用通用的cpu(central processing unit,中央处理器)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本技术实施例所提供的技术方案;存储器142,可以采用只读存储器(read only memory,rom)、静态存储设备、动态存储设备或者随机存取存储器(random access memory,ram)等形式实现。存储器142可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术
方案时,相关的程序代码保存在存储器142中,并由处理器141来调用执行本技术实施例中的api接口访问方法及接口描述转换方法;输入/输出接口143,用于实现信息输入及输出;通信接口144,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信;总线145,在设备的各个组件(例如处理器141、存储器142、输入/输出接口143和通信接口144)之间传输信息;其中处理器141、存储器142、输入/输出接口143和通信接口144通过总线145实现彼此之间在设备内部的通信连接。
[0172]
本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述api接口访问方法或api接口描述转换方法。
[0173]
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0174]
本技术实施例描述的实施例是为了更加清楚的说明本技术实施例的技术方案,并不构成对于本技术实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
[0175]
本领域技术人员可以理解的是,图中示出的技术方案并不构成对本技术实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
[0176]
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0177]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
[0178]
本技术的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0179]
应当理解,在本技术中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:只存在a,只存在b以及同时存在a和b三种情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指
这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
[0180]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0181]
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0182]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0183]
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例的方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,简称rom)、随机存取存储器(random access memory,简称ram)、磁碟或者光盘等各种可以存储程序的介质。
[0184]
以上参照附图说明了本技术实施例的优选实施例,并非因此局限本技术实施例的权利范围。本领域技术人员不脱离本技术实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本技术实施例的权利范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1