构件化系统中实现调用RESTful服务的方法与流程

文档序号:11949843阅读:235来源:国知局
构件化系统中实现调用RESTful服务的方法与流程

本发明涉及计算机软件技术领域,尤其涉及构件化软件系统技术领域,具体是指一种构件化系统中实现调用RESTful服务的方法。



背景技术:

随着现代社会科学技术的发展,计算机系统已经成为各行各业所不可缺少的工具,而在其中起着核心作用的,则是计算机软件系统。随着软件系统在各行各业的日益渗透,商业系统的日益庞大,其自身的问题也是越来越严重。现在的一个企业应用,常常会涉及企业的每一个部分,会由几十人编写几十万到几百万行代码来完成。另一方面,现代企业是在一个不断变化的动态环境中生存和发展的,因此,企业应用就需要不断地维护——即部分地改写一些现有软件。由几十万上百万的代码变化因子,组成的不断变化的系统,其复杂度是人类历史上没有见过的。软件的安全性和质量可靠性,常常成为现代无所不在、无所不能的信息化系统的一个严重问题。

构件技术整合了传统的构件技术、模型驱动技术和面向服务技术,是解决现有软件系统结构弊端的一种有效手段。所谓构件,是指某种自成一体、并有一个(或一组)清晰接口的软件。同时,构件还应具有清晰的运行时和上线内涵。也就是说,该构件具备可供运行时访问的接口;并且,在软件开发生命周期的某个时间点,该构件可独立交付和安装。另外,一个构件还能方便地跟其他构件合并或组合,从而提供有用的功能——通常情况下,单个构件只有跟别的构件协同工作才能达到其功效。

在企业级应用开发领域,随着应用规模的不断扩大,各个系统之间的集成和交互变得越来越复杂,要求也越来越高。RESTful(英文:Representational State Transfer,简称REST,REST指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful)由于其特有的平台无关、编程语言无关、结构清晰、易于理解、扩展方便等特性,正在被越来越多的厂商使用。

如何方便的调用外部系统提供的RESTful,在系统的集成阶段变得日益重要。通常调用外部RESTful的作法为根据服务提供方的文档,熟悉服务的URL,参数及返回值,然后通过httpclient或者其他http客户端工具凑出调用服务的http协议,最后发起服务调用。此种方式要求开发人员熟悉服务调用的具体细节,需要根据服务doc文档凑出具体的http协议以及具体需要发送的内容,代码编写非常复杂,难以理解,容易出错,且编写效率非常低。如果服务端将服务进行调整,例如增加了一个简单的参数,则要求开发人员重新凑出新的报文,重新进行调用。同时,针对每个RESTful调用,都要重新拼凑调用服务的http报文,大量复杂繁琐的代码随着系统功能的增加而增加,系统越来越复杂,维护越来越困难,降低了生产效率。



技术实现要素:

本发明的目的是克服了上述现有技术的缺点,提供了一种能够实现通过构件对外部RESTful进行调用、开发期直观形象、快捷方便、运行期效率较高、系统性能稳定可靠、适用范围较为广泛的构件化系统中实现调用RESTful服务的方法。

为了实现上述目的,本发明具有如下构成:

该构件化系统中实现调用RESTful服务的方法,其主要特点是,所述的方法包括RESTful调用构件开发处理操作和RESTful调用构件运行处理操作,所述的RESTful调用构件开发处理操作包括以下步骤:

(A1)系统的图形化构件开发平台新建构件包;

(A2)所述的图形化构件开发平台导入需要调用服务的OADF服务描述文件;

(A3)所述的图形化构件开发平台解析导入的OADF文件成RESTful文档对象;

(A4)所述的图形化构件开发平台根据RESTful文档对象描述数据对象自动生成所有的数据模型java文件;

(A5)所述的图形化构件开发平台在资源树中概览显示所导入的OADF文件中的RESTful相关元素;

(A6)所述的图形化构件开发平台在构件编辑器中生成RESTful调用图元;

(A7)所述的图形化构件开发平台对RESTful调用图元设置调用参数;

(A8)所述的图形化构件开发平台添加Http头信息;

所述的RESTful调用构件运行处理操作,包括以下步骤:

(B1)系统将构件包下的资源部署到所述的构件运行平台的构件运行环境中;

(B2)所述的构件运行平台加载OADF文件到构件运行环境,并解析OADF文件形成RESTful文档对象;

(B3)所述的构件运行平台编译数据模型java文件到class文件,并将class文件加载到构件运行环境;

(B4)所述的构件运行平台根据RESTful文档对象及用户设置调用方法、参数及返回值发送RESTful请求;

(B5)所述的构件运行平台处理RESTful返回值;

(B6)所述的构件运行平台解析并返回Http头信息。

较佳地,所述的构件包包括实现构件功能的所有依赖资源,所述的依赖资源包括OADF文件和运行需要的数据模型类文件。

较佳地,所述的步骤(A2),包括以下步骤:

(A2-1)所述的图形化构件开发平台根据外部RESTful服务所在的URL,把该URL所指定的OADF文件下载到本地;

(A2-2)所述的图形化构件开发平台将下载的OADF文件默认保存到构件包资源树下的服务节点下。

较佳地,所述的步骤(A3),包括以下步骤:

(A3-1)所述的图形化构件开发平台将根据RESTful文档对象的definitions数组元素生成java文件;

(A3-2)所述的图形化构件开发平台遍历RESTful文档对象的definitions数组所有元素,得到数据模型的schema描述对象;

(A3-3)所述的图形化构件开发平台判断数据模型描述对象是否为object类型,如果是object类型,则直接创建一个以数组名为名称的java文件,java文件里面的成员变量则根据properties属性信息生成;

(A3-4)所述的图形化构件开发平台获取数据模型描述对象的properties属性,获得数据模型描述对象的属性;

(A4-4)所述的图形化构件开发平台获取数据模型描述对象的属性后,判断属性的类型,如果类型为基本数据类型,则直接生成javabean的基本数据类型属性;

(A4-5)所述的图形化构件开发平台判断数据模型描述对象的属性类型为date类型,则生成javabean的date类型属性;

(A4-6)所述的图形化构件开发平台判断数据模型描述对象的属性类型为引用类型,则生成javabean的引用类型属性;

(A4-7)所述的图形化构件开发平台判断数据模型描述对象的属性类型为数组类型,则生成javabean的ArrayList类型属性,同时ArrayList元素类型判断和属性类型判断逻辑一致。

较佳地,所述的步骤(A5)包括以下步骤:

(A5-1)所述的图形化构件开发平台解析OADF文件中的paths节点下内容,展示paths节点下所有的服务URL;

(A5-2)所述的图形化构件开发平台将paths节点解析成json文档对象;

(A5-3)所述的图形化构件开发平台遍历json文档对象所有的属性值,该属性值作为服务的URL;

(A5-4)将解析后的服务信息显示在OADF资源树下的服务节点下。

较佳地,所述的步骤(A6)包括以下步骤:

(A6-1)在资源树中OADF节点的子节点服务节点列出服务下所有可以被调用的服务URL,所述的图形化构件开发平台根据用户的拖放动作将相应的操作拖放到构件编辑器中,并生成RESTful调用图元;

(A6-2)所述的RESTful调用图元显示出调用的操作以及RESTful服务所在的主机地址,调用服务请求的请求类型;

(A6-3)所述的RESTful调用图元根据所选操作的类型信息生成调用的实际参数信息,其中包括参数个数和参数类型;

(A6-4)所述的RESTful调用图元根据需要添加Http头信息。

较佳地,所述的步骤(A7)包括以下步骤:

(A7-1)所述的图形化构件开发平台判断输入参数和输出参数的类型;

(A7-2)如果输入参数和输出参数为简单类型,则直接进行赋值;

(A7-3)如果输入参数和输出参数为复杂类型,则通过XPath的方式对在复杂类型中定义的各个属性分别进行赋值。

较佳地,所述的步骤(A8)包括以下步骤:

(A8-1)将Http头信息按Map结构进行存储;

(A8-2)在该Http头信息存储时,Map结构中的键对应于Http头信息的头名称;

(A8-3)在该Http头信息存储时,Map结构中的值对应于Http头信息头名称对应的值;

(A8-4)将该Http头信息存储的键和值添加到http请求的请求头中。

较佳地,所述的步骤(B1)包括以下步骤:

(B1-1)将构件包下的所有构件资源拷贝到构件运行环境所指定的目录中;

(B1-2)将构件包下定义的Java编译类文件以及页面资源拷贝到应用服务器指定的应用目录中。

更佳地,所述的构件资源包括OADF文件和生成的数据模型java文件,所述的页面资源包括jsp文件和js文件。

较佳地,所述的步骤(B3)包括以下步骤:

(B3-1)构件运行环境启动时,遍历导入的所有OADF文件;

(B3-2)解析OADF文件成RESTful文档对象。

较佳地,所述的步骤(B4)包括以下步骤:

(B4-1)根据RESTful调用图元设置的URL以及请求类型构造Http连接;

(B4-2)如果RESTful调用图元设置了Http头信息,将Http头信息转化成Map;

(B4-3)设置Http连接的请求属性,设置内容类型、内容长度;

(B4-4)遍历Http头信息的Map,将Map中所有的信息添加到Http连接的请求头上;

(B4-5)将RESTful调用图元设置输入参数序列化成json字符串;

(B4-6)将输入参数的json字符串添加到Http连接的输出流上。

较佳地,所述的步骤(B5)包括以下步骤:

(B5-1)从Http Response的输入流中取得返回json字符串;

(B5-2)根据输出参数类型将json字符串反序列化java对象,并把反序列化后的值保存到调用的上下文中。

采用了该发明中的构件化系统中实现调用RESTful服务的方法,由于其中提供了动态调用外部RESTful的方法,针对不同RESTful调用,不再需要生成其OADF对应的caller及stub代码,减少了调用的操作步骤和对不同外部工具的依赖,真正做到了灵活的调用,从而在系统的集成工作中不再需要维护RESTful工具生成的大量调用RESTful代码,而且对于外部RESTful变化能够快速适应,从而使RESTful的开发、调用过程更加直观、简单和高效,提高了调用的效率,快捷方便,系统运行效率较高,性能稳定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性;不仅如此,该方法还能够快速回应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的软件系统,适用范围较为广泛,为计算机构件化软件技术的进一步发展奠定了坚实的基础。

附图说明

图1为本发明的RESTful调用系统架构示意图。

图2为本发明的构件化系统中实现调用RESTful服务的方法中的RESTful调用开发、加载、数据处理流程图。

图3为本发明的构件化系统中实现调用RESTful服务的方法中RESTful的请求发送和返回值的处理流程。

图4为本发明的构件化系统中实现调用RESTful服务的方法中RESTful调用图元的示意图。

具体实施方式

为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。

在调用RESTful服务时,客户端与服务器端交互的桥梁是OADF(Open API Definition Format,开放API定义规范/格式),其中包括了以下几个主要元素:

definitions——数据模型定义的容器,使用json来描述数据类型的结构信息。

paths——描述服务调用路径及服务抽象集合,与Java接口类似。

securityDefinitions——描述调用服务的安全验证信息。

schemes——服务支持的协议类型,包括http,https。

host——服务所在的主机。

basePath——服务调用的基本路径。

在调用RESTful过程中,客户端与服务器端交互的信息为json格式的消息,json(JavaScript Object Notation)是一种轻量级的数据交换格式。json采用完全独立于语言的文本格式。json易于人阅读和编写,同时也易于机器解析和生成,json格式的数据没有任何冗余的信息,有利于提高网络传输效率,节省宽带。这些特性使json成为理想的数据交换语言。

请参阅图1至图4所示,该构件化系统中实现调用RESTful服务的方法,所述的构件化软件系统中包括图形化构件开发平台和与该图形化构件开发平台相连接的构件运行平台,其中,所述的方法包括RESTful调用构件开发处理操作和RESTful调用构件运行处理操作,所述的RESTful调用构件开发处理操作,包括以下步骤:

(A1)系统的图形化构件开发平台新建构件包;该构件包为包含一定功能逻辑的物理单元,且该构件包作为一个最小的部署单元部署到所述的构件运行平台的构件运行环境中,该构件包中包含实现构件功能的所有依赖资源;该依赖资源包括OADF文件、数据模型Java文件;

(A2)所述的图形化构件开发平台导入外部的OADF文件,包括以下步骤:

(a)所述的图形化构件开发平台根据外部RESTful所在的URL,把该URL所指定的OADF文件下载到本地;

(b)所述的图形化构件开发平台将所下载的OADF文件默认保存到构件包资源树下的“服务”节点下;

(A3)所述的图形化构件开发平台根据RESTful文档对象描述数据对象自动生成所有的数据模型java文件,即普通的javabean,包括以下步骤:

(a)所述的图形化构件开发平台将根据RESTful文档对象的”definitions”数组元素生成java文件。

(b)所述的图形化构件开发平台遍历RESTful文档对象的“definitions”数组所有元素,得到数据模型的schema描述对象。

(c)所述的图形化构件开发平台判断数据模型描述对象是否为“object”类型,如果是“object”类型,则表示普通的javabean,即可以直接生成一个java文件。

(d)所述的图形化构件开发平台获取数据模型描述对象的“properties”属性,获得数据模型描述对象的属性,即对应javabean的属性。

(e)所述的图形化构件开发平台获取数据模型描述对象的属性后,判断属性的类型,如果类型为基本数据类型(integer,long,float,double,string,byte,boolean),则直接生成javabean的基本数据类型属性。

(f)所述的图形化构件开发平台判断数据模型描述对象的属性类型为date类型(date,dateTime),则生成javabean的Date类型属性。

(g)所述的图形化构件开发平台判断数据模型描述对象的属性类型为引用类型(ref),则生成javabean的引用类型属性,引用类型为当前数据模型对象中的其他javabean类型。

(h)所述的图形化构件开发平台判断数据模型描述对象的属性类型为数组类型(array),则生成javabean的ArrayList类型属性,同时ArrayList元素类型判断和属性类型判断逻辑一致。

(A5)所述的图形化构件开发平台在资源树中概览显示所导入的OADF文件中的RESTful相关元素,包括以下步骤:

(a)所述的图形化构件开发平台解析OADF文件中的“paths”节点下内容,展示”paths”节点下所有的服务URL;

(b)所述的图形化构件开发平台将”paths”节点解析成json文档对象;

(c)所述的图形化构件开发平台遍历json文档对象所有的属性值,该属性值做为服务的URL;

(d)将解析后的服务信息显示在OADF资源树下的“服务”节点下。

(A6)所述的图形化构件开发平台在构件编辑器中生成RESTful调用图元,包括以下步骤:

(a)在资源树中OADF节点的子节点“服务”节点列出服务下所有可以被调用的服务URL,所述的图形化构件开发平台根据用户的拖放动作将相应的操作拖放到构件编辑器中,并生成RESTful调用图元;

(b)所述的RESTful调用图元显示出调用的操作以及RESTful服务所在的主机地址,调用服务请求的请求类型(GET,POST,PUT,DELETE);

(c)所述的RESTful调用图元根据所选操作的类型信息生成调用的实际参数信息,其中包括参数个数和参数类型;

(d)所述的RESTful调用图元根据需要添加Http Header信息。

(A7)该构件化系统中实现调用RESTful服务的方法中的对RESTful调用图元设置调用参数,包括以下步骤:

(a)所述的图形化构件开发平台判断输入参数和输出参数的类型;

(b)如果输入参数和输出参数为简单类型,则直接进行赋值;

(c)如果输入参数和输出参数为复杂类型,则通过XPath的方式对在复杂类型中定义的各个属性分别进行赋值。

(A8)所述的图形化构件开发平台实现RESTful调用的方法中的添加Http Header信息,包括以下步骤:

(a)将Http Header信息按Map结构进行存储;

(b)在该Http Header信息存储时,Map结构中的键对应于Http Header信息的头名称;

(c)在该Http Header信息存储时,Map结构中的值对应于Http Header信息头名称对应的值;

(d)将该Http Header信息存储的键和值添加到http请求的请求头中;

所述的RESTful调用构件运行处理操作,包括以下步骤:

(B1)系统将构件包下的资源部署到所述的构件运行平台的构件运行环境中,包括以下步骤:

(a)将构件包下的所有构件资源拷贝到构件运行环境所指定的目录中;该构件资源包括class文件和OADF文件。

(b)将构件包下定义的Java编译类文件以及页面资源拷贝到应用服务器指定的应用目录中;该页面资源包括jsp文件和js文件;

(B2)所述的构件运行平台加载OADF文件到构件运行环境,并将其解析成RESTful文档对象;该加载OADF文件到构件运行环境,包括以下步骤:

(a)构件运行环境启动时,遍历导入的所有OADF文件;

(b)解析OADF文件成RESTful文档对象;

(B3)所述的构件运行平台发送RESTful请求,包括以下步骤:

(a)根据RESTful调用图元设置的URL以及请求类型构造Http连接;

(b)根据OADF文件定义的风格类型,把作为输入参数的服务数据对象序列化成文档对象;

(c)序列化后的文档对象作为SOAP体的内容添加到SOAP信封中;

(d)如果RESTful调用图元设置了头信息,按输入参数的序列化方式,把设定的头信息序列化成文档对象;

(e)序列化后的头信息作为SOAP头的内容添加到SOAP信封中;

(f)设置Http连接的请求属性,设置内容类型、内容长度;

(g)遍历Http Header信息的Map,将Map中所有的信息添加到Http连接的请求头上;

(h)将RESTful调用图元设置输入参数序列化成json字符串;

(j)将输入参数的json字符串添加到Http连接的输出流上;

(B4)所述的构件运行平台处理RESTful返回值,包括以下步骤:

(a)从Http Response的输入流中取得返回json字符串;

(b)根据输出参数类型将json字符串反序列化java对象,并把反序列化后的值保存到调用的上下文中;

在实际使用当中,该构件化软件系统中实现调用RESTful的方法,包括图形化构件开发平台和构件的运行平台,所述的方法包括RESTful调用构件开发操作和RESTful调用构件运行操作,如图2所示。

所述的RESTful调用构件开发操作包括以下步骤:

(1)新建构件包,本构件包定义了一个业务模块单元,提供相应的服务,在物理上与文件目录相对应;

(2)导入外部的OADF文件,包括以下步骤:

(a)根据外部RESTful所在的URL,把其URL指定的OADF下载到本地;

(b)下载的OADF文件默认保存到构件包资源树下的“服务”节点下。

(3)资源树概览显示导入的OADF文件。

(4)生成构件化RESTful调用图元,包括以下步骤:

(a)在资源树中OADF节点的子节点“服务”节点列出服务下所有可以被调用的服务URL,所述的图形化构件开发平台根据用户的拖放动作将相应的操作拖放到构件编辑器中,并生成RESTful调用图元;

(b)所述的RESTful调用图元显示出调用的操作以及RESTful服务所在的主机地址,调用服务请求的请求类型(GET,POST,PUT,DELETE);

(c)所述的RESTful调用图元根据所选操作的类型信息生成调用的实际参数信息,其中包括参数个数和参数类型;

(d)所述的RESTful调用图元根据需要添加Http Header信息。

(5)RESTful调用图元设置调用参数,包括以下步骤:

(a)输入、输出参数如果为简单类型,直接进行赋值;

(b)输入、输出参数如果为复杂类型(SDO类型),通过XPath的方式对其定义的各个属性分别进行赋值。

(6)添加Http Header信息,包括以下步骤:

(a)Http Header信息按Map结构进行存储;

(b)Http Header信息存储时,Map结构中的键对应于Http Header信息的头名称;

(c)Http Header信息存储时,Map结构中的值对应于Http Header信息头名称对应的值;

(d)将该Http Header信息存储的键和值添加到http请求的请求头中;

经过以上步骤,RESTful调用的准备阶段已经完成,开发完成的RESTful调用图元示意图如图4所示。从中可以看出,用户在调用RESTful调用时,通过两个简单的步骤:导入和设置调用参数就完成了。

所述的RESTful调用构件运行操作包括以下步骤:

(1)部署构件包下资源到构件运行环境,包括以下步骤:

(a)把构件包下的所有构件资源,如OADF文件,拷贝到构件运行环境指定的目录中;

(b)构件包下定义的Java编译class文件以及页面资源(jsp文件、js文件),放到应用服务器指定的应用(webapp)目录中。

(2)加载OADF文件到构件运行环境,所述的操作包括以下步骤:

(a)构件运行环境启动时,遍历导入的所有OADF文件;

(3)发送RESTful请求,流程图如图2所示。所述的操作包括以下步骤:

(a)根据RESTful调用图元设置的URL以及请求类型构造Http连接;

(b)如果RESTful调用图元设置了Http Header信息,将Http Header信息转化成Map:

(c)设置Http连接的请求属性,设置Content-type、Content-length;

(d)遍历Http Header信息的Map,将Map中所有的信息添加到Http连接的请求头上;

(e)将RESTful调用图元设置输入参数序列化成json字符串;

(4)处理RESTful返回值,包括以下步骤:

(a)从Http Response的输入流中取得返回json字符串;

(b)根据输出参数类型将json字符串反序列化java对象,并把反序列化后的值保存到调用的上下文中。

采用了该发明中的构件化系统中实现调用RESTful服务的方法,由于其中提供了动态调用外部RESTful的方法,针对不同RESTful调用,不再需要生成其OADF对应的caller及stub代码,减少了调用的操作步骤和对不同外部工具的依赖,真正做到了灵活的调用,从而在系统的集成工作中不再需要维护RESTful工具生成的大量调用RESTful代码,而且对于外部RESTful变化能够快速适应,从而使RESTful的开发、调用过程更加直观、简单和高效,提高了调用的效率,快捷方便,系统运行效率较高,性能稳定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性;不仅如此,该方法还能够快速回应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的软件系统,适用范围较为广泛,为计算机构件化软件技术的进一步发展奠定了坚实的基础。

在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1