基于Internet的OpenAPI自动获取方法

文档序号:6356558阅读:148来源:国知局
专利名称:基于Internet的OpenAPI自动获取方法
技术领域
本发明涉及数据加载领域,本发明将hternet中大量的OpenAPI (Application Programming hterface,应用编程接口 )数据自动或半自动(手动配置)地加载到数据库中,特别涉及一种基于hternet的OpenAPI自动获取方法。
背景技术
在互联网时代,将网站的服务封装成一系列计算机易识别的数据接口开放出去供第三方开发者使用的行为就叫做开放网站的API,与之对应的所开放的API就称作 OpenAPI0目前互联网上流行的OpenAPI不论是种类、服务质量、还是规范化和使用情况都有了很大的提升,可以说已经由初期的发展转到了较为成熟的发展。其中Google已经开放了包括 GoogleMaps、karch、Video 和 Advertising 等 50 多个 OpenAPI,尤其是 GoogleMaps 衍生出众多的Web应用,也推动了更多OpenAPI的开放。Yahoo、Microsoft、Amazon、eBay、 Facebook、Twitter和Flickr等也纷纷开放平台或提供相应的OpenAPI。与此同时,国内各大网站纷纷宣布推出开放平台,其中有新浪和搜狐等门户网站,也有最近涌现的人人网和 Myspace等社交类网站。OpenAPI数量的快速增加以及功能的日益丰富,为用户提供了更加方便、快捷开放能力,也使得越来越多的开发者能够接触到Web应用开发的前沿,可以很容易地在自己的网站中构建各种功能丰富、交互性强的应用程序。发明人在实现本发明的过程中,发现现有技术至少存在以下缺点由于OpenAPI没有一个统一的接口规范,使得开发者在使用不同网站的同种类型的OpenAPI时,如Google地图API和百度地图API,需要阅读不同的API类参考文档,这就给开发者的开发带来了诸多不便。

发明内容
为了方便开发者的开发和应用,满足实际应用中的需要,本发明提供了一种基于 Internet的OpenAPI自动获取方法,详见下文描述一种基于hternet的OpenAPI自动获取方法,所述方法包括以下步骤(1)判断OpenAPI协议的类型是否是Ajax协议或Rest协议,如果是,则执行步骤 (2);如果否,则为Soap协议,执行步骤(3);(2)通过OpenAPI Home的URL获取存放OpenAPI详细信息的页面,判断是否获取到所述存放OpenAPI详细信息的页面,如果是,执行步骤(4);如果否,流程结束;(3)通过OpenAPI Home的URL获取存放OpenAPI详细信息的WSDL文档,判断是否获取到所述存放OpenAPI详细信息的WSDL文档,如果是,执行步骤(5);如果否,流程结束;(4)根据所述存放OpenAPI详细信息的页面,获取网页源码,并分析网页结构,执行步骤(6);(5)根据所述存放OpenAPI详细信息的WSDL文档,解析WSDL文档,执行步骤(7);
(6)根据所述网页结构编写和所述网页结构相应的正则表达式,执行步骤(8);(7)判断解析是否成功,如果是,执行步骤(9);如果否,流程结束;(8)判断OpenAPI协议类型是否是所述Ajax协议,如果是,执行步骤(10);如果否,则为所述Rest协议,执行步骤(11);(9)获取所述Soap协议的详细信息,执行步骤(12);(10)通过正则表达式匹配页面源代码,获取Ajax协议的详细信息,执行步骤 (12);(11)通过正则表达式匹配页面源代码,获取Rest协议的详细信息,执行步骤 (12);(1 根据所述Ajax协议、所述Rest协议和所述Soap协议将所述Soap协议的详细信息、所述Ajax协议的详细信息和所述Rest协议的详细信息加载到数据库相应的表中;(13)判断是否加载成功,如果是,执行步骤(14);如果否,流程结束。(14)返回成功信息,流程结束。所述方法还包括将包含Ajax协议或Rest协议的所述OpenAPI详细信息的页面读取至本地文件。所述方法还包括将包含Soap协议的所述OpenAPI详细信息的WSDL文档下载到本地。在步骤(10)和步骤(11)之后,步骤(1 之前,所述方法还包括对获取到的所述Ajax协议的详细信息进行人工校验;对获取到的所述Rest协议的详细信息进行人工校验。在执行步骤( 之前,所述方法还包括判断是否已有所述存放OpenAPI详细信息的页面,如果是,执行步骤(4);如果否, 则执行步骤(2)。在执行步骤( 之前,所述方法还包括判断是否已有所述存放OpenAPI详细信息的WSDL文档,如果是,执行步骤(5);如果否,则执行步骤(3)。在执行步骤( 或步骤(3)时,所述方法还包括在获取所述存放OpenAPI详细信息的页面或所述存放OpenAPI详细信息的WSDL 文档时,采用UTF-8格式。本发明提供的技术方案的有益效果是本发明提供了一种基于hternet的OpenAPI自动获取方法,本发明能够以自动或半自动(手动配置)的方式主动地抓取OpenAPI数据,通过必要的分解和重组,封装为完整的OpenAPI并添加入库,从而不断扩大开放能力管理平台的OpenAPI数据量,为面向 OpenAPI的开放能力管理平台打好基础;使用本方法可以将hternet中大量的OpenAPI自动加载到数据库中,而且即使某个OpenAPI的信息发生变化,也不需要重新开发,只需要修改配置文件中的正则表达式就可以解决,为OpenAPI数据的获取提供了便利。


图1为本发明提供的架构示意5
图2为本发明提供的基于hternet的OpenAPI自动获取方法的示意图;图3为本发明提供的基于hternet的OpenAPI自动获取方法的流程图;图4为本发明提供的存储OpenAPI基本信息的表字段的结构示意图;图5为本发明提供的Ajax协议的表结构的示意图;图6为本发明提供的Rest协议的表结构的示意图;图7为本发明提供的Soap协议的表结构的示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。为了方便开发者的开发和应用,满足实际应用中的需要,本发明实施例提供了一种基于hternet的OpenAPI自动获取方法,参见图1、图2和图3,详见下文描述在本发明实施例中,OpenAPI的协议类型分为三种,分别为Ajax协议、Rest协议和Soap协议。对于每一个OpenAPI,都由基本信息和详细信息两个部分组成。基本信息主要用于用户的检索以及查看,包括API名称、标签、协议类型和提供者等信息;详细信息主要用于调用,包括调用时需要的类、方法、输入,以及返回结果等信息,对于不同协议类型的 OpenAPI,调用时需要的信息类型也各不相同,本发明实施例提供的架构如图1所示。从图1 中可以看出,本发明实施例主要分为三个部分,分别为数据获取、解析数据和持久化。下面分别对各个部分进行概要的介绍。1、数据获取基于hternet不断查找新的OpenAPI ;尽管hternet中有着大量的OpenAPI,但如果盲目地在hternet中进行 OpenAPI的搜索,则会花费大量的精力及时间,因此本发明实施例从注册有大量OpenAPI的 Programmable Web出发,在其中查找当前最流行、使用最多的OpenAPI,需要的操作可分为以下两个步骤①在Programmable Web中,为获取OpenAPI的基本信息,需要解析Programmable Web中的网页,以获取OpenAPI的名称、标签、协议和API HomeURI等基本信息;②由于!Programmable Web中只包含OpenAPI的基本信息,不包含详细信息,因此需要转到API Home URI中找到包含有相应OpenAPI详细信息的页面,在该包含有相应 OpenAPI详细信息的页面获取到详细信息。2、解析数据获取OpenAPI的详细信息;由于本发明实施例涉及了三种协议类型的OpenAPI,而不同协议的OpenAPI的详细信息类型也各不相同,因此需要针对不同协议的OpenAPI制定不同的解析方案,分别为· Ajax协议该协议的OpenAPI的详细信息是以页面的形式进行展现的,因此需要对包含有Ajax协议的OpenAPI的详细信息的页面进行解析,从中获取该OpenAPI提供的类、类所具有的属性和方法、方法需要的输入以及返回的结果;· Rest协议该协议的OpenAPI的详细信息也是以页面的格式进行存放的,因此要做的也是解析页面,与解析Ajax协议的OpenAPI的详细信息不同的是,对于Rest协议的 OpenAPI,需要获取的详细信息为该OpenAPI包含的方法、方法中需要的输入以及返回的结果列表;
· Soap协议不同于以上两种协议的OpenAPI,该协议的OpenAPI的详细信息以 WSDL文档的方式进行存储,因此要进行的操作就是解析包含有Soap协议的OpenAPI的详细信息的WSDL文档,获取该OpenAPI提供的服务、调用服务时执行的操作、操作需要的输入和返回的结果。在解析Ajax协议的OpenAPI时,着重获取的是该OpenAPI所包含的类、类的属性以及方法、方法需要的输入和返回的结果,因此就需要对页面格式即页面源代码进行细致的分析,分析哪块代码包含该OpenAPI的类的信息,找出这些代码的共性,然后编写出相应的正则表达式,通过正则表达式去匹配页面源代码,获取类的信息,之后获取每个类的属性和方法、每个方法的输入和返回的结果。以Google Maps API的类及其描述信息的获取为例,包含Google MapsAPI详细信息的页面的网址为http//code.google, com/intl/en/apis/maps/documentation/reference, html,在对包含Google Maps的类及其描述的代码进行分析后,编写出用于匹配源代码的正则表达式为<h2 id=" (["〃 ] *)" >Class (["<] * ) </h2Xp> ((. ) * )</p>,然后通过Pattern类的compile方法将上述正则表达式编译并赋值给Pattern类的一个对象,之后这个对象使用matcher方法生成一个Matcher实例,接着就可以使用该 Matcher实例以编译的正则表达式为基础对页面源代码进行匹配工作,通过调用find方法在页面源代码中查找下一个匹配子串,在查找到的每个子串中使用group方法获取与指定的组相匹配的内容,即是Google Maps所包含的类的名称及其描述。Rest协议的OpenAPI的解析过程类似于Ajax协议,只是获取的信息类型不同,本发明实施例对此不再赘述。由于Soap协议的OpenAPI的详细信息是以WSDL文档的形式进行存放的,因此解析Soap协议的OpenAPI的详细信息的过程就是解析WSDL文档。在解析WSDL文档时有很多选择方案,如SAX、D0M等,在本发明实施例中,采用wsdl4j来解析WSDL文档,依次得到该 OpenAPI提供的服务、服务调用的操作、操作需要的输入和返回的结果。3、持久化进行OpenAPI的存储。前面提到过,对于不同协议的OpenAPI,其基本信息的数据格式是一样的,而详细信息的数据格式不一样,因此对于基本信息的存放采用一个数据表即可,而对于详细信息的存储则需要不同的数据表,涉及的操作分别为①设计一个数据表用于存放OpenAPI的基本信息;②对于不同协议的OpenAPI,设计不同的数据表,以Rest协议的OpenAPI为例,每个Rest协议的OpenAPI都包含有至少一个方法,而每个方法也可能包含多个输入,因此,为了优化数据库,需要采用多张表格用于每种协议的OpenAPI的详细信息的存储;③定义对OpenAPI数据库操作的接口,通过接口实现基本的数据库操作。101 判断OpenAPI协议的类型是否是Ajax协议或Rest协议,如果是,则执行步骤 102 ;如果否,则为Soap协议,执行步骤103 ;102 通过OpenAPI Home的URL获取存放OpenAPI详细信息的页面,判断是否获取到存放OpenAPI详细信息的页面,如果是,执行步骤104 ;如果否,流程结束;其中,为了提高工作效率,在执行步骤102之前,本发明实施例还包括
7
判断是否已有存放OpenAPI详细信息的页面,如果是,执行步骤104 ;如果否,则执行步骤102。103 通过OpenAPI Home的URL获取存放OpenAPI详细信息的WSDL文档,判断是否获取到存放OpenAPI详细信息的WSDL文档,如果是,执行步骤105 ;如果否,流程结束;其中,对于不同协议的OpenAPI,需要不同的解析方案,在解析OpenAPI的详细信息时,为将网络速度对本发明实施例的影响减至最小,本发明实施例会将包含Ajax协议或 Rest协议的OpenAPI的详细信息的页面读取至本地文件;对于Soap协议的OpenAPI,本发明实施例会将包含Soap协议的OpenAPI详细信息的WSDL文档下载到本地。其中,为了提高工作效率,在执行步骤103之前,本发明实施例还包括判断是否已有存放OpenAPI详细信息的WSDL文档,如果是,执行步骤105 ;如果否,则执行步骤103。104 根据存放OpenAPI详细信息的页面,获取网页源码,并分析网页结构,执行步骤 106 ;105 根据存放OpenAPI详细信息的WSDL文档,解析WSDL文档,执行步骤107 ;106 根据网页结构编写和网页结构相应的正则表达式,执行步骤108 ;其中,正则表达式常被用于检索和/或替换符合某个模式的文本内容,所以本发明实施例采用正则表达式匹配页面源代码的方法获取信息。由于,解析的页面都是 Programmable Web中的,因此包含OpenAPI基本信息的页面都是具有统一格式的,编写的正则表达式也能适用于绝大多数页面,因此,具有高效性。107 判断解析是否成功,如果是,执行步骤109 ;如果否,流程结束;108 判断OpenAPI协议类型是否是Ajax协议,如果是,执行步骤110 ;如果否,则为Rest协议,执行步骤111 ;109 获取Soap协议的详细信息,执行步骤112 ;其中,该Soap协议的详细信息包括服务、服务包含的方法、方法的输入和输出。110 通过正则表达式匹配页面源代码,获取Ajax协议的详细信息,执行步骤 112 ;其中,该Ajax协议的详细信息包括类、类的属性、类的方法和方法的参数。111 通过正则表达式匹配页面源代码,获取Rest协议的详细信息,执行步骤 112 ;其中,该Rest协议的详细信息包括方法、方法的参数和返回元素列表。112 根据Ajax协议、Rest协议和Soap协议将Soap协议的详细信息、Ajax协议的详细信息和Rest协议的详细信息加载到数据库相应的表中;其中,用于存储OpenAPI基本信息的表字段的示意图如图4所示。表api包括 OpenAPI 的 Name、Tags、Protocol 和 API Home 等基本信息字段。根据三种不同协议的OpenAPI的结构特点,分别制定和数据库相应的表进行存储。对于Ajax协议的OpenAPI,由于基于Ajax的OpenAPI本身就是JS库,所以包含若干 JS类,每个类里面包含有类的数据成员和方法,方法又具备调用参数列表。由于Ajax协议的特殊性,可独立运行的JS代码片段称为应用(Application),并将其源码以及基本的描述信息存储在数据库中,用户可以直接对其功能进行调用。Ajax协议和数据库相应的表结
8构的示意图如图5所示,包括6个表,分别为ajax_application 用于存储Ajax协议的OpenAPI的可独立运行的JS代码片段, 也即应用,包括应用的名称、描述和代码片段;application_input 作为ajax_application的输入,包括输入的名称、描述、类型、是否必需、样本值和默认值;ajax_class 用于存储Ajax协议的OpenAPI提供的类,包括类的名称和描述;ajax_property 作为ajax^lass的属性,包括属性的名称、描述和类型;ajax_method 作为ajax^lass的方法,包括方法的名称、描述和使用例子,由于调用方法后最多返回一个结果,因此将返回的结果的名称和类型也作为方法的属性;ajax_input 作为ajaxjiiethod的输入,包括输入的名称、描述、类型、是否必需、 样本值和默认值。对于Rest协议,存储结构分为两级,即Rest协议的OpenAPI提供若干可调用的方法;每个方法有带有自己的调用参数列表,以及返回元素列表。Rest协议的表结构的示意图如图6所示,包括3个表,分别为rest_method 用于存放Rest协议的OpenAPI包含的方法,包括方法的名称、描述、 可用性、调用串、调用样例和返回的结果样例;rest_input 作为rest_method的输入,包括输入的名称、描述、类型、是否必需、 样本值、默认值和约束条件;rest_response 作为rest_method的返回结果,包括返回结果的名称、描述和类型。对于Soap协议的OpenAPI来说,每个OpenAPI都对应一个Web服务。服务首先要具备基本的服务描述信息,以及该服务可调用的服务操作,每个服务操作又包括输入输出参数列表。Soap协议的表结构的示意图如图7所示,包括4个表,分别为soap_service 用于存储Soap协议的OpenAPI所提供的服务,包括服务的名称、命名空间、WSDL文档的URI和WSDL文档;soap_method 作为soap_service的操作,包括操作的名称和描述;soap_input 作为soap_method的输入,包括输入的名称、类型、样本值和默认值;soap_output 作为soap_method的输出,包括输出的名称、类型、样本值和默认值。其中,在步骤110和步骤111之后,步骤112之前,为确保获取到的信息的准确性, 本发明实施例还包括对获取到的Ajax协议的详细信息进行人工校验;对获取到的Rest协议的详细信息进行人工校验。值得一提的是,当获取到的数据信息量较大时,就不再对每条信息都进行一一地校验,而是随机地对信息进行校验。113 判断是否加载成功,如果是,执行步骤114 ;如果否,流程结束。114 返回成功信息,流程结束。其中,在执行步骤102或103时,避免出现中文乱码问题,本发明实施例在获取存放OpenAPI详细信息的页面或存放OpenAPI详细信息的WSDL文档时,采用UTF-8格式,很好地解决了中文乱码问题。综上所述,本发明实施例提供了一种基于hternet的OpenAPI自动获取方法,本发明能够以自动或半自动(手动配置)的方式主动地抓取OpenAPI数据,通过必要的分解和重组,封装为完整的OpenAPI并添加入库,从而不断扩大开放能力管理平台的OpenAPI数据量,为面向OpenAPI的开放能力管理平台打好基础;使用本发明实施例提供的方法可以将hternet中大量的OpenAPI自动加载到数据库中,而且即使某个OpenAPI的信息发生变化,也不需要重新开发,只需要修改配置文件中的正则表达式就可以解决,为OpenAPI数据的获取提供了便利。本领域技术人员可以理解附图只是一个优选实施例的示意图,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种基于hternet的OpenAPI自动获取方法,其特征在于,所述方法包括以下步骤(1)判断OpenAPI协议的类型是否是Ajax协议或Rest协议,如果是,则执行步骤O); 如果否,则为Soap协议,执行步骤(3);(2)通过OpenAPIHome的URL获取存放OpenAPI详细信息的页面,判断是否获取到所述存放OpenAPI详细信息的页面,如果是,执行步骤(4);如果否,流程结束;(3)通过OpenAPIHome的URL获取存放OpenAPI详细信息的WSDL文档,判断是否获取到所述存放OpenAPI详细信息的WSDL文档,如果是,执行步骤(5);如果否,流程结束;(4)根据所述存放OpenAPI详细信息的页面,获取网页源码,并分析网页结构,执行步骤(6);(5)根据所述存放OpenAPI详细信息的WSDL文档,解析WSDL文档,执行步骤(7);(6)根据所述网页结构编写和所述网页结构相应的正则表达式,执行步骤(8);(7)判断解析是否成功,如果是,执行步骤(9);如果否,流程结束;(8)判断OpenAPI协议类型是否是所述Ajax协议,如果是,执行步骤(10);如果否,则为所述Rest协议,执行步骤(11);(9)获取所述Soap协议的详细信息,执行步骤(12);(10)通过正则表达式匹配页面源代码,获取Ajax协议的详细信息,执行步骤(12);(11)通过正则表达式匹配页面源代码,获取Rest协议的详细信息,执行步骤(12);(12)根据所述Ajax协议、所述Rest协议和所述Soap协议将所述Soap协议的详细信息、所述Ajax协议的详细信息和所述Rest协议的详细信息加载到数据库相应的表中;(13)判断是否加载成功,如果是,执行步骤(14);如果否,流程结束;(14)返回成功信息,流程结束。
2.根据权利要求1所述的基于hternet的OpenAPI自动获取方法,其特征在于,所述方法还包括将包含Ajax协议或Rest协议的所述OpenAPI详细信息的页面读取至本地文件。
3.根据权利要求1所述的基于hternet的OpenAPI自动获取方法,其特征在于,所述方法还包括将包含Soap协议的所述OpenAPI详细信息的WSDL文档下载到本地。
4.根据权利要求1所述的基于hternet的OpenAPI自动获取方法,其特征在于,在步骤(10)和步骤(11)之后,步骤(1 之前,所述方法还包括对获取到的所述Ajax协议的详细信息进行人工校验;对获取到的所述Rest协议的详细信息进行人工校验。
5.根据权利要求1所述的基于^iternet的OpenAPI自动获取方法,其特征在于,在执行步骤( 之前,所述方法还包括判断是否已有所述存放OpenAPI详细信息的页面,如果是,执行步骤(4);如果否,则执行步骤O)。
6.根据权利要求1所述的基于^iternet的OpenAPI自动获取方法,其特征在于,在执行步骤C3)之前,所述方法还包括判断是否已有所述存放OpenAPI详细信息的WSDL文档,如果是,执行步骤(5);如果否,则执行步骤(3)。
7.根据权利要求1所述的基于hternet的OpenAPI自动获取方法,其特征在于,在执行步骤( 或步骤(3)时,所述方法还包括在获取所述存放OpenAPI详细信息的页面或所述存放OpenAPI详细信息的WSDL文档时,采用UTF-8格式。
全文摘要
本发明公开了一种基于Internet的OpenAPI自动获取方法,涉及数据加载领域,本发明能够以自动或半自动(手动配置)的方式主动地抓取OpenAPI数据,通过必要的分解和重组,封装为完整的OpenAPI并添加入库,从而不断扩大开放能力管理平台的OpenAPI数据量,为面向OpenAPI的开放能力管理平台打好基础;使用本发明提供的方法可以将Internet中大量的OpenAPI自动加载到数据库中,而且即使某个OpenAPI的信息发生变化,也不需要重新开发,只需要修改配置文件中的正则表达式就可以解决,为OpenAPI数据的获取提供了便利。
文档编号G06F9/44GK102193798SQ20111006947
公开日2011年9月21日 申请日期2011年3月22日 优先权日2011年3月22日
发明者冯志勇, 李亚洲, 胡小草, 陈世展 申请人:天津大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1