web service概念、架構及相關知識
一、WebService的定義
WebService有好幾種定義:
- W3C組織對其定義:WebService是一個軟體系統,為了支援跨網路的機器間互操作互動而設計。
- WebService通常被定義為一組模組化的API,我們可以通過網路進行呼叫,來執行遠端系統的請求服務。
- WebService就是暴露給外部使用的,可通過web呼叫的一組API。
- WebService是一種跨程式語言和跨作業系統平臺的遠端呼叫技術。
- Web Service = XML+XSD,SOAP和WSDL
其實這多種定義只是從不同的角度,不同的高度來理解WebService,最終都殊途同歸。
從表面上看,WebService是應用程式暴露給外部的一個能夠通過Web呼叫的API,它告訴我們:這裡有一組物件,它有哪些方法,方法名稱是什麼,所需要的引數是什麼,引數型別如何,方法會給你返回什麼值,可能會出現哪些異常,你怎麼呼叫它,使用什麼通訊協議來傳輸資料等等這些資訊。這樣就可以通過程式設計的方法呼叫這個方法,獲得這個WebService所提供的服務。這解釋了2,3兩種定義,這是WebService的外在表現形式。
從深層次來講,WebService是構建分散式系統,實現可互操作的新的技術架構,是一個平臺,是一套標準。它定義瞭如何在網路上實現互操作性,而不管你使用的是哪種語言,哪種作業系統。它最大的特點就是跨網路,跨平臺。實現互操作性是它的目的,而互操作性就是指在網路間的不同機器之間進行相互操作,否則同一個網路,同一個機器之間需要什麼互操作性嗎。W3C的定義中,機器二字就暗示著不管是windows系統,還是蘋果系統還是Linux系統,不管機器上是使用Java還是C,C#語言等,都可以實現互操作。這是WebService的內在價值,是一種更高,更深層次的系統架構。
WebService為了構建這樣一個跨語言的,跨網路的分散式平臺,它必須提供一套協議或者說標準。任何一個平臺都有它自己的資料表示方法和資料型別系統。它必須提供一個統一的型別系統,以溝通不同語言,不同平臺,不同元件模型的差異,使它們能夠交流。它還必須提供一套標準來描述WebService,讓客戶能夠得到足夠且充分的資訊來呼叫它。最後,它需要提供一種遠端呼叫方法,告訴客戶端以什麼樣的格式或者說方式來呼叫webService。這正好對應了WebService的三大技術:XML+XSD,WSDL,SOAP。
Web Service = XML+XSD,SOAP和WSDL這是從技術實現層面上來說明WebService
WebServices與WebService
初看,似乎一個是複數形式,一個是單數形式。然而,WebServices指的是用於架構WebService的整體技術框架,WebService表示使用WebServices技術框架而建立的應用例項。當然有時候WebServices也表示具體的應用例項,只不過這時是泛指(複數),有時候WebService也表示用於架構服務的整體技術框架。所以這兩個詞所表示的含義需要通過語境來確定,閱讀文件時需注意。
二、WebService平臺技術
XML+XSD,SOAP和WSDL就是構成WebService平臺的三大技術。
XML+XSD
WebService採用HTTP協議傳輸資料,採用XML格式封裝資料(即XML中說明呼叫遠端服務物件的哪個方法,傳遞的引數是什麼,以及服務物件的返回結果是什麼)。XML是WebService平臺中表示資料的格式。除了易於建立和易於分析外,XML主要的優點在於它既是平臺無關的,又是廠商無關的。無關性是比技術優越性更重要的:軟體廠商是不會選擇一個由競爭對手所發明的技術的。
XML解決了資料表示的問題,但它沒有定義一套標準的資料型別,更沒有說怎麼去擴充套件這套資料型別。例如,整形數到底代表什麼?16位,32位,64位?這些細節對實現互操作性很重要。XML Schema(XSD)就是專門解決這個問題的一套標準。它定義了一套標準的資料型別,並給出了一種語言來擴充套件這套資料型別。WebService平臺就是用XSD來作為其資料型別系統的。當你用某種語言(如.NET或Java,C語言)來構造一個Web service時,為了符合WebService標準,所有你使用的資料型別都必須被轉換為XSD型別。你用的工具可能已經自動幫你完成了這個轉換
SOAP:
WebService通過HTTP協議傳送請求和接收結果時,必須要有一定的格式,並不是說通過Http隨便傳送一個請求就可以的。傳送的請求內容和結果內容都採用XML格式封裝,並增加了一些特定的HTTP訊息頭,以說明HTTP訊息的內容格式,這些特定的HTTP訊息頭和XML內容格式就是SOAP協議。SOAP提供了標準的RPC方法來呼叫Web Service。
SOAP協議 = HTTP協議 + XML資料格式
SOAP協議定義了SOAP訊息的格式,SOAP協議是基於HTTP協議的,SOAP也是基於XML和XSD的,XML是SOAP的資料編碼方式。Http是基本協議,而SOAP在基礎協議上添加了一系列的格式限制。打個比喻:HTTP就是普通公路,XML就是中間的綠色隔離帶和兩邊的防護欄,SOAP就是普通公路經過加隔離帶和防護欄改造過的高速公路。
WSDL:
WebService客戶端要呼叫一個WebService服務,首先要先知道這個服務的地址在哪,以及這個服務裡有什麼方法可以呼叫,所以,WebService務器端首先要通過一個WSDL檔案來說明自己家裡有啥服務可以對外呼叫,服務是什麼(服務中有哪些方法,方法接受的引數是什麼,返回值是什麼),服務的網路地址用哪個url地址表示,服務通過什麼方式來呼叫。WSDL是WebService的描述。就好比你買了一輛散裝自行車,總得附一個產品說明書吧,告訴你怎麼把自行車怎麼組裝起來,各個零件的作用.
WSDL(Web Services Description Language)就是這樣一個基於XML的語言,用於描述Web Service及其函式、引數和返回值。它是WebService客戶端和伺服器端都能理解的標準格式。因為是基於XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的,這將是一個很大的好處。一些最新的開發工具既能根據你的Web service生成WSDL文件,又能匯入WSDL文件,生成呼叫相應WebService的代理類程式碼。
WSDL檔案儲存在Web伺服器上,通過一個url地址就可以訪問到它。客戶端要呼叫一個WebService服務之前,要知道該服務的WSDL檔案的地址。WebService服務提供商可以通過兩種方式來暴露它的WSDL檔案地址:1.註冊到UDDI伺服器,以便被人查詢;2.直接告訴給客戶端呼叫者。
三、WebServices體系架構模型
WebService體系結構基於三種角色(服務提供者,服務註冊中心,服務請求者)之間的互動。互動具體涉及到釋出、查詢和繫結操作。服務提供者提供WebService描述並且將服務釋出到服務請求者或者服務註冊中心。服務請求者使用查詢操作從本地或者服務註冊中心搜尋服務描述,然後使用服務描述與服務提供者繫結,並呼叫相應的WebService實現、同它互動。服務註冊中心是一個Web服務的註冊地,彙集了很多線上的Web服務一般來說服務提供者將Web服務安裝到線上伺服器之後,會將Web服務釋出到服務註冊中心去,從而使得服務註冊中心包含了越來越多的Web服務的技術資訊。目前,服務註冊中心即為UDDI商業註冊中心。服務提供這和服務請求者角色是邏輯結構,下圖展示了這三者之間的關係和互動。
- 服務提供者(Service Provider)
從企業的角度來看,這是服務的所有者。從體系結構的角度看,這是託管被訪問服務的平臺。 - 服務請求者(Service Requestor)
從企業的角度來看,這是要求滿足特定要求的企業。從體系結構的角度來看,這是尋找並呼叫服務、或啟動與服務互動的應用程式。服務請求者角色可以由瀏覽器來擔當,有人或這無介面的應用程式(例如:另一個WebService)來控制它。 - 服務註冊中心(Service Registry)
這是可搜尋的服務描述註冊中心。服務提供者在此釋出他們的服務描述。在靜態繫結開發或動態繫結執行階段,服務請求者在這裡查詢服務並獲取服務的繫結資訊(在服務描述中)。對於靜態繫結的服務請求者,服務註冊中心是可選的,因為服務提供者可以把服務描述直接傳送給服務請求者。同樣服務請求者也可以從服務註冊中心以外的其他來源中獲得服務描述。例如:本地檔案,FTP站點,Web站點、ADS文字檔案(Advertisement and Discovery of Services)或者DISCO檔案(Discovery of WebServices)。
四、WebServices協議棧
前面說道,WebService為了構建一個跨語言的,跨網路的分散式平臺,也為了保證在基本訪問之上的事務、工作流、安全機制等。它必須提供一套協議或者說標準。下圖展示了一個概念性的WebServices協議棧。上層建立在下層協議提供的功能之上。
網路傳輸層
WebService協議棧的基礎是網路傳輸層。WebService要想被服務請求者呼叫,就必須是可以通過網路進行訪問的。Internet上可以訪問的WebService採用已經普遍部署的網路協議:HTTP。當然在一些特殊應用上,WebService也支援FTP協議(檔案傳輸),和SMTP協議(電子郵件)。而對於Intranet上,WebServices也支援採用中介軟體來作為傳輸互動的基礎架構,例如IBM的MQ Series(已改名為MQ)和CORBA(Common Object Request Broker Architecture)
WebService的優勢之一就是能夠為Internet和Intranet上的服務開發和使用提供統一的程式設計模型。因此對於開發者來說,網路協議和技術的選擇是透明的。
資料表現層
資料表現層的XML為WebServices上層協議提供了資訊、資料描述手段。XML是目前全球範圍內描述資料和交換資料的一種標準方式。
在WebServices的時代,全部的規範、技術都是以XML為底層核心和構架基礎的。對WebServices而言,不管是WebService的呼叫(SOAP技術),還是WebService的介面描述(WSDL技術),還是WebService的發現(UDDI技術)都是將XML作為資訊描述和交換的標準方式。
資料模型層
在資料表現層之上是資料模型層。描述資料結構的資料模型(也就是元資料),它本身也是一種資料。因此,描述資料結構的方式也是使用WebServices標準的資料表現方式:XML。
XML Schema是XML世界中標準的資料建模語言,SOAP、WSDL、UDDI的語法都是通過XML Schema來定義和描述的。XML Schema已經成為XML世界中的標準交流工具,類似於軟體設計中的UML。
基於XML的訊息層
在這一層此,WebServices使用的是基於XML的訊息交換協議SOAP。SOAP是構建於更低的傳輸層之上,這意味這SOAP可以單獨使用,也可以與任何傳輸層協議進聯合使用。所有的SOAP訊息都提供前面說過的WebService架構中的釋出(Publish)、繫結(Bind)、和查詢(Find)功能。SOAP由三個部分組成:
- 一個使用XML信封來描述訊息內容的機制
- 一組編序規則,用來編碼各種各樣的資料格式
- 一個提供遠端過程呼叫(RPC)和響應的機制
服務描述層
服務描述為呼叫WebService提供了具體的方法。它是基於XML格式的用於定義和描述WebService服務的實現和介面的基礎標準。這也表示WSDL將服務描述為兩個部分:服務實現和服務介面。在按照WSDL進行服務實現之前,我們必須先定義服務介面。WSDL只是服務的基本描述手段,要指定業務環境、服務質量和服務之間的關係,我們還需要另外的描述手段。
服務釋出層
WSDL文件只是服務的基本描述手段,它可以通過其他服務描述文件來補充,以描述WebServices例如業務環境,服務質量等更高階的資訊。
在服務客戶生命週期內的任一階段,都可以將WSDL文件傳送給WebService的客戶端。當這一操作被涉及後,我們就需要從服務描述層進入到下一個服務層次的服務釋出層。在這一層次,服務提供者能夠向服務客戶端傳送WSDL文件,一個可能的例子是通過Email的形式。同時,服務提供者也可以將WSDL釋出到本地的UDDI庫中,或者是公共/私有的UDDI服務註冊中心,服務客戶端可以通過註冊庫發現WSDL文件。
服務發現層
服務發現層基於服務釋出層。如果服務沒有釋出或者不能釋出,它就不能被發現。服務客戶端也可以選擇在設計階段或執行時階段通過本地WSDL服務註冊中心或者公有/私有的UDDI註冊中心發現WSDL文件。
服務工作流層
WebServices工作流語言(WSFL)是協議棧頂層的服務工作流層的標準語言。與協議棧中其他的標準不同,WSFL針對的是商務流程建模和工作流。WSFL用於描述WebService在工作流中如何互動,以及服務跟服務之間的通訊和協同,這意味這WebService可以是工作流的一部分,也可以動態地被編入工作流。特別是,這個工作流有可能發生在買方,賣方和承運方之間。
例如WSFL允許工作流管理器從一個複合WebServices中,按工作流來定義依據商業流程賦予的不同功能的,作為其成分的每個個體WebService。這樣的商業流程包括財務報表、預測和5年IT計劃等。