背景技术
OpenApi是一套开放应用程序编程接口,提供商根据自己网站提供的服务,通过这些接口让用户能够通过程序的方式访问自己的数据和平台。
AJAX是指异步JavaScript及XML,是一种基于JavaScript和HTTP请求的在不重载页面的情况下,动态的实现与Web服务器直接通信的新技术。AJAX的目标就是做更快,更好,交互性更强的Web应用。
随着诸如Google,Amazon,搜狐、雅虎中国等国内外一批著名的互联网企业将自己的应用接口开放出来,OpenApi作为互联网在线服务的发展基础,已经成为越来越多互联网企业发展服务的必然选择。而AJAX作为OpenApi的一种实现技术,能够实现动态的JS效果。这是其他协议的OpenApi所望尘莫及的,因而被更多的服务提供商所广泛的应用,其中影响力最大的当属GoogleMap。
随着面向AJAX协议的OpenApi的发布数量不断增加,它的存在也开始暴露出越来越多的问题。其中最为显著的一个问题就是OpenApi数量的急剧膨胀给OpenApi信息的收集和管理带来了很大的困难。
目前,互联网上的面向AJAX协议的OpenApi信息呈现出以下特点:
1)缺乏统一的规范和标准。由于目前OpenApi刚刚兴起,各个服务提供商都是基于自身的Web服务模式推出了应用程序的接口,不同服务商之间缺乏一个统一的规范和标准,这使得OpenApi信息在不同服务商之间呈现出多样化的特点。这为OpenApi信息的收集和整合带来了很大的困难。
2)缺乏严格的语法,语义支持。目前,互联网上绝大多数的OpenApi的信息都是以网页或文档的形式提供给开发技术人员的,缺乏语法,语义信息,这使得计算机处理起来十分困难。
3)数量巨大。随着国内外一大批著名的互联网企业相继推出了自己的应用程序接口,OpenApi在互联网企业中如雨后春笋快速推广。目前已知的OpenApi数目就已经超过了1000个,而其中面向AJAX协议的OpenApi数量巨大。手工的方式收集和整理已经不切实际,需要计算机的帮助来完成数据的收集与整合。
4)更新速度快。由于互联网上的各种服务更新周期短,速度快,这使得OpenApi的信息必须得到及时的更新,传统的手工加载方式已经很难做到,必须利用计算机定时的更新OpenApi的信息。
鉴于互联网上面向AJAX协议的OpenApi信息具有以上特点,本发明的发明人同时也是OpenApi开放平台的数据库构建者之一,从实际经验出发,根据面向AJAX协议的OpenApi的基本原理和调用机制,设计了一套面向AJAX协议的OpenApi数据自动加载方法。
发明内容
基于上述技术问题,本发明提出了一种面向AJAX协议的OpenApi数据自动加载系统,通过用户提供正则表达式,对不规范的文档和网页建立统一的语法结构、赋予语义信息,使得计算机快速准确的收集并管理OpenApi的信息,主动获取互联网上各种面向AJAX协议的开放API的信息,并将它们加载进数据库,构建面向AJAX协议的OpenApi开放平台的原始数据库,实现自动解析以网页、文档或其他方式给出的面向AJAX协议的OpenApi的信息、自动加载已经解析好的面向AJAX协议的OpenApi信息进入数据库、定时更新面向AJAX协议的OpenApi信息,以确保信息的准确性。
本发明提出了一种面向AJAX协议的OpenApi数据自动加载系统,包括主动抓取模块、用户注册模块、信息审核模块,以及包括根据ApiHome获取服务提供商提供的API开发文檔的HTML源码、Api基本信息:包括Api类信息、Api方法信息、Api参数信息在内的数据,其中:
主动抓取模块,用于该系统的原始数据的收集和已有信息的更新与维护,获取Api基本信息列表的HTML源码;构造正则表达式;利用匹配属性标签的方法对以网页形式给出的OpenApi信息建立语法结构,赋予语义信息;从而获得该Api的基本信息。根据基本信息中的ApiHome获取服务提供商所提供的OpenApi的开发文档。通过构造正则表达式匹配属性标签解析该文档获得OpenApi的类,方法,参数等信息,从而生成OpenApi类。
用户注册模块,用于实现OpenApi注册,利用面向AJAX协议的OpenApi信息的规范,以HTML的形式存储OpenApi信息,系统用户有两种方式注册新的OpenApi:一种方式是用户下载规范模板,离线编写要注册的OpenApi的HTML文档;用户提交的HTML文档经过正则表达式匹配属性标签生成相应的OpenApi类;另一种方式是用户可以通过在线填写表单,直接生成OpenApi类。
信息审核模块,用于对OpenApi信息进行管理员审核和功能审核,将审核过的OpenApi加载进数据库:其中管理员审核是系统的维护人员对于OpenApi的管理性审核,功能审核是对OpenApi的可用性和有效性的检验,防止垃圾数据进入数据库;经过测试调用,将审核过的OpenApi交付给数据库操作接口,由其负责将OpenApi加载进数据库。
与现有技术相比,本发明的面向AJAX协议的OpenApi数据自动加载系统可以将互联网上不同的服务提供商所提供的面向AJAX协议的OpenApi建立关系数据库模型,加载进关系数据库;而且可以定时的更新OpenApi信息。使用本发明设计的HTML文档形式存储OpenApi信息具有以下3个优点:即标准的HTML文档,有利于计算机处理;文档定义简单易懂,易于书写;HTML文档,有利于服务提供商向第三方开发人员展示。
具体实施方式
图1为本发明的系统功能模块图,该系统包括主动抓取模块11、用户注册模块12、信息审核模块13,以及该系统所要用到的各种数据,包括根据ApiHome获取服务提供商提供的API开发文檔的HTML源码、Api基本信息:包括Api类信息、Api方法信息、Api参数信息。
主动抓取模块11,用于该系统的原始数据的收集和已有信息的更新与维护:
首先获取Api基本信息列表的HTML源码;构造正则表达式;利用匹配属性标签的方法对以网页形式给出的OpenApi信息建立语法结构,赋予语义信息;从而获得该Api的基本信息。根据基本信息中的ApiHome获取服务提供商所提供的OpenApi的开发文档。通过构造正则表达式匹配属性标签解析该文档获得OpenApi的类,方法,参数等信息,从而生成OpenApi类。
该模块的另一个功能是实现已有OpenApi信息的维护和更新。通过定时的主动获取OpenApi信息来保证OpenApi信息的可用性和有效性。
用户注册模块12,用于为该系统提供开放性的功能,允许用户以多种方式注册OpenApi。本发明设计了一套面向AJAX协议的OpenApi信息的规范,以HTML的形式存储OpenApi信息。一方面利于计算机处理,另一方面也利于服务提供商向第三方开发人员进行展示。系统用户有两种方式注册新的OpenApi。一种方式是用户可以下载规范模板,离线编写要注册的OpenApi的HTML文档。用户提交的HTML文档经过正则表达式匹配属性标签生成相应的OpenApi类。另一种方式是用户可以通过在线填写表单,直接生成OpenApi类。
信息审核模块13,用于实现两个功能,一是对OpenApi信息进行管理员审核和功能审核,另外一个是将审核过的OpenApi加载进数据库。管理员审核是系统的维护人员对于OpenApi的管理性审核,而功能审核是对OpenApi的可用性和有效性的检验,防止垃圾数据进入数据库。经过测试调用,将审核过的OpenApi交付给数据库操作接口,由其负责将OpenApi加载进数据库。
本发明是用JAVA语言编写的,在Eclips环境下开发的。
如图2所示,为本发明的主动抓取模块流程图,该模块主要采用正则表达式匹配技术,数据持久化技术,配置文件技术来实现。本模块的具体流程如下:
具体算法流程如下:
步骤1,获取OpenApi基本信息的HTML源码,记为S1,并设置i=0;
步骤2,标签库中该Api基本信息所对应的正则表达式中是否存在第i条正则表达式,若存在则读取该正则表达式记为R1,转向步骤3;若不存在,则转步骤6;
步骤3,利用Pattern.compile()编辑R1;
步骤4,利用Pattern.matcher()对S1进行匹配;
步骤5,利用matcher.group()获得匹配的内容,赋给S1,并存入数组Arraylist[i]中,i++,转向步骤2;
步骤6,遍历Arraylist[],获取ApiHome;
步骤7,利用ApiHome获取该Api的开发文档的HTML源码,记为S2;并设置j=0;
步骤8,标签库中该Api调用信息所对应的正则表达式中是否存在第j条正则表达式,若存在则读取该正则表达式记为R2,转向步骤9;若不存在则转向步骤12;
步骤9,利用Pattern.compile()编辑R2;
步骤10,利用Pattern.matcher()对S2进行匹配;
步骤11:利用Matcher.group()获得匹配的内容,赋给S2,并存入数组Arraylist_call[j]中,j++,转向步骤8;
步骤12:遍历Arraylist_call[]与Hibernate生成的Api类中的属性进行一一匹配,将Arraylist_call[]中的值赋给Api类中的对应属性;
步骤13:生成Api类。
本系统利用Hibernate建立了关系数据库与类之间的关系映射,最终生成的OpenApi类中的信息的组织形式即为关系数据模型;
本模块的重点在于对服务提供商所提供的形式各异的OpenApi开发文档进行解析,利用正则表达式匹配技术来实现该功能。为了最大程度的实现代码复用,将正则表达式写在一个单独的JAVA文件中,这样,如果服务提供商所提供的OpenApi开发文档的语法结构发生变化,我们只需要修改配置文件中的正则表达式即可,不需要修改程序,最大程度提高了代码的通用性。
如图3所示,为本发明的用户注册模块,针对AJAX协议的OpenApi设计了一套规范,并且这些规范都以HTML的形式存储。本模块的具体实现流程如下:
步骤1,用户注册新的OpenApi;
步骤2,需要用户提交系统规定的HTML文档;
步骤3,判断用户是否已具有规定的HTML文档;如果用户已具有规定的HTML文档,则转到步骤4;如果不具有规定的HTML文档,则转到步骤8;
步骤4,提交该HTML文档;
步骤5,利用正则表达式解析该HTML文档;
步骤6,在提交HTML文档后,系统利用正则表达式对属性标签进行一一匹配,判断是否匹配成功,如果全部匹配成功,转至步骤7;
步骤7,生成OpenApi类;如果匹配失败,说明提交的HTML存在语法错误,转至步骤2;
步骤8,判断是否在线填写HTML文档;如果是,转到步骤9;如果否,转到步骤11;
步骤9,根据协议类型下载系统提供的HTML模板;
步骤10,离线编辑新注册的OpenApi的HTML文档,转到步骤4;
步骤11,根据指示填写表单;
步骤12,生成HTML文挡,并转到步骤4。
本系统为没有HTML文档的用户提供了两种方式生成HTML文档,一种是向用户提供指定协议的模板,供用户可以离线的编写。另一种方式是用户通过在线填写表单,系统帮助用户生成HTML文档。在提交HTML文档后,系统利用正则表达式对属性标签进行一一匹配,如果全部匹配成功,则生成OpenApi类。如果匹配失败,说明提交的HTML存在语法错误。这样就利用正则表达式为OpenApi的信息建立了统一的语法结构和语义标注。系统就可以将杂乱无序的OpenApi信息转化为关系数据模型了。
如图4所示,为本发明的信息审核模块,用于收集OpenApi信息的可用性和有效性的检验以及将它们加载入库的工作,主要用到了接口封装技术和测试调用技术。具体的流程包括以下步骤:
步骤1,调用用户提交时的测试代码程序;
步骤2,判断调用是否成功?成功,则转到步骤3;不成功,则转到步骤8;
步骤3,提交管理员审核,
步骤4,判断是否通过审核;通过,则转到步骤5;未通过,则提示错误,结束
步骤5,加载AJAXDAO;
步骤6,是否加载成功,不成功,则转到步骤5;成功,则转到步骤
步骤7,提示加载成功,流程结束;
步骤8,该Api是无效的。
本系统为了尽最大的可能降低模块之间的耦合,对数据库操作接口进行了封装,其中AJAXDAO负责完成对AJAX协议的OpenApi的数据库操作。为了确保进入数据库的OpenApi数据的有效性和可用性,本系统需要在信息进入数据库之前,对OpenApi进行在线测试。从用例库里提取代码程序,运行看是否结果出错。主要验证该服务是否还继续可用。