SOAP簡介

SOAP簡介


SOAP-簡單對象訪問協議(Simple Object Access Protocol)。SOAP是一種輕量的、簡單的、基於 XML 的協議,它被設計成在 WEB 上交換結構化的和固化的信息。 SOAP 可以和現存的許多因特網協議和格式結合使用,包括超文本傳輸協議(HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序。
SOAP爲在一個鬆散的、分佈的環境中使用XML對等地交換結構化的和類型化的信息提供了一個簡單的輕量級機制。SOAP本身並不定義任何應用語義,如編程模型或特定語義實現,它只是定義了一種簡單的機制,通過一個模塊化的包裝模型和對模塊中特定格式編碼的數據重編碼機制來表示應用語義。SOAP的這項能力使得它可被很多類型的系統用於從消息系統到RPC(Remote Procedure Call)的延伸。
目前W3C已經發布SOAP1.2版本標準,但是在目前廣泛應用的還是SOAP1.1版本,詳細規
SOAP V1.1:
http://www.w3.org/TR/2000/NOTE-SOAP-20000508/
SOAP V1.2:http://www.w3.org/TR/2001/WD-soap12-20010709/
 

  SOAP規範主要由四個部分組成
l         SOAP信封(envelop),它定義了一個SOAP消息表示框架,該框架描述了消息中的內容是什麼,誰發送的,誰應當處理並處理它,以及這些操作是可選的還是必須的等。
l         SOAP編碼規則(encoding rules),定義了一個數據的編碼機制,通過這樣一個編碼機制來定義應用程序中需要使用的數據類型,並可用於交換由這些應用程序定義的數據類型所衍生的實例。例如可能應訂單服務的需要,使用SOAP編碼規則定義了訂單的數據類型,並可以在訂單生成的客戶端與訂單服務之間交換訂單實例。
l         SOAP RPC 表示(RPC representation),定義了一個用於表示遠端過程調用和響應的約定,例如如何使用HTTP或SMTP協議與SOAP綁定,如何傳輸過程調用,在具體傳輸協議的哪個部分傳輸過程響應,如我們可以在HTTP的響應的時候傳遞過程響應。
l         SOAP綁定(binding),定義了一個使用底層傳輸協議來完成在結點間交換SOAP信封的約定。
爲了簡化本規範,這四部分在功能上是正交的。特別的,信封和編碼規則是被定義在不同的命名空間(namespace)中,這樣有利於通過模塊化獲得簡明性。
規範中還定義了兩種SOAP綁定(binding),用於描述SOAP消息(message)如何通過帶或不帶HTTP擴展框架[6](HTTP Extension Framework)的HTTP[5]消息(message)進行傳輸。
SOAP 消息基本上是從發送端到接收端的單向傳輸,但它們常常結合起來執行類似於請求/應答的模式。所有的SOAP消息都使用XML編碼。一條SOAP消息就是一個包含有一個必需的SOAP的封裝包,一個可選的SOAP標頭和一個必需的SOAP體塊的XML文檔。
  SOAP消息組成部分如下圖所示:

 

圖1.1 SOAP消息組成部分
SOAP 請求的 XML 部分包含三個主要部分:
l         Envelope 定義各個 SOAP 消息的餘下部分會使用的 namespaces ,典型的有 xmlns:SOAP-ENV ( SOAP Envelope namespace )、 xmlns:xsi ( XML Schema for Instances ) 和 xmlns:xsd ( XML Schema for DataTypes )。
l         Header 是可選的元素,它攜帶認證、事務處理和支付的輔助信息。一個 SOAP 處理鏈中的任一元素可增加或刪除 Header 裏的項;元素也可選擇忽略它們不認識的項。如果 Header 被使用,它必須是 Envelope 的第一個子元素。
l         Body 是消息的主要有效載體。當 SOAP 被用於執行一個 RPC 調用時, Body 包含一個單獨元素,這個元素包含方法名、參數和 Web 服務的目標地址。元素的 namespace 等於目標地址,根名是方法名。

 
在HTTP中使用SOAPHTTP-超文本傳輸協議(Hypertext Transfer Protocol)用來時機傳輸WWW(World Wide Web)上的所有通信。HTTP是一個客戶機-服務器模型:客戶機向服務器提交一個請求,然後服務器由發送回一個應答。就現在而言,由於HTTP比較簡單、穩定以及被廣泛應用,而且大部分防火牆對HTTP協議的80端口是開放的,所以HTTP是服務運輸層的最流行的協議。
把SOAP綁定到HTTP提供了同時利用SOAP的樣式和分散的靈活性的特點以及HTTP的豐富的特徵庫的優點。在HTTP上傳送SOAP並不是說SOAP會覆蓋現有的HTTP 語義,而是HTTP上的SOAP語義會自然的映射到HTTP語義。在使用HTTP作爲協議綁定的場合中, RPC請求映射到HTTP請求上,而RPC應答映射到HTTP應答。然而在 RPC 上使用SOAP並不僅限於HTTP協議綁定。
HTTP 請求和響應消息的 Content-Type 標頭都必須設爲 text/xml (在 SOAP 1.2 中是 application/soap+xml)。 對於請求消息,它必須使用 POST 作爲動詞,而 URI 應該識別 SOAP 處理器。 SOAP 規範還定義了一個名爲 SOAPAction 的新 HTTP 標頭,所有 SOAP HTTP 請求(即使是空的)都必須包含該標頭。 SOAPAction 標頭旨在表明該消息的意圖。 對於 HTTP 響應,如果沒有發生任何錯誤,它應該使用 200 狀態碼,如果包含 SOAP 錯誤,則應使用 500。
 

下面爲SOAP綁定HTTP的一個示例,在本例中,一個GetLastTradePrice SOAP請求被髮送給一個StackQuote服務,該請求接受一個字符串參數即蜂鳴器符號symbol,並在SOAP應答中返回一個浮點數即價格Price。SOAP Envelop元素是表示SOAP消息的XML文檔的頂級元素。XML名稱空間用來消除應用相關標識符與SOAP標識符的歧義。
示例1 嵌套在HTTP請求中的SOAP消息
POST /StockQuote HTTP/1.1
Host:
www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
       <m:GetLastTradePrice xmlns:m="Some-URI">
           <symbol>DIS</symbol>
       </m:GetLastTradePrice>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
 

示例2 嵌套在HTTP應答中的SOAP消息
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>
   <SOAP-ENV:Body>
       <m:GetLastTradePriceResponse xmlns:m="Some-URI">
           <Price>34.5</Price>
       </m:GetLastTradePriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Web Service

從表面上看,Web service 就是一個應用程序,它向外界暴露出一個能夠通過Web進行調用的API。這就是說,你能夠用編程的方法通過Web來調用這個應用程序。我們把調用這個Web service 的應用程序叫做客戶。
從深層次上看,Web Service是一種新的Web應用程序分支,它們是自包含、自描述、模塊化的應用,可以在網絡(通常爲Web)中被描述、發佈、查找以及通過Web來調用。
  Web Service是基於網絡的、分佈式的模塊化組件,它執行特定的任務,遵守具體的技術規範,這些規範使得Web Service能與其他兼容的組件進行互操作。它可以使用標準的互聯網協議,像超文本傳輸協議HTTP和XML,將功能體現在互聯網和企業內部網上。Web Service平臺是一套標準,它定義了應用程序如何在Web上實現互操作性。你可以用你喜歡的任何語言,在你喜歡的任何平臺上寫Web Service。
Web service 更精確的解釋: Web services是建立可互操作的分佈式應用程序的新平臺。Web service平臺是一套標準,它定義了應用程序如何在Web上實現互操作性。你可以用任何你喜歡的語言,在任何你喜歡的平臺上寫Web service ,只要我們可以通過Web service標準對這些服務進行查詢和訪問。
Web Service 三個基本技術
l         Web Service通過標準通信協議,在互聯網上發佈有用的程序模塊(以服務的方式),目前大部分是用SOAP來作通信協議。
l         Web Service提供一份詳細的接口說明書,來幫助用戶構建應用程序,這個接口說明書叫作WSDL(Web Service Description Language)。
l         通常已發佈的Web Service要註冊到管理服務器,這樣便於使用者查詢和使用。這個是通過UDDI(Universal Discovery Description and Integration)來完成的。
 

SOAP是一種基於XML的不依賴傳輸協議的表示層協議(參見ISO 7層參考模型,TCP/IP大致相當於傳輸層和網絡層,HTTP相當於會話層),用來在應用程序之間方便地以對象的形式交換數據。
在SOAP的下層,可以是HTTP/HTTPS(現在用得最多),也可以是SMTP/POP3、還可以是爲一些應用而專門設計的特殊通信協議。
SOAP應用系統可以兩種模式工作,一種被稱爲RPC(Remote Procedure Call),另一種叫法不統一,在Microsoft的文檔中稱作document oriented,而在Apache的文檔中,被稱爲message-oriented,這是一種可以利用XML交換更爲複雜的結構數據的應用,而且,潛在地可用於B2B中長事務處理等領域。在本文中,我們將集中討論RPC,關於後者,我希望我能夠在今後的文章中爲大家介紹。關於RPC的計算架構見圖1.2。

 


圖1.2 RPC計算架構模型
從圖1.2中,我們可以看到,SOAP RPC的工作原理非常類似於WEB的請求/應答方式,無非用的是符合SOAP規範的XML代替HTML,HTTP是個無狀態協議,但是今天通過Session來管理狀態已經是一個衆所共知的技術了,無狀態協議非常適合鬆偶合系統,而且對於負載平衡等問題都有潛在的優勢和貢獻。
(1)              客戶程序創建了一個XML文檔,它包含了提供服務的URI、客戶端請求調用的方法名和參數信息。如果參數時對象,則必須進行序列化操作。
(2)              目標服務器接收到客戶程序發送的XML文檔,對齊進行解析,如果參數時對象,先對其進行反序列化操作,然後執行客戶端請求的方法。
(3)              目標服務器執行方法完畢後,如果方法的返回值時對象,則進行序列化操作,然後把返回值以XML文檔的形式返回給客戶。
(4)              客戶程序收到服務器發來的XML文檔,如果返回值時對象,則先進行反序列化操作,最後獲取返回值。
 

XML Parser指的是XML解析器,DOM(Document Object Model)接口指的是文檔對象模型接口。

發佈了28 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章