本發(fā)明屬于服務計算領域,特別涉及一種基于柔性描述模型的web服務調用方法。
背景技術:
web服務作為一種潛在的分布式服務架構解決方案,在互聯(lián)網(wǎng)上具有重大影響。服務描述是一組描述web服務接口和語義的文檔,以服務語義、服務關系表述服務,是對于服務、服務接口及可交換信息的機器可處理描述。服務描述在服務發(fā)現(xiàn)、服務匹配過程中起著至關重要的作用?,F(xiàn)有web服務描述模型主要有wsdl(webservicesdescriptionlanguage)、owl-s(ontologyweblanguageforservice),wadl(webapplicationdescriptionlanguage)和基于自然語言描述的網(wǎng)頁等方式。然而,現(xiàn)有服務描述模型的多樣化、不同描述模型之間存在異構性,為服務發(fā)現(xiàn)、服務調用、服務之間的協(xié)同工作帶來困難。
目前,學術界為改善現(xiàn)有服務描述模型的不足,在服務描述模型方面已經(jīng)有所研究:
趙文棟等人提出了一種基于功能語義的web服務描述及預檢索方法,該方法針對現(xiàn)有常用web服務描述模型不能很好地支持服務基于功能的語義描述的問題,通過定義服務功能描述模型,構建領域功能本體,提出了一種基于功能語義的web服務描述方法。田剛等人提出一種web服務描述的本體學習方法,針對現(xiàn)有服務本體難以滿足web服務語義查詢的需要,而手工建立本體不僅困難而且成本很高等問題,利用一種基于層次dirichlet過程(hierarchicaldirichletprocess,hdp)的主題模型自動學習本體層次結構和每一層中所包含的主題數(shù)目來豐富本體語義。白曉磊針對現(xiàn)有服務描述模型不能反映服務所屬領域中概念及概念間關系的變化,對owl-s服務本體進行動態(tài)語義擴展,在服務本體中加入模糊概念模型以擴展服務本體中的概念及概念關系,加入服務質量模型以反映服務狀態(tài)變化,形成可重寫邏輯的服務描述模型。
上述研究中,在現(xiàn)有服務描述模型基礎上從服務發(fā)現(xiàn)、匹配效率方面去改善服務描述模型,未能從服務調用方面去改善服務描述模型來實現(xiàn)服務之間的更好的協(xié)同工作。
技術實現(xiàn)要素:
為了克服現(xiàn)有web服務調用方法的通用性較差的不足,本發(fā)明主要用于從服務調用方面改善現(xiàn)有服務描述模型,提供了一種對soap(simpleobjectaccessprotocol)服務和rest(representationalstatetransfer)服務的具有較好通用性的服務柔性描述模型及服務調用方法。
本發(fā)明所采用的技術方案是:
一種基于柔性描述模型的web服務調用方法,所述方法包括如下步驟:
第一步:對已經(jīng)發(fā)布在互聯(lián)網(wǎng)上的soap服務和rest服務進行集成;
1.1、soap服務集成;wsdl是soap服務的描述文檔,描述了soap服務的方法名、發(fā)布地址、功能和輸入輸出參數(shù)信息;首先通過人工手動收集wsdl或者爬蟲程序爬取發(fā)布在互聯(lián)網(wǎng)上的wsdl,其次對wsdl進行解析得到服務的具體描述信息并用soap服務柔性描述模型描述;
1.2、rest服務集成;rest服務采用基于自然語言的html文檔來描述,為此,采用人工輔助或者爬蟲程序爬取發(fā)布在互聯(lián)網(wǎng)上的rest網(wǎng)頁,對其解析提取出rest服務相關描述信息,如服務的名稱、功能、發(fā)布地址、輸入?yún)?shù)和輸出參數(shù)信息;
第二步:對集成后的soap服務和rest服務采用柔性描述模型進行建模;
2.1、soap服務柔性描述模型;包含了soap服務的基本描述屬性、soap服務的輸入?yún)?shù)、返回信息以及用來實現(xiàn)soap服務調用的soap請求體信息;
2.2、rest服務柔性描述模型;含了rest服務的基本描述屬性、rest服務的輸入?yún)?shù)、返回信息以及用來實現(xiàn)rest服務調用的rest請求體信息;
第三步:基于所述柔性描述模型,soap服務和rest服務調用方法如下:
3.1:soap服務調用方法;根據(jù)soap服務柔性描述模型,生成soap服務的請求體,將用戶輸入的信息與所生成的soap服務請求體進行拼接替換生成本次訪問的、真實的soap請求體,并采用java語言的httpurlconnection類將該請求體發(fā)送至soap服務器,實現(xiàn)soap服務的調用;
3.2:rest服務調用方法;根據(jù)rest服務柔性描述模型,生成rest服務的請求體,將用戶輸入的信息與所生成的rest服務請求體進行拼接替換生成本次訪問的、真實的rest請求體,并采用java語言的httpurlconnection類將該請求體發(fā)送至rest服務器,實現(xiàn)rest服務的調用。
進一步,所述步驟1.1中,wsdl解析過程如下:
1.1.1、獲取wsdl文件的根節(jié)點definitions節(jié)點,解析出所有的service節(jié)點,service節(jié)點包含了服務的名稱,其次解析出對應service節(jié)點下的port節(jié)點,port節(jié)點包含了服務的發(fā)布地址;
1.1.2、根據(jù)步驟1.1.1中解析得到的port節(jié)點去查找binding節(jié)點,binding節(jié)點用來描述服務的通信協(xié)議;
1.1.3、根據(jù)步驟1.1.2中解析得到的binding節(jié)點去查找porttype節(jié)點,porttype節(jié)點下每一個operation節(jié)點代表一個方法,每一個operation節(jié)點下都有一個input節(jié)點和output節(jié)點,分別代表該方法的輸入與輸出;
1.1.4、根據(jù)步驟1.1.3中解析得到的每一個operation節(jié)點下的input節(jié)點查找message節(jié)點,message節(jié)點用來描述通信消息數(shù)據(jù)結構的抽象類型化定義。
1.1.5、根據(jù)步驟1.1.4中解析得到的message節(jié)點下的part節(jié)點查找element節(jié)點;
1.1.6、根據(jù)步驟1.1.5中解析得到的element節(jié)點查找conplextype節(jié)點,conplextype節(jié)點下指明了步驟1.1.3中對應方法輸入?yún)?shù)和輸出參數(shù)的名稱及其類型。
再進一步,所述步驟1.2中,rest服務網(wǎng)頁解析過程如下:
1.2.1、爬取rest服務原始網(wǎng)頁,利用爬蟲引擎將發(fā)布在互聯(lián)網(wǎng)上的rest服務原始網(wǎng)頁抓取,獲得html頁面基礎庫,為后續(xù)的特征提取做好準備;
1.2.2、去噪,對html頁面基礎庫中的頁面進行去噪處理,過濾掉無關的內容,保留頁面的主體部分;
1.2.3、分詞去除停用詞,對步驟1.2.2中所得的頁面主體進行分詞,將頁面主體中的句子劃分為詞語并移除無意義的詞語如“a”、“the”詞匯;
1.2.4、建立數(shù)據(jù)詞典,建立表示輸入、輸出、標簽、服務描述規(guī)則的數(shù)據(jù)詞典,如“請求參數(shù)說明”、“返回參數(shù)說明”、“請求方式”;
1.2.5、特征提取,利用所建立的數(shù)據(jù)詞典,在遍歷網(wǎng)頁過程中進行服務特征提取,包括服務的名稱、服務的功能描述、服務的輸入輸出信息,并將特征提取后的服務存入web服務庫。
更進一步,所述步驟2.1中,定義1:soap服務柔性描述模型是由基本描述屬性、soap請求體、輸入?yún)?shù)、返回信息組成的四元組;
soap-fdm=<attributes,soaprequestbody,inputparams,outputparams>
attributes描述服務的基本信息,包含了服務的名稱、類型、描述信息、發(fā)布地址、調用方法和來源;
soaprequestbody來自于java庫解析wsdl文件,用來與soap服務器進行通信,實現(xiàn)soap服務的自動化調用;
inputparams描述了所需的輸入?yún)?shù)信息,包括輸入?yún)?shù)的個數(shù)、類型和含義;
outputparams描述了返回信息,包含返回信息的含義以及類型;
其中,attributes是一個九元組,形式化表示為如下形式:
attributes=<id,url,servicetype,name,chiname,method,description,comefrom,area>
id是每個服務的唯一標識符,url是服務發(fā)布的地址,servicetype是指明服務類型,取值為soap或者rest,name是服務的英文名字,chiname是服務的中文名字,method服務調用的方法,description是服務的功能描述、comefrom是服務的來源,area是服務所屬的領域;soaprequestbody在“<soapenv:body>”標簽內分布著該soap服務的所有輸入?yún)?shù)名稱,用來和服務器進行通信,實現(xiàn)soap服務的調用;inputparams是由輸入?yún)?shù)組成的集合,形式化表述為inputparams=<param1,param2,…,paramn>;outputparams是由輸出參數(shù)組成的集合,形式化表述為outputparams=<param1,param2,…,paramn>;param是一個二元組,有參數(shù)類型type、輸入輸出參數(shù)描述inputparamdes/outputparamdes組成,即param=<type,inputparamdes/outputparamdes>。
所述步驟2.2中,定義2:rest服務柔性描述模型是由基本描述屬性、輸入?yún)?shù)、返回信息組成的三元組,rest-fdm=<attributes,inputparams,outputparams>。
attributes包含了服務的名稱、類型、描述信息、發(fā)布地址、調用方法和來源;
inputparams描述了所需的輸入?yún)?shù)信息,包括輸入?yún)?shù)的個數(shù)、類型和含義;
outputparams描述了返回信息,包含返回信息的含義以及類型;
其中,attributes是一個十一元組,可形式化表示為如下形式:
attributes=<id,url,servicetype,querytype,contenttype,name,chiname,method,description,comefrom,area>
querytype是rest服務的參數(shù)來源,contenttype是rest服務的返回信息編碼格式;querytype屬性指明了rest服務的參數(shù)來源,取如下幾類標注:@pathparam、@queryparam、@headerparam、@cookieparam、@matrixparam、@formparam;常用的如@pathparam表明請求來自于url的路徑,@queryparam表明請求自于url的查詢參數(shù);contenttype為瀏覽器端以編碼格式接收返回結果,可取text/xml、text/plain和application/json,如application/json表示服務調用后的返回信息將以json格式返回;通過將用戶的輸入請求與服務的發(fā)布地址進行拼接,即可實現(xiàn)rest服務的自動化調用。
所述步驟3.1中,soap服務調用方法如下:
soap服務由于其柔性描述模型中的soaprequestbody屬性記錄了soap服務的請求體模板,該請求體模板基于xmlschema規(guī)范來描述,通過將用戶輸入的參數(shù)值與soap服務的請求體模板中對應的輸入?yún)?shù)進行替換拼接,生成最終真實的soap服務的請求體,再通過將soap請求體發(fā)送至soap服務器端即可進行soap服務的自動化調用。
所述步驟3.2中,rest服務調用方法如下:
rest服務根據(jù)其柔性描述模型中url屬性指明了服務的發(fā)布地址,querytype屬性指明了調用該服務的參數(shù)來自于http請求的哪個位置,method屬性指明了調用服務的方法,根據(jù)這些信息,生成滿足柔性描述模型要求的rest請求體,最后將該請求體發(fā)送至對應rest服務器端即可進行rest服務的自動化調用。
本發(fā)明的技術構思為:在soap服務和rest服務的柔性描述模型中記錄服務調用相關的屬性用來生成與對應服務器通信的soap請求體或者rest請求體,并通過java語言的httpurlconnection類將生成的請求體發(fā)送至服務器端實現(xiàn)服務的調用。
本發(fā)明的有益效果主要表現(xiàn)在:(1)提供一種便于服務匹配的web服務柔性描述模型。(2)利用柔性描述模型記錄服務調用信息實現(xiàn)web服務的調用。
附圖說明
圖1示出了soap服務和rest服務集成流程。
圖2示出了rest服務網(wǎng)頁信息爬取解析流程。
圖3示出了soap服務和rest服務調用流程。
圖4示出了soap服務柔性描述模型中的soaprequestbody屬性。
圖5示出了采用soap柔性描述模型描述的soap服務實例。
圖6示出了采用rest柔性描述模型描述的rest服務實例。
具體實施方式
下面結合附圖對本發(fā)明作進一步描述。
參照圖1~圖6,一種基于柔性描述模型的web服務調用方法,所述方法包括如下步驟:
第一步:對已經(jīng)發(fā)布在互聯(lián)網(wǎng)上的soap服務和rest服務進行集成,集成流程如圖1所示;
1.1、soap服務集成;wsdl是soap服務的描述文檔,描述了soap服務的方法名、發(fā)布地址、功能、輸入輸出參數(shù)等信息。首先通過人工手動收集wsdl或者爬蟲程序爬取發(fā)布在互聯(lián)網(wǎng)上的wsdl,其次對wsdl進行解析得到服務的具體描述信息并用soap服務柔性描述模型描述。
1.2、rest服務集成;rest服務大都采用基于自然語言的html文檔來描述,為此,采用人工輔助或者爬蟲程序爬取發(fā)布在互聯(lián)網(wǎng)上的rest網(wǎng)頁,對其解析提取出rest服務相關描述信息,如服務的名稱、功能、發(fā)布地址、輸入?yún)?shù)、輸出參數(shù)等信息。其中,rest服務網(wǎng)頁解析過程如圖2所示。
進一步,所述步驟1.1中,wsdl解析過程如下:
1.1.1、獲取wsdl文件的根節(jié)點definitions節(jié)點,解析出所有的service節(jié)點,service節(jié)點包含了服務的名稱,其次解析出對應service節(jié)點下的port節(jié)點,port節(jié)點包含了服務的發(fā)布地址。
1.1.2、根據(jù)步驟1.1.1中解析得到的port節(jié)點去查找binding節(jié)點,binding節(jié)點用來描述服務的通信協(xié)議。
1.1.3、根據(jù)步驟1.1.2中解析得到的binding節(jié)點去查找porttype節(jié)點,porttype節(jié)點下每一個operation節(jié)點代表一個方法,每一個operation節(jié)點下都有一個input節(jié)點和output節(jié)點,分別代表該方法的輸入與輸出。
1.1.4、根據(jù)步驟1.1.3中解析得到的每一個operation節(jié)點下的input節(jié)點查找message節(jié)點,message節(jié)點用來描述通信消息數(shù)據(jù)結構的抽象類型化定義。
1.1.5、根據(jù)步驟1.1.4中解析得到的message節(jié)點下的part節(jié)點查找element節(jié)點。
1.1.6、根據(jù)步驟1.1.5中解析得到的element節(jié)點查找conplextype節(jié)點,conplextype節(jié)點下指明了步驟1.1.3中對應方法輸入?yún)?shù)和輸出參數(shù)的名稱及其類型。
進一步,所述步驟1.2中,rest服務網(wǎng)頁解析過程如下:
1.2.1、爬取rest服務原始網(wǎng)頁。利用爬蟲引擎將發(fā)布在互聯(lián)網(wǎng)上的rest服務原始網(wǎng)頁抓取,獲得html頁面基礎庫,為后續(xù)的特征提取做好準備。
1.2.2、去噪。對html頁面基礎庫中的頁面進行去噪處理,過濾掉無關的內容,保留頁面的主體部分。
1.2.3、分詞去除停用詞。對步驟1.2.2中所得的頁面主體進行分詞,將頁面主體中的句子劃分為詞語并移除無意義的詞語如“a”、“the”等詞匯。
1.2.4、建立數(shù)據(jù)詞典。建立表示輸入、輸出、標簽、服務描述等規(guī)則的數(shù)據(jù)詞典,如“請求參數(shù)說明”、“返回參數(shù)說明”、“請求方式”等。
1.2.5、特征提取。利用所建立的數(shù)據(jù)詞典,在遍歷網(wǎng)頁過程中進行服務特征提取,包括服務的名稱、服務的功能描述、服務的輸入輸出信息,并將特征提取后的服務存入web服務庫。
第二步:對集成后的soap服務和rest服務采用柔性描述模型進行建模;
2.1、soap服務柔性描述模型;具體定義見定義1,包含了soap服務的基本描述屬性、soap服務的輸入?yún)?shù)、返回信息以及用來實現(xiàn)soap服務調用的soap請求體信息等信息。
定義1:soap服務柔性描述模型(soapserviceflexibledescriptionmodel,soap-fdm)是由基本描述屬性、soap請求體、輸入?yún)?shù)、返回信息組成的四元組。
soap-fdm=<attributes,soaprequestbody,inputparams,outputparams>。
attributes描述服務的基本信息,包含了服務的名稱、類型、描述信息、發(fā)布地址、調用方法、來源等;
soaprequestbody來自于dom4j等java庫解析wsdl文件,如圖4所示,用來與soap服務器進行通信,實現(xiàn)soap服務的自動化調用;
inputparams描述了所需的輸入?yún)?shù)信息,包括輸入?yún)?shù)的個數(shù)、類型、含義;
outputparams描述了返回信息,包含返回信息的含義以及類型;
其中,attributes是一個九元組,可形式化表示為如下形式:
attributes=<id,url,servicetype,name,chiname,method,description,comefrom,area>
id是每個服務的唯一標識符,其他的屬性具體含義見表1所示,如description描述了服務的具體功能、comefrom描述了服務的來源等,這些屬性便于服務調用者查找滿足需求的服務;soaprequestbody在“<soapenv:body>”標簽內分布著該soap服務的所有輸入?yún)?shù)名稱,用來和服務器進行通信,實現(xiàn)soap服務的調用;inputparams是由輸入?yún)?shù)組成的集合,形式化表述為inputparams=<param1,param2,…,paramn>;outputparams是由輸出參數(shù)組成的集合,形式化表述為outputparams=<param1,param2,…,paramn>;param是一個二元組,有參數(shù)類型type、輸入輸出參數(shù)描述inputparamdes/outputparamdes組成,即param=<type,inputparamdes/outputparamdes>。
2.2、rest服務柔性描述模型;具體定義見定義2,包含了rest服務的基本描述屬性、rest服務的輸入?yún)?shù)、返回信息以及用來實現(xiàn)rest服務調用的rest請求體信息。
定義2:rest服務柔性描述模型(restserviceflexibledescriptionmodel,rest-fdm)是由基本描述屬性、輸入?yún)?shù)、返回信息組成的三元組。rest-fdm=<attributes,inputparams,outputparams>。
attributes包含了服務的名稱、類型、描述信息、發(fā)布地址、調用方法、來源等;
inputparams描述了所需的輸入?yún)?shù)信息,包括輸入?yún)?shù)的個數(shù)、類型、含義;
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服務的參數(shù)來源,可取如下幾類標注:@pathparam、@queryparam、@headerparam、@cookieparam、@matrixparam、@formparam。常用的如@pathparam表明請求來自于url的路徑,@queryparam表明請求自于url的查詢參數(shù);contenttype為瀏覽器端以編碼格式接收返回結果,可取text/xml、text/plain、application/json等,如application/json表示服務調用后的返回信息將以json格式返回。通過將用戶的輸入請求與服務的發(fā)布地址進行拼接,即可實現(xiàn)rest服務的自動化調用。
表1
第三步:基于所述柔性描述模型,服務調用流程如圖3所示,首先根據(jù)web服務庫中對應web服務信息生成該服務的自動化調用頁面,用戶在該自動化調用頁面輸入該服務所需的輸入?yún)?shù)信息,發(fā)送自動化調用請求到服務器端,由服務器端判斷所調用web服務的類型,并根據(jù)具體的類型生成對應的web服務的請求體,發(fā)送該請求體到web服務所在的部署服務器,最后返回web服務的具體調用數(shù)據(jù)結果集。其中soap服務和rest服務調用方法如下:
3.1:soap服務調用方法;根據(jù)soap服務柔性描述模型,生成soap服務的請求體,將用戶輸入的信息與所生成的soap服務請求體進行拼接替換生成本次訪問的、真實的soap請求體,并采用java語言的httpurlconnection類將該請求體發(fā)送至soap服務器,實現(xiàn)soap服務的調用。
3.2:rest服務調用方法;根據(jù)rest服務柔性描述模型,生成rest服務的請求體,將用戶輸入的信息與所生成的rest服務請求體進行拼接替換生成本次訪問的、真實的rest請求體,并采用java語言的httpurlconnection類將該請求體發(fā)送至rest服務器,實現(xiàn)rest服務的調用。
進一步,所述步驟3.1中,soap服務調用方法如下:
soap服務由于其柔性描述模型中的soaprequestbody屬性記錄了soap服務的請求體模板,該請求體模板基于xmlschema規(guī)范來描述,通過將用戶輸入的參數(shù)值與soap服務的請求體模板中對應的輸入?yún)?shù)進行替換拼接,生成最終真實的soap服務的請求體,再通過將soap請求體發(fā)送至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請求體,最后將該請求體發(fā)送至服務器端即可實現(xiàn)soap服務的自動化調用。
進一步,所述步驟3.2中,rest服務調用方法如下:
rest服務根據(jù)其柔性描述模型中url屬性指明了服務的發(fā)布地址,querytype屬性指明了調用該服務的參數(shù)來自于http請求的哪個位置,method屬性指明了調用服務的方法,如get等信息,根據(jù)這些信息,生成滿足柔性描述模型要求的rest請求體,最后將該請求體發(fā)送至對應rest服務器端即可進行rest服務的自動化調用。如圖6所示,圖6是一個采用rest-fdm描述的github服務實例,該服務的功能是查詢github中都有哪些用戶關注了github用戶,用戶通過輸入要查詢的github用戶名,返回該github用戶名下被關注的其他github用戶名,該服務的發(fā)布地址url為:https://api.github.com/users/{user}/followers。其中{user}代表該服務的輸入?yún)?shù),同時也代表了該服務querytype為@pathparam類型,即該服務的輸入?yún)?shù)來自于url的路徑。調用的方法為get請求。通過獲取用戶的輸入信息,即所要查詢的github用戶名,將得到輸入查詢信息與url信息進行拼接替換,如用戶輸入了“michael”,則生成的最終訪問的鏈接為https://api.github.com/users/michael/followers,再生成滿足該服務柔性描述模型要求的rest請求體,將該請求體發(fā)送至對應服務器,即可完成rest服務的自動化調用。