SOAP:簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議
(SOAP:Simple Object Access Protocol)
簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SOAP)是一種輕量的、簡(jiǎn)單的、基于 XML 的協(xié)議,它被設(shè)計(jì)成在 WEB 上交換結(jié)構(gòu)化的和固化的信息。 SOAP 可以和現(xiàn)存的許多因特網(wǎng)協(xié)議和格式結(jié)合使用,包括超文本傳輸協(xié)議( HTTP),簡(jiǎn)單郵件傳輸協(xié)議(SMTP),多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME)。它還支持從消息系統(tǒng)到遠(yuǎn)程過(guò)程調(diào)用(RPC)等大量的應(yīng)用程序。
SOAP 包括三個(gè)部分:
SOAP 封裝:它定義了一個(gè)框架 , 該框架描述了消息中的內(nèi)容是什么,誰(shuí)應(yīng)當(dāng)處理它以及它是可選的還是必須的。
SOAP 編碼規(guī)則:它定義了一種序列化的機(jī)制,用于交換應(yīng)用程序所定義的數(shù)據(jù)類(lèi)型的實(shí)例。
SOAP RPC 表示:它定義了用于表示遠(yuǎn)程過(guò)程調(diào)用和應(yīng)答的協(xié)定。
SOAP 消息基本上是從發(fā)送端到接收端的單向傳輸,但它們常常結(jié)合起來(lái)執(zhí)行類(lèi)似于請(qǐng)求 / 應(yīng)答的模式。所有的 SOAP 消息都使用 XML 編碼。一條 SOAP 消息就是一個(gè)包含有一個(gè)必需的 SOAP 的封裝包,一個(gè)可選的 SOAP 標(biāo)頭和一個(gè)必需的 SOAP 體塊的 XML 文檔。
把 SOAP 綁定到 HTTP 提供了同時(shí)利用 SOAP 的樣式和分散的靈活性的特點(diǎn)以及 HTTP 的豐富的特征庫(kù)的優(yōu)點(diǎn)。在 HTTP 上傳送 SOAP 并不是說(shuō) SOAP 會(huì)覆蓋現(xiàn)有的 HTTP 語(yǔ)義,而是 HTTP 上的 SOAP 語(yǔ)義會(huì)自然的映射到 HTTP 語(yǔ)義。在使用 HTTP 作為協(xié)議綁定的場(chǎng)合中, RPC 請(qǐng)求映射到 HTTP 請(qǐng)求上,而 RPC 應(yīng)答映射到 HTTP 應(yīng)答。然而,在 RPC 上使用 SOAP 并不僅限于 HTTP 協(xié)議綁定。
協(xié)議結(jié)構(gòu)
SOAP 消息格式:
SOAP 標(biāo)頭
<SOAP-ENV: Envelope
Attributes>
<SOAP-ENV:Body
Attributes
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
示例 1 : 內(nèi)嵌在 HTTP 請(qǐng)求中的 SOAP 消息
POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"
<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:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
下面是一個(gè)包含將 SOAP 消息作為負(fù)載的 HTTP 應(yīng)答消息。
示例 2 : 內(nèi)嵌在 HTTP 應(yīng)答中的 SOAP 消息
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
<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:GetLastTradePriceResponse xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
(SOAP:Simple Object Access Protocol)
簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SOAP)是一種輕量的、簡(jiǎn)單的、基于 XML 的協(xié)議,它被設(shè)計(jì)成在 WEB 上交換結(jié)構(gòu)化的和固化的信息。 SOAP 可以和現(xiàn)存的許多因特網(wǎng)協(xié)議和格式結(jié)合使用,包括超文本傳輸協(xié)議( HTTP),簡(jiǎn)單郵件傳輸協(xié)議(SMTP),多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME)。它還支持從消息系統(tǒng)到遠(yuǎn)程過(guò)程調(diào)用(RPC)等大量的應(yīng)用程序。
SOAP 包括三個(gè)部分:
SOAP 封裝:它定義了一個(gè)框架 , 該框架描述了消息中的內(nèi)容是什么,誰(shuí)應(yīng)當(dāng)處理它以及它是可選的還是必須的。
SOAP 編碼規(guī)則:它定義了一種序列化的機(jī)制,用于交換應(yīng)用程序所定義的數(shù)據(jù)類(lèi)型的實(shí)例。
SOAP RPC 表示:它定義了用于表示遠(yuǎn)程過(guò)程調(diào)用和應(yīng)答的協(xié)定。
SOAP 消息基本上是從發(fā)送端到接收端的單向傳輸,但它們常常結(jié)合起來(lái)執(zhí)行類(lèi)似于請(qǐng)求 / 應(yīng)答的模式。所有的 SOAP 消息都使用 XML 編碼。一條 SOAP 消息就是一個(gè)包含有一個(gè)必需的 SOAP 的封裝包,一個(gè)可選的 SOAP 標(biāo)頭和一個(gè)必需的 SOAP 體塊的 XML 文檔。
把 SOAP 綁定到 HTTP 提供了同時(shí)利用 SOAP 的樣式和分散的靈活性的特點(diǎn)以及 HTTP 的豐富的特征庫(kù)的優(yōu)點(diǎn)。在 HTTP 上傳送 SOAP 并不是說(shuō) SOAP 會(huì)覆蓋現(xiàn)有的 HTTP 語(yǔ)義,而是 HTTP 上的 SOAP 語(yǔ)義會(huì)自然的映射到 HTTP 語(yǔ)義。在使用 HTTP 作為協(xié)議綁定的場(chǎng)合中, RPC 請(qǐng)求映射到 HTTP 請(qǐng)求上,而 RPC 應(yīng)答映射到 HTTP 應(yīng)答。然而,在 RPC 上使用 SOAP 并不僅限于 HTTP 協(xié)議綁定。
協(xié)議結(jié)構(gòu)
SOAP 消息格式:
SOAP 標(biāo)頭
<SOAP-ENV: Envelope
Attributes>
<SOAP-ENV:Body
Attributes
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
示例 1 : 內(nèi)嵌在 HTTP 請(qǐng)求中的 SOAP 消息
POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"
<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:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
下面是一個(gè)包含將 SOAP 消息作為負(fù)載的 HTTP 應(yīng)答消息。
示例 2 : 內(nèi)嵌在 HTTP 應(yīng)答中的 SOAP 消息
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
<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:GetLastTradePriceResponse xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>