SOAP基础知识
一、SOAP是什么?
SOAP是一種輕量級協議,旨在在分散的分布式環境中交換結構化信息。 SOAP使用XML技術來定義可擴展的消息傳遞框架,該框架提供了可以在各種基礎協議之間交換的消息構造。
通信協議
用于應用程序之間的通信
發送消息的格式
設計用于通過Internet通信
平臺無關
語言無關
基于XML
簡單且可擴展
允許繞過防火墻
一個W3C標準
簡單的SOAP消息
?
復雜的SOAP消息
?
二、SOAP的作用
SOAP提供了一種使用不同的技術和編程語言在運行于不同操作系統上的應用程序之間進行通信的方法
SOAP提供了一個基于XML的消息傳遞框架
可擴展的
簡潔仍然是SOAP的主要設計目標之一。
簡單總是勝過效率或技術純度。
SOAP定義了一個通信框架,該框架允許將功能添加為分層擴展。
可在各種基礎網絡協議上使用
可以在任何傳輸協議上使用 TCP、HTTP、SMTP
SOAP規范提供了一個靈活的框架,用于定義任意協議綁定
由于HTTP已被廣泛使用,因此它今天為HTTP提供了顯式綁定。
獨立于編程模型,
允許任何編程模型,與遠程過程調用無關
SOAP定義了用于處理單個單向消息的模型。 SOAP允許任何數量的消息交換模式(MEP)。
由于RPC的流行,SOAP概述了將RPC與SOAP一起使用的約定。
?
三、SOAP消息例子
請求消息
<soap:Envelope><soap:Body><m:GetBookPrice xmlns:m="http://www.amzn.org/books" />? ?<m:BookName>Fast Food Nation</m:BookName>??</m:GetBookPrice></soap:Body></soap:Envelope>回應消息
<soap:Envelope><soap:Body><m:GetBookPriceResponse xmlns:m="http://www.amzn.org/books" /><m:Price>34.5</m:Price></m:GetBookPriceResponse></soap:Body></soap:Envelope>四、SOAP信封
SOAP消息包含在XML“信封”中,并帶有標題和正文。
SOAP頭是可選的,包含有關SOAP消息的特定于應用程序的信息(例如身份驗證,付款等)
SOAP體是必需的,包含用于消息最終端點的實際SOAP消息。
?
五、SOAP頭
一種擴展機制,提供了一種在SOAP消息中傳遞信息的方式,該信息不是應用程序有效負載。
這允許以特定于應用程序的方式擴展SOAP消息。
標頭塊可以分別針對在從發送者到最終接收者的消息路徑中可能遇到的SOAP節點。
?
六、SOAP節點
SOAP假定消息具有一個發起者,一個或多個最終接收者以及零個或多個中介。SOAP消息的始發者,中介和接收者都稱為SOAP節點。原因是支持分布式消息處理。實現此消息路由不在SOAP的范圍之內。
?
頭部有三個可選屬性:
actor:確定是節點應處理特定的標頭
mustUnderstand:如果設置為” true”,則節點必須知道如何處理頭。
relay:指示是否應轉發未處理的標頭塊。
?
七、協議綁定
SOAP消息傳遞框架獨立于基礎協議
具體的協議綁定準確定義了如何使用給定協議傳輸SOAP消息
定義了標準協議綁定,確保SOAP應用程序和基礎結構之間的高度互操作性
SOAP1,1規范僅將HTTP的標準協議綁定編碼
HTTP綁定:HTTP協議綁定定義了通過HTTP使用SOAP的規則。
SOAP:請求/響應自然地映射到HTTP請求/響應模型。
?
八、協議綁定——請求示例
<!--【HTTP頭】-->POST /Temperature HTTP/1.1Host: www.weather.comContent-Type: text/xmlContent-Length: n<!-- 【XML負載均衡】--><s:Envelope xmlns:s=“http://www.w3.org/2001/06/soap-envelope"><s:Body>… …</s:Body></s:Envelope><wsdl:binding name="InventoryServiceSoapBinding" type="InventoryService"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="inquiryInventory"><soap:operation soapAction="http://abc.com/get"/><wsdl:input name="inquiryInventoryRequest"><soap:body use="literal"/></wsdl:input><wsdl:output name="inquiryInventoryResponse"><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding>
九、WSDL與SOAP的綁定
soap標記:綁定有兩個屬性
style:“RPC”或者“document”
transport:定義要使用的SOAP協議
對于每個操作,需要定義相應的SOAP操作。 此外,需要指定輸入和輸出消息的編碼方式。
?
十、SOAP消息風格
SOAP消息的兩種基本風格
Document風格:表示 正文僅包含XML文檔,發送者和接收者必須同意其格式。
RPC風格:表示 主體包含方法調用的XML表示形式
?
十一、Document風格的SOAP消息
<Envelope xmlns:s=“http://www.w3.org/2001/06/soap-envelope”><Body><purchaseOrder xmlns:n=“urn:OrderService”><from><person>Christopher Robin</person><dept>Accounting</dept></from><to><person>Pooh Bear</person><dept>Honey></dept></to><order><quantity>1</quantity><item>Pooh Stick</item></order></purchaseOrder></Body></Envelope>十二、遠程調用消息:典型的兩種消息
十三、RPC風格的SOAP消息
<!--請求--><Envelope xmlns:s=“http://www.w3.org/2001/06/soap-envelope”><Body><getQuote xmlns:n=“urn:QuoteService”><symbol xsi:type=“xsd:string”>IBM</symbol></getQuote></Body></Envelope><!--響應--><Envelope xmlns:s=http://www.w3.org/2001/06/soap-envelope><Body><getQuoteResponse xmnls:n=“urn:QuoteService”><value xsi:type=“xsd:float”>98.06</value></getQuoteResponse></Body></Envelope>十四、SOAP消息風格
有兩種技術可以決定如何將數據序列化到主體中:(在WSDL的<soap:body>元素的use屬性中指示)
Literal:架構定義從字面上定義了主體的XML格式,沒有歧義。
Encoded:SOAP處理器必須在運行時遍歷各種SOAP編碼規則,以確定主體的正確序列化。
?
十五、總結
SOAP定義了一個簡單且可擴展的XML消息傳遞框架,該框架可在具有多種不同編程模型的多種協議上使用。
基于XML和現有Internet協議的輕量級替代物,用于復雜的分布式對象技術。
該規范整理了如何在HTTP和RPC調用中使用SOAP。
?
總結
- 上一篇: 技术交流:老刘说NLP技术公众号开通
- 下一篇: 翻译:A DSL in 5 Langua