SOAP基础知识
一、SOAP是什么?
SOAP是一種輕量級(jí)協(xié)議,旨在在分散的分布式環(huán)境中交換結(jié)構(gòu)化信息。 SOAP使用XML技術(shù)來定義可擴(kuò)展的消息傳遞框架,該框架提供了可以在各種基礎(chǔ)協(xié)議之間交換的消息構(gòu)造。
通信協(xié)議
用于應(yīng)用程序之間的通信
發(fā)送消息的格式
設(shè)計(jì)用于通過Internet通信
平臺(tái)無關(guān)
語言無關(guān)
基于XML
簡單且可擴(kuò)展
允許繞過防火墻
一個(gè)W3C標(biāo)準(zhǔn)
簡單的SOAP消息
?
復(fù)雜的SOAP消息
?
二、SOAP的作用
SOAP提供了一種使用不同的技術(shù)和編程語言在運(yùn)行于不同操作系統(tǒng)上的應(yīng)用程序之間進(jìn)行通信的方法
SOAP提供了一個(gè)基于XML的消息傳遞框架
可擴(kuò)展的
簡潔仍然是SOAP的主要設(shè)計(jì)目標(biāo)之一。
簡單總是勝過效率或技術(shù)純度。
SOAP定義了一個(gè)通信框架,該框架允許將功能添加為分層擴(kuò)展。
可在各種基礎(chǔ)網(wǎng)絡(luò)協(xié)議上使用
可以在任何傳輸協(xié)議上使用 TCP、HTTP、SMTP
SOAP規(guī)范提供了一個(gè)靈活的框架,用于定義任意協(xié)議綁定
由于HTTP已被廣泛使用,因此它今天為HTTP提供了顯式綁定。
獨(dú)立于編程模型,
允許任何編程模型,與遠(yuǎn)程過程調(diào)用無關(guān)
SOAP定義了用于處理單個(gè)單向消息的模型。 SOAP允許任何數(shù)量的消息交換模式(MEP)。
由于RPC的流行,SOAP概述了將RPC與SOAP一起使用的約定。
?
三、SOAP消息例子
請(qǐng)求消息
<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>回應(yīng)消息
<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“信封”中,并帶有標(biāo)題和正文。
SOAP頭是可選的,包含有關(guān)SOAP消息的特定于應(yīng)用程序的信息(例如身份驗(yàn)證,付款等)
SOAP體是必需的,包含用于消息最終端點(diǎn)的實(shí)際SOAP消息。
?
五、SOAP頭
一種擴(kuò)展機(jī)制,提供了一種在SOAP消息中傳遞信息的方式,該信息不是應(yīng)用程序有效負(fù)載。
這允許以特定于應(yīng)用程序的方式擴(kuò)展SOAP消息。
標(biāo)頭塊可以分別針對(duì)在從發(fā)送者到最終接收者的消息路徑中可能遇到的SOAP節(jié)點(diǎn)。
?
六、SOAP節(jié)點(diǎn)
SOAP假定消息具有一個(gè)發(fā)起者,一個(gè)或多個(gè)最終接收者以及零個(gè)或多個(gè)中介。SOAP消息的始發(fā)者,中介和接收者都稱為SOAP節(jié)點(diǎn)。原因是支持分布式消息處理。實(shí)現(xiàn)此消息路由不在SOAP的范圍之內(nèi)。
?
頭部有三個(gè)可選屬性:
actor:確定是節(jié)點(diǎn)應(yīng)處理特定的標(biāo)頭
mustUnderstand:如果設(shè)置為” true”,則節(jié)點(diǎn)必須知道如何處理頭。
relay:指示是否應(yīng)轉(zhuǎn)發(fā)未處理的標(biāo)頭塊。
?
七、協(xié)議綁定
SOAP消息傳遞框架獨(dú)立于基礎(chǔ)協(xié)議
具體的協(xié)議綁定準(zhǔn)確定義了如何使用給定協(xié)議傳輸SOAP消息
定義了標(biāo)準(zhǔn)協(xié)議綁定,確保SOAP應(yīng)用程序和基礎(chǔ)結(jié)構(gòu)之間的高度互操作性
SOAP1,1規(guī)范僅將HTTP的標(biāo)準(zhǔn)協(xié)議綁定編碼
HTTP綁定:HTTP協(xié)議綁定定義了通過HTTP使用SOAP的規(guī)則。
SOAP:請(qǐng)求/響應(yīng)自然地映射到HTTP請(qǐng)求/響應(yīng)模型。
?
八、協(xié)議綁定——請(qǐng)求示例
<!--【HTTP頭】-->POST /Temperature HTTP/1.1Host: www.weather.comContent-Type: text/xmlContent-Length: n<!-- 【XML負(fù)載均衡】--><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標(biāo)記:綁定有兩個(gè)屬性
style:“RPC”或者“document”
transport:定義要使用的SOAP協(xié)議
對(duì)于每個(gè)操作,需要定義相應(yīng)的SOAP操作。 此外,需要指定輸入和輸出消息的編碼方式。
?
十、SOAP消息風(fēng)格
SOAP消息的兩種基本風(fēng)格
Document風(fēng)格:表示 正文僅包含XML文檔,發(fā)送者和接收者必須同意其格式。
RPC風(fēng)格:表示 主體包含方法調(diào)用的XML表示形式
?
十一、Document風(fēng)格的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>十二、遠(yuǎn)程調(diào)用消息:典型的兩種消息
十三、RPC風(fēng)格的SOAP消息
<!--請(qǐng)求--><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><!--響應(yīng)--><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消息風(fēng)格
有兩種技術(shù)可以決定如何將數(shù)據(jù)序列化到主體中:(在WSDL的<soap:body>元素的use屬性中指示)
Literal:架構(gòu)定義從字面上定義了主體的XML格式,沒有歧義。
Encoded:SOAP處理器必須在運(yùn)行時(shí)遍歷各種SOAP編碼規(guī)則,以確定主體的正確序列化。
?
十五、總結(jié)
SOAP定義了一個(gè)簡單且可擴(kuò)展的XML消息傳遞框架,該框架可在具有多種不同編程模型的多種協(xié)議上使用。
基于XML和現(xiàn)有Internet協(xié)議的輕量級(jí)替代物,用于復(fù)雜的分布式對(duì)象技術(shù)。
該規(guī)范整理了如何在HTTP和RPC調(diào)用中使用SOAP。
?
總結(jié)
- 上一篇: 技术交流:老刘说NLP技术公众号开通
- 下一篇: 翻译:A DSL in 5 Langua