簡單對象訪問協議

輕量簡單基於XML的協議

簡單對象訪問協議是交換數據的一種協議規範,是一種輕量的、簡單的、基於XML(標準通用標記語言下的一個子集)的協議,它被設計成在WEB上交換結構化的和固化的信息。

webService三要素


SOAP、 WSDL( WebServicesDescriptionLanguage)、 UDDI( UniversalDescriptionDiscovery andIntegration)之一, soap用來描述傳遞信息的格式, WSDL 用來描述如何訪問具體的介面, uddi用來管理,分發,查詢webService 。具體實現可以搜索 Web Services簡單實例 ; SOAP 可以和現存的許多網際網路協議和格式結合使用,包括超文本傳輸協議(HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序。SOAP使用基於XML的數據結構和超文本傳輸協議(HTTP)的組合定義了一個標準的方法來使用Internet上各種不同操作環境中的分散式對象。

相關定義


• 基於類對象的傳輸協議。
• SOAP封裝(envelop),它定義了一個框架,描述消息中的內容是什麼,是誰發送的,誰應當接受並處理它以及如何處理它們;
• SOAP編碼規則(encoding rules),它定義了一種序列化機制,用於表示應用程序需要使用的數據類型的實例;
• SOAP RPC表示(RPC representation),它定了一個協定,用於表示遠程過程調用和應答;
• SOAP綁定(binding),它定義了SOAP使用哪種協議交換信息。使用HTTP/TCP/UDP協議都可以。
把SOAP綁定到HTTP提供了同時利用SOAP的樣式和分散的靈活性的特點以及HTTP的豐富的特徵庫的優點。在HTTP上傳送SOAP並不是說SOAP會覆蓋現有的HTTP語義,而是HTTP上的SOAP語義會自然的映射到HTTP語義。在使用HTTP作為協議綁定的場合中,RPC請求映射到HTTP請求上,而RPC應答映射到HTTP應答。然而,在RPC上使用SOAP並不僅限於HTTP協議綁定。

歷史


SOAP是“Simple Object Access Protocol”的縮寫。
最新版本SOAP 1.2版在2003年6月24日成為W3C的推薦版本。
SOAP由Dave Winer, Don Box,Bob Atkinson, Mohsen Al-Ghosein於1998年設計,當時只作為一種對象訪問協議。SOAP規範由 萬維網聯盟的 XML工作組維護。

四個部分


封裝

它定義了一個框架 , 該框架描述了消息中的內容是什麼,誰應當處理它以及它是可選的還是必須的。

編碼規則

它定義了一種序列化的機制,用於交換應用程序所定義的數據類型的實例。

RPC表示

它定義了用於表示遠程過程調用和應答的協定。

綁定

定義了一種使用底層傳輸協議來完成在節點間交換SOAP封裝的約定。
SOAP消息基本上是從發送端到接收端的單向傳輸,但它們常常結合起來執行類似於請求 / 應答的模式。所有的 SOAP消息都使用 XML 編碼。一條 SOAP消息就是一個包含有一個必需的 SOAP 的封裝包,一個可選的 SOAP 標頭和一個必需的 SOAP 體塊的 XML 文檔。把 SOAP 綁定到 HTTP 提供了同時利用 SOAP 的樣式和分散的靈活性的特點以及 HTTP 的豐富的特徵庫的優點。在HTTP上傳送 SOAP 並不是說 SOAP 會覆蓋現有的 HTTP 語義,而是 HTTP 上的 SOAP 語義會自然的映射到 HTTP 語義。在使用 HTTP 作為協議綁定的場合中, RPC 請求映射到 HTTP 請求上,而 RPC 應答映射到 HTTP 應答。然而,在 RPC 上使用 SOAP 並不僅限於 HTTP 協議綁定。SOAP也可以綁定到TCP和UDP協議上。

協議結構


SOAP消息格式:
主要在web服務中運用。

語法規則


構建模塊

一條 SOAP 消息就是一個普通的 XML 文檔,包含下列元素:
• 必需的 Envelope 元素,可把此 XML 文檔標識為一條 SOAP 消息
• 可選的 Header 元素,包含頭部信息
• 必需的 Body 元素,包含所有的調用和響應信息
• 可選的 Fault 元素,提供有關在處理此消息所發生錯誤的信息

語法規則

這裡是一些重要的語法規則:
• SOAP 消息必須用 XML 來編碼
• SOAP 消息必須使用 SOAP Envelope 命名空間
• SOAP 消息必須使用 SOAP Encoding 命名空間
• SOAP 消息不能包含 DTD 引用
• SOAP 消息不能包含 XML 處理指令

消息基本結構

核心技術


SOAP採用了已經廣泛使用的兩個協議:HTTP 和XML(標準通用標記語言下的一個子集)。HTTP用於實現 SOAP 的RPC 風格的傳輸, 而XML 是它的編碼模式。採用幾行代碼和一個XML 解析器, HTTP 伺服器( MS 的 IIS 或 Apache) 立刻成為SOAP 的 ORBS。SOAP 通訊協議使用 HTTP 來發送XML 格式的信息。HTTP與RPC 的協議很相似,它簡單、配置廣泛,並且對防火牆比其它協議更容易發揮作用。HTTP 請求一般由 Web 伺服器軟體(如 IIS 和Apache)來處理, 但越來越多的應用伺服器產品正在支持HTTP。XML 作為一個更好的網路數據表達方式( NDR)。SOAP 把 XML 的使用代碼化為請求和響應參數編碼模式, 並用HTTP 作傳輸。具體地講, 一個SOAP 方法可以簡單地看作遵循SOAP編碼規則的HTTP請求和響應, 一個 SOAP終端則可以看作一個基於HTTP 的URL, 它用來識別方法調用的目標。像CORBA/ IIOP一樣, SOAP不需要具體的對象綁定到一個給定的終端, 而是由具體實現程序來決定怎樣把對象終端標識符映像到伺服器端的對象。

優點


可擴展的。SOAP 無需中斷已有的應用程序, SOAP 客戶端、伺服器和協議自身都能發展。而且SOAP 能極好地支持中間介質和層次化的體系結構。
簡單的。客戶端發送一個請求,調用相應的對象, 然後伺服器返回結果。這些消息是XML 格式的,並且封裝成符合HTTP 協議的消息。因此,它符合任何路由器、防火牆或代理伺服器的要求。
完全和廠商無關。SOAP可以相對於平台、操作系統、目標模型和編程語言獨立實現。另外,傳輸和語言綁定以及數據編碼的參數選擇都是由具體的實現決定的。
與編程語言無關。SOAP 可以使用任何語言來完成,只要客戶端發送正確SOAP 請求( 也就是說, 傳遞一個合適的參數給一個實際的遠端伺服器)。SOAP 沒有對象模型,應用程序可以捆綁在任何對象模型中。
與平台無關。SOAP 可以在任何操作系統中無需改動正常運行。