XML模式:SOAP
2024-09-05 20:55:24
供稿:網(wǎng)友
簡單對象訪問協(xié)議(Simple Object Access Protocol,SOAP)實際上是一種 Web 服務(wù)技術(shù),但 Web 服務(wù)中客戶機和服務(wù)器之間的數(shù)據(jù)交換格式是通過靈活的 XML 模式實現(xiàn)的。
Web 服務(wù)的主要優(yōu)點是客戶機和服務(wù)器通過網(wǎng)絡(luò)進(jìn)行信息和數(shù)據(jù)交換的互操作性的層次。SOAP 標(biāo)準(zhǔn)使用 XML 以一種體系結(jié)構(gòu)中立的格式來構(gòu)造數(shù)據(jù),定義數(shù)據(jù)類型和信息。
對于編程語言來說,只需要提供數(shù)據(jù)類型和需要在遠(yuǎn)程服務(wù)器上調(diào)用的函數(shù)名稱即可。SOAP 庫將用主機語言編寫的信息和格式轉(zhuǎn)化成 XML 格式的消息,其中包括調(diào)用的函數(shù)和提供的參數(shù)。
通過 W3C 的例子就可以了解 SOAP 的結(jié)構(gòu)。調(diào)用遠(yuǎn)程 SOAP 函數(shù) GetEndorsingBoarder()
的時候,客戶機上的調(diào)用程序生成清單 1 所示的 XML 消息。清單 1. 調(diào)用遠(yuǎn)程 SOAP 函數(shù) GetEndorsingBoarder()
<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:GetEndorsingBoarder xmlns:m="http://namespaces.snowboard-info.com"> <manufacturer>K2</manufacturer> <model>Fatbob</model> </m:GetEndorsingBoarder> </SOAP-ENV:Body></SOAP-ENV:Envelope>
SOAP 客戶機發(fā)送的整個消息都放在 SOAP 信封中。信封的內(nèi)容就是消息的詳細(xì)內(nèi)容。
被調(diào)用的函數(shù)顯然是 GetEndorsingBoarder
,它包括兩個參數(shù):manufacturer 和 model。由此可見,它把本地的可能采用二進(jìn)制編碼的字符串轉(zhuǎn)化成了 XML 字符串。由于 XML 是平臺獨立的,主機使用 SOAP 系統(tǒng)不需要復(fù)雜的二進(jìn)制編碼和解碼就可以交換消息。
服務(wù)器通過另一個 XML 編碼的 SOAP 信封返回響應(yīng),這一次是函數(shù)的返回值。SOAP 請求的響應(yīng)格式與函數(shù)相同,只不過在信封內(nèi)容的后面加上了 Response
,如清單 2 所示。
清單 2. SOAP 請求的響應(yīng)
<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:GetEndorsingBoarderResponse xmlns:m="http://namespaces.snowboard-info.com"> <endorsingBoarder>Chris Englesmann</endorsingBoarder> </m:GetEndorsingBoarderResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>
通常不需要自己編寫 SOAP 消息,SOAP 庫會自動生成。不過 SOAP 信封的結(jié)構(gòu)和簡單性表明使用 SOAP 標(biāo)準(zhǔn)共享信息很簡單。
SOAP 大大簡化了交換消息和調(diào)用遠(yuǎn)程函數(shù)的工作。遠(yuǎn)程過程調(diào)用(Remote Procedure Call,RPC)標(biāo)準(zhǔn)需要復(fù)雜的方法來處理二進(jìn)制數(shù)據(jù)的序列化,發(fā)送結(jié)構(gòu)化更高的信息需要詳細(xì)的聲明和雙向的信息轉(zhuǎn)換。
使用 SOAP,XML 序列化大大降低了這種復(fù)雜性,使得跨平臺、跨語言集成和數(shù)據(jù)交換更加簡單。