一种基于柔性描述模型的Web服务调用方法与流程

文档序号:11436890阅读:157来源:国知局
一种基于柔性描述模型的Web服务调用方法与流程

本发明属于服务计算领域,特别涉及一种基于柔性描述模型的web服务调用方法。



背景技术:

web服务作为一种潜在的分布式服务架构解决方案,在互联网上具有重大影响。服务描述是一组描述web服务接口和语义的文档,以服务语义、服务关系表述服务,是对于服务、服务接口及可交换信息的机器可处理描述。服务描述在服务发现、服务匹配过程中起着至关重要的作用。现有web服务描述模型主要有wsdl(webservicesdescriptionlanguage)、owl-s(ontologyweblanguageforservice),wadl(webapplicationdescriptionlanguage)和基于自然语言描述的网页等方式。然而,现有服务描述模型的多样化、不同描述模型之间存在异构性,为服务发现、服务调用、服务之间的协同工作带来困难。

目前,学术界为改善现有服务描述模型的不足,在服务描述模型方面已经有所研究:

赵文栋等人提出了一种基于功能语义的web服务描述及预检索方法,该方法针对现有常用web服务描述模型不能很好地支持服务基于功能的语义描述的问题,通过定义服务功能描述模型,构建领域功能本体,提出了一种基于功能语义的web服务描述方法。田刚等人提出一种web服务描述的本体学习方法,针对现有服务本体难以满足web服务语义查询的需要,而手工建立本体不仅困难而且成本很高等问题,利用一种基于层次dirichlet过程(hierarchicaldirichletprocess,hdp)的主题模型自动学习本体层次结构和每一层中所包含的主题数目来丰富本体语义。白晓磊针对现有服务描述模型不能反映服务所属领域中概念及概念间关系的变化,对owl-s服务本体进行动态语义扩展,在服务本体中加入模糊概念模型以扩展服务本体中的概念及概念关系,加入服务质量模型以反映服务状态变化,形成可重写逻辑的服务描述模型。

上述研究中,在现有服务描述模型基础上从服务发现、匹配效率方面去改善服务描述模型,未能从服务调用方面去改善服务描述模型来实现服务之间的更好的协同工作。



技术实现要素:

为了克服现有web服务调用方法的通用性较差的不足,本发明主要用于从服务调用方面改善现有服务描述模型,提供了一种对soap(simpleobjectaccessprotocol)服务和rest(representationalstatetransfer)服务的具有较好通用性的服务柔性描述模型及服务调用方法。

本发明所采用的技术方案是:

一种基于柔性描述模型的web服务调用方法,所述方法包括如下步骤:

第一步:对已经发布在互联网上的soap服务和rest服务进行集成;

1.1、soap服务集成;wsdl是soap服务的描述文档,描述了soap服务的方法名、发布地址、功能和输入输出参数信息;首先通过人工手动收集wsdl或者爬虫程序爬取发布在互联网上的wsdl,其次对wsdl进行解析得到服务的具体描述信息并用soap服务柔性描述模型描述;

1.2、rest服务集成;rest服务采用基于自然语言的html文档来描述,为此,采用人工辅助或者爬虫程序爬取发布在互联网上的rest网页,对其解析提取出rest服务相关描述信息,如服务的名称、功能、发布地址、输入参数和输出参数信息;

第二步:对集成后的soap服务和rest服务采用柔性描述模型进行建模;

2.1、soap服务柔性描述模型;包含了soap服务的基本描述属性、soap服务的输入参数、返回信息以及用来实现soap服务调用的soap请求体信息;

2.2、rest服务柔性描述模型;含了rest服务的基本描述属性、rest服务的输入参数、返回信息以及用来实现rest服务调用的rest请求体信息;

第三步:基于所述柔性描述模型,soap服务和rest服务调用方法如下:

3.1:soap服务调用方法;根据soap服务柔性描述模型,生成soap服务的请求体,将用户输入的信息与所生成的soap服务请求体进行拼接替换生成本次访问的、真实的soap请求体,并采用java语言的httpurlconnection类将该请求体发送至soap服务器,实现soap服务的调用;

3.2:rest服务调用方法;根据rest服务柔性描述模型,生成rest服务的请求体,将用户输入的信息与所生成的rest服务请求体进行拼接替换生成本次访问的、真实的rest请求体,并采用java语言的httpurlconnection类将该请求体发送至rest服务器,实现rest服务的调用。

进一步,所述步骤1.1中,wsdl解析过程如下:

1.1.1、获取wsdl文件的根节点definitions节点,解析出所有的service节点,service节点包含了服务的名称,其次解析出对应service节点下的port节点,port节点包含了服务的发布地址;

1.1.2、根据步骤1.1.1中解析得到的port节点去查找binding节点,binding节点用来描述服务的通信协议;

1.1.3、根据步骤1.1.2中解析得到的binding节点去查找porttype节点,porttype节点下每一个operation节点代表一个方法,每一个operation节点下都有一个input节点和output节点,分别代表该方法的输入与输出;

1.1.4、根据步骤1.1.3中解析得到的每一个operation节点下的input节点查找message节点,message节点用来描述通信消息数据结构的抽象类型化定义。

1.1.5、根据步骤1.1.4中解析得到的message节点下的part节点查找element节点;

1.1.6、根据步骤1.1.5中解析得到的element节点查找conplextype节点,conplextype节点下指明了步骤1.1.3中对应方法输入参数和输出参数的名称及其类型。

再进一步,所述步骤1.2中,rest服务网页解析过程如下:

1.2.1、爬取rest服务原始网页,利用爬虫引擎将发布在互联网上的rest服务原始网页抓取,获得html页面基础库,为后续的特征提取做好准备;

1.2.2、去噪,对html页面基础库中的页面进行去噪处理,过滤掉无关的内容,保留页面的主体部分;

1.2.3、分词去除停用词,对步骤1.2.2中所得的页面主体进行分词,将页面主体中的句子划分为词语并移除无意义的词语如“a”、“the”词汇;

1.2.4、建立数据词典,建立表示输入、输出、标签、服务描述规则的数据词典,如“请求参数说明”、“返回参数说明”、“请求方式”;

1.2.5、特征提取,利用所建立的数据词典,在遍历网页过程中进行服务特征提取,包括服务的名称、服务的功能描述、服务的输入输出信息,并将特征提取后的服务存入web服务库。

更进一步,所述步骤2.1中,定义1:soap服务柔性描述模型是由基本描述属性、soap请求体、输入参数、返回信息组成的四元组;

soap-fdm=<attributes,soaprequestbody,inputparams,outputparams>

attributes描述服务的基本信息,包含了服务的名称、类型、描述信息、发布地址、调用方法和来源;

soaprequestbody来自于java库解析wsdl文件,用来与soap服务器进行通信,实现soap服务的自动化调用;

inputparams描述了所需的输入参数信息,包括输入参数的个数、类型和含义;

outputparams描述了返回信息,包含返回信息的含义以及类型;

其中,attributes是一个九元组,形式化表示为如下形式:

attributes=<id,url,servicetype,name,chiname,method,description,comefrom,area>

id是每个服务的唯一标识符,url是服务发布的地址,servicetype是指明服务类型,取值为soap或者rest,name是服务的英文名字,chiname是服务的中文名字,method服务调用的方法,description是服务的功能描述、comefrom是服务的来源,area是服务所属的领域;soaprequestbody在“<soapenv:body>”标签内分布着该soap服务的所有输入参数名称,用来和服务器进行通信,实现soap服务的调用;inputparams是由输入参数组成的集合,形式化表述为inputparams=<param1,param2,…,paramn>;outputparams是由输出参数组成的集合,形式化表述为outputparams=<param1,param2,…,paramn>;param是一个二元组,有参数类型type、输入输出参数描述inputparamdes/outputparamdes组成,即param=<type,inputparamdes/outputparamdes>。

所述步骤2.2中,定义2:rest服务柔性描述模型是由基本描述属性、输入参数、返回信息组成的三元组,rest-fdm=<attributes,inputparams,outputparams>。

attributes包含了服务的名称、类型、描述信息、发布地址、调用方法和来源;

inputparams描述了所需的输入参数信息,包括输入参数的个数、类型和含义;

outputparams描述了返回信息,包含返回信息的含义以及类型;

其中,attributes是一个十一元组,可形式化表示为如下形式:

attributes=<id,url,servicetype,querytype,contenttype,name,chiname,method,description,comefrom,area>

querytype是rest服务的参数来源,contenttype是rest服务的返回信息编码格式;querytype属性指明了rest服务的参数来源,取如下几类标注:@pathparam、@queryparam、@headerparam、@cookieparam、@matrixparam、@formparam;常用的如@pathparam表明请求来自于url的路径,@queryparam表明请求自于url的查询参数;contenttype为浏览器端以编码格式接收返回结果,可取text/xml、text/plain和application/json,如application/json表示服务调用后的返回信息将以json格式返回;通过将用户的输入请求与服务的发布地址进行拼接,即可实现rest服务的自动化调用。

所述步骤3.1中,soap服务调用方法如下:

soap服务由于其柔性描述模型中的soaprequestbody属性记录了soap服务的请求体模板,该请求体模板基于xmlschema规范来描述,通过将用户输入的参数值与soap服务的请求体模板中对应的输入参数进行替换拼接,生成最终真实的soap服务的请求体,再通过将soap请求体发送至soap服务器端即可进行soap服务的自动化调用。

所述步骤3.2中,rest服务调用方法如下:

rest服务根据其柔性描述模型中url属性指明了服务的发布地址,querytype属性指明了调用该服务的参数来自于http请求的哪个位置,method属性指明了调用服务的方法,根据这些信息,生成满足柔性描述模型要求的rest请求体,最后将该请求体发送至对应rest服务器端即可进行rest服务的自动化调用。

本发明的技术构思为:在soap服务和rest服务的柔性描述模型中记录服务调用相关的属性用来生成与对应服务器通信的soap请求体或者rest请求体,并通过java语言的httpurlconnection类将生成的请求体发送至服务器端实现服务的调用。

本发明的有益效果主要表现在:(1)提供一种便于服务匹配的web服务柔性描述模型。(2)利用柔性描述模型记录服务调用信息实现web服务的调用。

附图说明

图1示出了soap服务和rest服务集成流程。

图2示出了rest服务网页信息爬取解析流程。

图3示出了soap服务和rest服务调用流程。

图4示出了soap服务柔性描述模型中的soaprequestbody属性。

图5示出了采用soap柔性描述模型描述的soap服务实例。

图6示出了采用rest柔性描述模型描述的rest服务实例。

具体实施方式

下面结合附图对本发明作进一步描述。

参照图1~图6,一种基于柔性描述模型的web服务调用方法,所述方法包括如下步骤:

第一步:对已经发布在互联网上的soap服务和rest服务进行集成,集成流程如图1所示;

1.1、soap服务集成;wsdl是soap服务的描述文档,描述了soap服务的方法名、发布地址、功能、输入输出参数等信息。首先通过人工手动收集wsdl或者爬虫程序爬取发布在互联网上的wsdl,其次对wsdl进行解析得到服务的具体描述信息并用soap服务柔性描述模型描述。

1.2、rest服务集成;rest服务大都采用基于自然语言的html文档来描述,为此,采用人工辅助或者爬虫程序爬取发布在互联网上的rest网页,对其解析提取出rest服务相关描述信息,如服务的名称、功能、发布地址、输入参数、输出参数等信息。其中,rest服务网页解析过程如图2所示。

进一步,所述步骤1.1中,wsdl解析过程如下:

1.1.1、获取wsdl文件的根节点definitions节点,解析出所有的service节点,service节点包含了服务的名称,其次解析出对应service节点下的port节点,port节点包含了服务的发布地址。

1.1.2、根据步骤1.1.1中解析得到的port节点去查找binding节点,binding节点用来描述服务的通信协议。

1.1.3、根据步骤1.1.2中解析得到的binding节点去查找porttype节点,porttype节点下每一个operation节点代表一个方法,每一个operation节点下都有一个input节点和output节点,分别代表该方法的输入与输出。

1.1.4、根据步骤1.1.3中解析得到的每一个operation节点下的input节点查找message节点,message节点用来描述通信消息数据结构的抽象类型化定义。

1.1.5、根据步骤1.1.4中解析得到的message节点下的part节点查找element节点。

1.1.6、根据步骤1.1.5中解析得到的element节点查找conplextype节点,conplextype节点下指明了步骤1.1.3中对应方法输入参数和输出参数的名称及其类型。

进一步,所述步骤1.2中,rest服务网页解析过程如下:

1.2.1、爬取rest服务原始网页。利用爬虫引擎将发布在互联网上的rest服务原始网页抓取,获得html页面基础库,为后续的特征提取做好准备。

1.2.2、去噪。对html页面基础库中的页面进行去噪处理,过滤掉无关的内容,保留页面的主体部分。

1.2.3、分词去除停用词。对步骤1.2.2中所得的页面主体进行分词,将页面主体中的句子划分为词语并移除无意义的词语如“a”、“the”等词汇。

1.2.4、建立数据词典。建立表示输入、输出、标签、服务描述等规则的数据词典,如“请求参数说明”、“返回参数说明”、“请求方式”等。

1.2.5、特征提取。利用所建立的数据词典,在遍历网页过程中进行服务特征提取,包括服务的名称、服务的功能描述、服务的输入输出信息,并将特征提取后的服务存入web服务库。

第二步:对集成后的soap服务和rest服务采用柔性描述模型进行建模;

2.1、soap服务柔性描述模型;具体定义见定义1,包含了soap服务的基本描述属性、soap服务的输入参数、返回信息以及用来实现soap服务调用的soap请求体信息等信息。

定义1:soap服务柔性描述模型(soapserviceflexibledescriptionmodel,soap-fdm)是由基本描述属性、soap请求体、输入参数、返回信息组成的四元组。

soap-fdm=<attributes,soaprequestbody,inputparams,outputparams>。

attributes描述服务的基本信息,包含了服务的名称、类型、描述信息、发布地址、调用方法、来源等;

soaprequestbody来自于dom4j等java库解析wsdl文件,如图4所示,用来与soap服务器进行通信,实现soap服务的自动化调用;

inputparams描述了所需的输入参数信息,包括输入参数的个数、类型、含义;

outputparams描述了返回信息,包含返回信息的含义以及类型;

其中,attributes是一个九元组,可形式化表示为如下形式:

attributes=<id,url,servicetype,name,chiname,method,description,comefrom,area>

id是每个服务的唯一标识符,其他的属性具体含义见表1所示,如description描述了服务的具体功能、comefrom描述了服务的来源等,这些属性便于服务调用者查找满足需求的服务;soaprequestbody在“<soapenv:body>”标签内分布着该soap服务的所有输入参数名称,用来和服务器进行通信,实现soap服务的调用;inputparams是由输入参数组成的集合,形式化表述为inputparams=<param1,param2,…,paramn>;outputparams是由输出参数组成的集合,形式化表述为outputparams=<param1,param2,…,paramn>;param是一个二元组,有参数类型type、输入输出参数描述inputparamdes/outputparamdes组成,即param=<type,inputparamdes/outputparamdes>。

2.2、rest服务柔性描述模型;具体定义见定义2,包含了rest服务的基本描述属性、rest服务的输入参数、返回信息以及用来实现rest服务调用的rest请求体信息。

定义2:rest服务柔性描述模型(restserviceflexibledescriptionmodel,rest-fdm)是由基本描述属性、输入参数、返回信息组成的三元组。rest-fdm=<attributes,inputparams,outputparams>。

attributes包含了服务的名称、类型、描述信息、发布地址、调用方法、来源等;

inputparams描述了所需的输入参数信息,包括输入参数的个数、类型、含义;

outputparams描述了返回信息,包含返回信息的含义以及类型;

其中,attributes是一个十一元组,可形式化表示为如下形式:

attributes=<id,url,servicetype,querytype,contenttype,name,chiname,method,description,comefrom,area>

与soap-fdm不同的是,rest-fdm中attributes多了querytype、contenttype这2个属性,用于rest服务的自动化调用,其他属性与soap-fdm类似,具体含义见表1所示。其中,querytype属性指明了rest服务的参数来源,可取如下几类标注:@pathparam、@queryparam、@headerparam、@cookieparam、@matrixparam、@formparam。常用的如@pathparam表明请求来自于url的路径,@queryparam表明请求自于url的查询参数;contenttype为浏览器端以编码格式接收返回结果,可取text/xml、text/plain、application/json等,如application/json表示服务调用后的返回信息将以json格式返回。通过将用户的输入请求与服务的发布地址进行拼接,即可实现rest服务的自动化调用。

表1

第三步:基于所述柔性描述模型,服务调用流程如图3所示,首先根据web服务库中对应web服务信息生成该服务的自动化调用页面,用户在该自动化调用页面输入该服务所需的输入参数信息,发送自动化调用请求到服务器端,由服务器端判断所调用web服务的类型,并根据具体的类型生成对应的web服务的请求体,发送该请求体到web服务所在的部署服务器,最后返回web服务的具体调用数据结果集。其中soap服务和rest服务调用方法如下:

3.1:soap服务调用方法;根据soap服务柔性描述模型,生成soap服务的请求体,将用户输入的信息与所生成的soap服务请求体进行拼接替换生成本次访问的、真实的soap请求体,并采用java语言的httpurlconnection类将该请求体发送至soap服务器,实现soap服务的调用。

3.2:rest服务调用方法;根据rest服务柔性描述模型,生成rest服务的请求体,将用户输入的信息与所生成的rest服务请求体进行拼接替换生成本次访问的、真实的rest请求体,并采用java语言的httpurlconnection类将该请求体发送至rest服务器,实现rest服务的调用。

进一步,所述步骤3.1中,soap服务调用方法如下:

soap服务由于其柔性描述模型中的soaprequestbody属性记录了soap服务的请求体模板,该请求体模板基于xmlschema规范来描述,通过将用户输入的参数值与soap服务的请求体模板中对应的输入参数进行替换拼接,生成最终真实的soap服务的请求体,再通过将soap请求体发送至soap服务器端即可进行soap服务的自动化调用。如图5所示,图5是一个采用soap-fdm描述的soap服务实例,该soap服务来自webxml,其功能是查询手机号码归属地,用户输入手机号码,返回该手机号码归属地信息。描述该soap服务的wsdl地址为http://ws.webxml.com.cn/webservices/mobilecodews.asmx?wsdl。图5中的soaprequestbody属性记录了该soap服务与soap服务器进行通信的soap请求体信息。通过获取用户的输入并将该输入信息与soaprequestbody进行拼接替换,生成最终对应本次请求的soap请求体,最后将该请求体发送至服务器端即可实现soap服务的自动化调用。

进一步,所述步骤3.2中,rest服务调用方法如下:

rest服务根据其柔性描述模型中url属性指明了服务的发布地址,querytype属性指明了调用该服务的参数来自于http请求的哪个位置,method属性指明了调用服务的方法,如get等信息,根据这些信息,生成满足柔性描述模型要求的rest请求体,最后将该请求体发送至对应rest服务器端即可进行rest服务的自动化调用。如图6所示,图6是一个采用rest-fdm描述的github服务实例,该服务的功能是查询github中都有哪些用户关注了github用户,用户通过输入要查询的github用户名,返回该github用户名下被关注的其他github用户名,该服务的发布地址url为:https://api.github.com/users/{user}/followers。其中{user}代表该服务的输入参数,同时也代表了该服务querytype为@pathparam类型,即该服务的输入参数来自于url的路径。调用的方法为get请求。通过获取用户的输入信息,即所要查询的github用户名,将得到输入查询信息与url信息进行拼接替换,如用户输入了“michael”,则生成的最终访问的链接为https://api.github.com/users/michael/followers,再生成满足该服务柔性描述模型要求的rest请求体,将该请求体发送至对应服务器,即可完成rest服务的自动化调用。

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