WebService初探(推薦)〔開心本人特別看好WebService〕

來源:互聯網
上載者:User
web Web Service初探(推薦)<br>
<br>
<br>
<br>
簡介<br>
<br>
回顧過去的六年,難以想象如果沒有互連網的話,網路計算會變成什麼樣。更早的超文字模式失敗了,而互連網成功了,這其中最基本的原因可以歸結為:互連網簡單且無處不在。從服務提供者(如網上商店)的角度來看,只要你會打字,你就可以接受服務。從服務API的角度來看,互連網上絕大多數的活動都可以由三種方法(GET, POST, 和PUT ) 以及一種標記語言來完成。Web Service的興起正是基於這樣一個事實:Web不僅可以作為一個資訊平台 ,也可以作為一個服務平台。 <br>
這裡的“Services”不是指Amazon.com提供的那種粗糙的服務,而是一種元件服務,其他人可以用來構造更強大的服務。例如,Microsoft提供了Passport服務,提供Web上的認證功能,所以,類似華盛頓郵報之類的電子報紙就不必自己開發認證服務,只要交給Passport做就可以了。當然,這隻是一個假設。<br>
<br>
Oracle的動態服務白皮書(dynamic services whitepaper)提供了更多元件服務的例子:匯率轉換,翻譯,貨物運輸等等。IBM對Web Service有一個更為正式的定義:<br>
<br>
Web ervices 是一種新的web應用程式分支,他們是自包含、自描述、模組化的應用,發行就緒、定位、通過web調用。Web service可以執行從簡單的請求到複雜商務處理的任何功能。一旦部署以後,其他web services應用程式可以發現並調用它部署的服務。<br>
<br>
IBM的Web Service指南接著說在幾年前Web Service還是一個效率低下無法引起人們興趣的概念。但是隨著頻寬和儲存變的更為便宜,內容更為動態化,對不同平台上廣泛而多樣的計算裝置的整合的要求也更為強烈,同時,也使得人們對代價(頻寬和儲存)不那麼敏感。<br>
<br>
當我已經有了我中意的中介軟體平台(RMI, Jini, CORBA, DCOM 等等)時,為什麼還要為Web而煩惱呢?中介軟體確實提供了強大的服務實現手段,但是,他們當中沒有一個是絕對的勝利者。Web作為資訊發行者的力量就在於簡單且無處不在,這對解決現在這樣一個分裂中介軟體世界很重要。Web通過在傳統中介軟體平台上更有效實現的Services,來提供一個統一且廣泛適用的介面,這樣就改善了這個平台。<br>
<br>
從一個N層應用程式結構的角度來看,web service只是一個方便程式訪問的封裝,服務還是要靠中介軟體來實現。訪問包括服務要求處理(監聽者)和一個支援商業邏輯操作的介面,商業邏輯本身是由傳統的中介軟體平台實現的。<br>
<br>
Web Services平台<br>
<br>
那麼什麼是web service 平台呢?最基本的平台是XML加HTTP。HTTP是一個在Internet上廣泛使用的協議。XML是一種元語言,你可以用它書寫特定的語言來描述客戶和服務之間或者組件和複雜服務之間的互動。在web server之後,XML格式的訊息被轉變成中介軟體的請求,返回的結果也會轉化成XML格式。 <br>
<br>
你可能會問,這與說CORBA是IDL加上RPC不是一樣嗎?這個平台到底如何支援service的發現,事務,安全,認證等等準系統,以使它真正成為一個平台呢? 下面我們將講述這一點。 <br>
<br>
有必要增加一些服務,同時保持簡單性和普遍性,來把Web構建成一個功能更強大的平台。可以認為功能全面的web services平台是XML+HTTP+SOAP+WSDL+UDDI。在更高層次上,可能還要加上一些尚未廣泛接受的技術如XAML,XLANG, XKMS,和XFS。<br>
<br>
以下是對這些平台要素的簡要描述。需要指出的是,這些還是發展中的技術,很多時候對一個問題會有多種解決方案。<br>
<br>
SOAP (遠程調用) <br>
UDDI (貿易,目錄服務) <br>
WSDL (描述服務特徵) <br>
XLANG/XAML (為包括多種web services的複雜web事務提供支援) <br>
XKMS (XML Key Management Specification) - 支援認證和註冊,這個工作還在進展之中 <br>
<br>
SOAP<br>
<br>
SOAP是一個協議規範,定義了傳遞XML-encoded資料時的統一方式。它還定義了使用HTTP作為底層通訊協定時執行遠程調用(RPC)的方法。<br>
<br>
SOAP的興起是基於這樣一種認識,無論現在的中介軟體是如何的好,他們都需要一個WAN封裝。以XML格式發送訊息有很多好處,如能夠確保互用性。中介軟體使用者看來願意容忍解析和序列化XML文檔的代價,因為這可以讓他們的軟體使用範圍更寬。<br>
<br>
IBM, Microsoft, UserLand,和DevelopMentor在2000年向W3C提交了SOAP,並成為W3C的Note,SOAP更長遠的發展規劃現在是由W3C的XML協議工作群組來制定。這有力的表明了直到W3C工作群組交付規範為止,SOAP都將是一個穩定的規範。<br>
<br>
UDDI (Universal Description, Discovery and Integration Service)<br>
<br>
UDDI為客戶提供了動態尋找其它web <br>
<br>
services的機制。使用UDDI介面,商務處理可以動態串連到外部的商務合作者提供的服務上。一個UDDI註冊類似於CORBA的trader,也可以把它想象成商務應用程式的DNS服務。一個UDDI註冊有兩種客戶:要發布一個服務(和使用介面)的商務應用,以及想要得到特定服務的客戶。下表是UDDI提供服務的概述。UDDI層在SOAP層之上,並假定請求和應答都是以SOAP訊息傳送的UDDI對象。下面還包含了一個簡單的查詢。<br>
<br>
<br>
<br>
關於支援全方位的發現(full-featured discovery),UDDI沒有一個近期的計劃。UDDI希望能夠成為支援其它標準的更高層服務的基礎。UDDI計劃支援更複雜的商務邏輯,包括層次型商業組織。UDDI有著廣泛的支援,IBM, Ariba,和 <br>
<br>
Microsoft都全力推動它。到目前為止,它還不是一個開放的標準。<br>
<br>
<br>
<br>
UDDI 舉例<br>
<br>
<br>
查詢:下面在SOAP封裝之內的查詢,返回Microsoft的詳細資料。<br>
<br>
<br>
<br>
<find_business <br>
<br>
generic="1.0" xmlns="urn:uddi-org:api"> <br>
<br>
<br>
<br>
<br>
face=Arial,Helvetica> <br>
<br>
<name>Microsoft</name> <br>
<br>
<br>
<br>
<br>
face=Arial,Helvetica></find_business><br>
<br>
<br>
<br>
結果:businessInfo元素中包含了Microsoft註冊的服務資訊,也包括這個UDDI服務本身。<br>
<br>
<businessList generic="1.0"<br>
operator="Microsoft Corporation"<br>
truncated="false"<br>
xmlns="urn:uddi-org:api"><br>
<businessInfos><br>
<businessInfo<br>
businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"><br>
<name>Microsoft Corporation</name><br>
<description xml:lang="en"><br>
Empowering people through great software -<br>
any time, any place and on any device is Microsoft’s <br>
vision. As the worldwide leader in software for personal<br>
and business computing, we strive to produce innovative <br>
products and services that meet our customer’s<br>
</description><br>
<serviceInfos><br>
<serviceInfo<br>
businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3" <br>
serviceKey="1FFE1F71-2AF3-45FB-B788-09AF7FF151A4"><br>
<name>Web services for smart searching</name><br>
</serviceInfo><br>
<serviceInfo<br>
businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"<br>
serviceKey="8BF2F51F-8ED4-43FE-B665-38D8205D1333"><br>
<name>Electronic Business Integration Services</name><br>
</serviceInfo><br>
<serviceInfo<br>
businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"<br>
serviceKey="611C5867-384E-4FFD-B49C-28F93A7B4F9B"> <br>
<name>Volume Licensing Select Program</name> <br>
</serviceInfo><br>
<serviceInfo<br>
businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"<br>
serviceKey="A8E4999A-21A3-47FA-802E-EE50A88B266F"><br>
<name>UDDI Web Sites</name><br>
</serviceInfo> <br>
</serviceInfos><br>
</businessInfo><br>
</businessInfos><br>
</businessList><br>
<br>
WSDL :Web服務定義語言<br>
<br>
WSDL為服務提供者提供了描述構建在不同協議或編碼方式之上的web <br>
<br>
service請求基本格式的方法。WSDL用來描述一個web <br>
<br>
service能做什麼,它的位置在哪裡,如何調用它等等。在假定以SOAP/HTTP/MIME <br>
<br>
作為遠程對象調用機制的情況下,WSDL會發揮最大作用。UDDI註冊描述了web <br>
<br>
service的絕大多數方面,包括服務的綁定細節。WSDL可以看作是UDDI服務描述的子集。<br>
<br>
<br>
<br>
WSDL將服務定義為一個網路端點的集合,或者說連接埠的集合。在WSDL裡面,端點及訊息的抽象定義與它們具體的網路實現和資料格式綁定是分離的。這樣就可以重用這些抽象定義:訊息,需要交換的資料的抽象描述;連接埠類型,操作的抽象集合。針對一個特定連接埠類型的具體協議和資料格式規範構成一個可重用的綁定。一個連接埠定義成網路地址和可重用的綁定的聯結,連接埠的集合定義為服務。因此一個WSDL文檔在定義網路服務的時候使用如下的元素:<br>
類型-- <br>
<br>
使用某種的類型系統(比如XSD)定義資料類型的容器 <br>
訊息-- 通訊資料抽象的有類型的定義 <br>
操作-- <br>
<br>
服務支援的動作的抽象描述 <br>
連接埠類型-- 一個操作的抽象集合,該操作由一個或多個端點支援 <br>
綁定-- <br>
<br>
針對一個特定連接埠類型的具體的協議規範和資料格式規範 <br>
連接埠-- 一個單一的端點,定義成一個綁定和一個網路地址的聯結 <br>
<br>
<br>
服務-- 相關的端點的集合 <br>
<br>
<br>
<br>
所以,可以這樣說,WSDL給客戶提供了一個模板,方便他們描述和綁定服務。<br>
<br>
<br>
<br>
下面是一個簡單的例子,例子中的服務用來尋找Motorala股票的價格。<br>
<br>
服務描述:<br>
<br>
<?xml version="1.0"?><br>
<definitions name="StockQuote"<br>
targetNamespace="http://example.com/stockquote.wsdl"<br>
xmlns:tns="http://example.com/stockquote.wsdl"<br>
xmlns:xsd1="http://example.com/stockquote.xsd"<br>
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"<br>
xmlns="http://schemas.xmlsoap.org/wsdl/"><br>
<types><br>
<schema targetNamespace="http://example.com/stockquote.xsd"<br>
xmlns="http://www.w3.org/1999/XMLSchema"> <br>
<element name="TradePriceRequest"><br>
<complexType><br>
<all><br>
<element name="tickerSymbol" type="string"/><br>
</all> <br>
</complexType> <br>
</element><br>
<element name="TradePrice"> <br>
<complexType> <br>
<all><br>
<element name="price" type="float"/> <br>
</all> <br>
</complexType> <br>
</element> <br>
</schema><br>
</types><br>
<br>
<message name="GetLastTradePriceInput"><br>
<part name="body" element="xsd1:TradePrice"/><br>
</message><br>
<message name="GetLastTradePriceOutput"><br>
<part name="body" element="xsd1:TradePriceResult"/><br>
</message><br>
<br>
<portType name="StockQuotePortType"><br>
<operation name="GetLastTradePrice"><br>
<input message="tns:GetLastTradePriceInput"/><br>
<output message="tns:GetLastTradePriceOutput"/><br>
</operation><br>
</portType><br>
<br>
<binding name="StockQuoteSoapBinding"<br>
type="tns:StockQuotePortType"><br>
<soap:binding style="document"<br>
transport="http://schemas.xmlsoap.org/soap/http"/><br>
<operation name="GetLastTradePrice"><br>
<soap:operation<br>
soapAction="http://example.com/GetLastTradePrice"/> <br>
<input><br>
<soap:body use="literal" <br>
namespace="http://example.com/stockquote.xsd"<br>
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/><br>
</input> <br>
<output><br>
<soap:body use="literal" <br>
namespace="http://example.com/stockquote.xsd"<br>
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> <br>
</output> <br>
</operation><br>
</binding><br>
<br>
<service name="StockQuoteService"><br>
<documentation>My first service</documentation><br>
<port name="StockQuotePort" binding="tns:StockQuoteBinding"> <br>
<soap:address location="http://example.com/stockquote"/><br>
</port><br>
</service><br>
<br>
</definitions><br>
<br>
<binding name="StockQuoteServiceBinding" <br>
type="StockQuoteServiceType"> <br>
<soap:binding style="rpc"<br>
transport="http://schemas.xmlsoap.org/soap/http"/><br>
<operation name="getQuote"> <br>
<soap:operation <br>
soapAction="http://www.getquote.com/GetQuote"/><br>
<input><br>
<soap:body type="InMessageRequest"<br>
namespace="urn:live-stock-quotes" <br>
encoding="http://schemas.xmlsoap.org/soap/encoding/"/> <br>
</input><br>
<output><br>
<soap:body type="OutMessageResponse"<br>
encoding="http://schemas.xmlsoap.org/soap/encoding/"/><br>
</output><br>
</operation> <br>
</binding><br>
<service name="StockQuoteService"><br>
<documentation>My first service<br>
</documentation><br>
<port name="StockQuotePort"<br>
binding="tns:StockQuoteBinding"><br>
<soap:address location="http://example.com/stockquote"/><br>
</port><br>
</service><br>
</definitions><br>
<br>
SOAP請求:<br>
<br>
POST /StockQuote HTTP/1.1<br>
Host: www.stockquoteserver.com<br>
Content-Type: text/xml;<br>
charset="utf-8"<br>
Content-Length: nnnn<br>
SOAPAction: "Some-URI"<br>
<br>
<SOAP-ENV:Envelope<br>
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <br>
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <br>
<SOAP-ENV:Body><br>
<m:GetLastTradePrice<br>
xmlns:m="Some-URI"><br>
<symbol>MOT</symbol><br>
</m:GetLastTradePrice> <br>
</SOAP-ENV:Body><br>
</SOAP-ENV:Envelope><br>
<br>
SOAP應答:<br>
<br>
HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8"<br>
Content-Length: nnnn<br>
<br>
<SOAP-ENV:Envelope<br>
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"<br>
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> <br>
<SOAP-ENV:Body><br>
<m:GetLastTradePriceResponse<br>
xmlns:m="Some-URI"><br>
<Price>14.5</Price><br>
</m:GetLastTradePriceResponse><br>
</SOAP-ENV:Body><br>
</SOAP-ENV:Envelope><br>
<br>
XLANG<br>
<br>
<br>
資料庫中的事務的傳統概念是原子性,即要麼不做,要麼全做。在分布式的系統中維持這種原子性,一般採用一種代價昂貴的處理方式,即兩相承諾。另一個相對最佳化的模型也在研究之中(最初叫做sagas,由Hector <br>
<br>
Garcia-Molina提出),即每個動作都有一個明確的互補動作,用以取消該動作產生的結果。在現實生活中,這種互補動作的例子很多,比如說,你在信用卡裡取出$52,互補動作就是存入$52,你發出一封Email說“你將會在7天內拿到你預定的產品”,互補動作就是發Email說“哦,你還得多等幾天”。XLang就是基於這樣一個概念,用來表示任何要取消的請求的互補動作。而Web <br>
<br>
Service的分布式基礎將推動XLang規範的發展,使之能完成複雜的撤銷操作。 <br>
<br>
XAML<br>
<br>
Transaction Authority Markup Language (XAML)提供了傳統的兩相承諾事務語義。在XAML規範中有一個B2B事務的例子。XAML不完全域限於兩相承諾,某些操作也可以象XLang一樣有互補動作。兩相承諾在企業整合中顯然是很有效,而大量的web事務(如B2C事務)在更便宜的互補動作模型中可以完成。除非XAML把互補動作放在第一位,否則還是XLang存在的的理由更充分。<br>
<br>
Scenario<br>
<br>
下面的情境示範了一個商業事務,包括一批web service,並將利用XAML。考慮一家公司在網上向一家化工廠購買苯。為了讓買家能夠購買,賣方必須有第三方提供的附加增值服務,如運貨方式,付款條件,意外保險,安全運輸執照等等。必須等到所有服務都就緒且滿足他的要求,買方才會同意購買。他可以買或者不買,換句話說,必須滿足所有的相關要求,才有可能完成這次商務活動。<br>
<br>
提供頂層商業事務功能的軟體必須協調每個web service。包括(1)賣方存貨系統;(2)保險服務確保產品能被運輸;(3)財務服務確保依照賣方的形式付款;(4)運輸服務保證按時發送貨物;(5)協調服務確保與政府的安全要求一致。<br>
<br>
XKMS (XML Key Management Specification)<br>
<br>
XKMS是Microsoft和Verisign用XML應用程式整合PKI和數字認證(用於Internet事務安全性)的成果。關鍵的思想是將簽名處理放到Web上的可信伺服器(trust server)上,這樣小客戶就不必自己來做這些內容。XKMS依賴於XML數位簽章規範和正在制定中的XML加密規範。現在的XKMS規範依賴於XML,SOAP,WSDL。<br>
<br>
其它例子<br>
<br>
Web service平台是一個發展的生態系統,達爾文主義還在起作用,這裡有進化,有競爭,還有混亂。下面是一個小例子。<br>
<br>
XFS <br>
<br>
XMethods 檔案系統服務讓你能夠通過SOAP介面讀或貼檔案。這個系統讓開發人員可以建立使用集中而穩定資料的服務。理想情況下,這種檔案系統能夠用來集中被多個節點訪問的資訊。例如,可以用它支援程式補丁的自動升級。XFS提供了一個用戶端工具,在Windows Explorer中整合了XFS web service,這樣Windows Explorer整合了基於XML-SOAP的檔案系統。XFS是開放源碼的,由xmethods.com始創,它的前景還不清楚,但是,這個想法在技術上是很有吸引力的。<br>
<br>
<br>
<br>


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。