SOAP協議初解
對于網絡協議,它的種類非常多,這里我們來講解一下SOAP協議的使用。我們規定SOAP協議為一種標準化的通訊規范。那么這個SOAP協議的意思則是:簡單對象訪問協議(SOAP,全寫為Simple Object Access Protocol),它主要用于Web服務(web service)中。SOAP的出現是為了簡化網頁服務器(Web Server)在從XML數據庫中提取資料時,無需花時間去格式化頁面,并能夠讓不同應用程式之間透過HTTP通訊協定,以XML格式互相交換彼此的資料,使其與程式語言、平臺和硬體無關。此標準由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,并得到IBM,蓮花(Lotus),康柏(Compaq)等公司的支持,于2000年提交給全球資訊網聯盟(World Wide Web Consortium;W3C),目前SOAP1.1 版是業界共同的標準,屬于第二代的XML協定(***代具主要代表性的技術為XML-RPC以及WDDX)。
用一個簡單的例子來說明SOAP使用過程,一個SOAP消息可以發送到一個具有 Web Service 功能的 Web 站點,例如,一個含有房價信息的數據庫,消息的參數中標明這是一個查詢消息,此站點將返回一個 XML 格式的信息,其中包含了查詢結果(價格,位置,特點,或者其他信息)。由于數據是用一種標準化的可分析的結構來傳遞的,所以可以直接被第三方站點所利用。
相關定義
SOAP封裝(envelop),它定義了一個框架,描述消息中的內容是什么,是誰發送的,誰應當接受并處理它以及如何處理它們;
SOAP編碼規則(encoding rules),它定義了一種序列化的機制,用于表示應用程序需要使用的數據類型的實例;
SOAPRPC表示(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”,但是這種縮寫已經在標準的1.2版后被廢止了。1.2版在2003年6月24日成為W3C的推薦版本。這種縮寫容易與SOA——Service-oriented architecture產生歧義,雖然它們之間存在非常大的差異。
SOAP是在1998年由Dave Winer, Don Box,Bob Atkinson 和 Mohsen Al-Ghosein 設計的。當時是將其作為一種對象訪問協議。現在,SOAP規范是由萬維網聯盟的XML工作組進行維護的。
傳輸方式
SOAP使用因特網應用層協議作為其傳輸協議。SMTP以及HTTP協議都可以用來傳輸SOAP消息,但是由于HTTP在如今的因特網結構中工作得很好,特別是在網絡防火墻下仍然工作流暢,所以其更為廣泛地被采納。SOAP亦可以在HTTPS上進行傳輸。
SOAP的消息格式采用XML。
SOAP協議的消息實例
請求
- <soapenv:Envelope
- xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
- <req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/">
- <req:category>classifieds</req:category>
- </req:echo>
- </soapenv:Body>
- </soapenv:Envelope>
回應
- <soapenv:Envelope
- xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
- <soapenv:Header>
- <wsa:ReplyTo>
- <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
- </wsa:ReplyTo>
- <wsa:From>
- <wsa:Address>http://localhost:8080/axis2/services/MyService</wsa:Address>
- </wsa:From>
- <wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
- </soapenv:Header>
- <soapenv:Body>
- <req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/">
- <req:category>classifieds</req:category>
- </req:echo>
- </soapenv:Body>
- </soapenv:Envelope>