XML Web服務是一種用于在網絡上發布、發現和使用應用程序組件的技術。它基于一系列標準和協議,如WSDL、SOAP、RDF和RSS。下面是一些相關的內容:
-
WSDL(Web服務描述語言):用于描述Web服務的基于XML的語言,定義了服務的接口、操作和消息格式
-
SOAP(簡單對象訪問協議):是一種基于XML的協議,用于在網絡上交換結構化信息。它定義了消息的格式和傳輸規則,并被廣泛用于Web服務之間的通信。
-
RDF(資源描述框架):是一種描述網絡資源的框架,使用XML表示。它提供了一種統一的方式來描述資源的屬性和關系,是萬維網上語義網的基礎之一。
-
RSS(真正簡單的信息聚合):是一種用于發布網站內容的XML格式。它允許用戶訂閱網站的更新,并可以自動獲取最新的內容。RSS文件通常用于博客、新聞網站等。
XML Web服務的特點包括:
-
自包含和自描述:Web服務能夠描述自己的接口和功能,使其易于使用和集成到其他應用程序中。
-
基于開放協議:Web服務使用開放的協議和標準,如HTTP和SOAP,以確保不同平臺和系統之間的互操作性。
-
可重用的組件:Web服務提供了可重用的應用程序組件,如貨幣轉換、天氣預報等,可以被其他應用程序調用和集成。
-
連接現有軟件:Web服務可以連接現有的軟件系統,并提供一種統一的方式來交換數據和調用功能。
在實際應用中,您可以通過創建和部署Web服務來實現各種功能和服務,從簡單的數據轉換到復雜的業務邏輯。
XML WSDL
WSDL 是 Web Services Description Language
的縮寫
WSDL 用于描述 Web 服務
WSDL 以 XML
形式編寫
WSDL 文檔
WSDL 文檔描述了一個 Web 服務
。它指定了服務的位置以及服務的方法,使用以下主要元素:
元素 描述
定義 Web 服務
使用的 (XML Schema
) 數據類型
為每個操作定義數據元素
描述可執行操作和所涉及的消息。
為每個端口類型定義協議和數據格式
WSDL 文檔的主要結構如下:
`<definitions>``<types>`數據類型定義........
`</types>``<message>`傳輸的數據定義....
`</message>``<portType>`一組操作......
`</portType>``<binding>`協議和數據格式規范....
`</binding>``</definitions>`
WSDL 示例
`<message name="getTermRequest">``<part name="term" type="xs:string"/>`
`</message>``<message name="getTermResponse">``<part name="value" type="xs:string"/>`
`</message>``<portType name="glossaryTerms">``<operation name="getTerm">``<input message="getTermRequest"/>``<output message="getTermResponse"/>``</operation>`
`</portType>`
在此示例中,<portType>
元素將 “glossaryTerms” 定義為端口的名稱,“getTerm” 定義為操作的名稱。
“getTerm” 操作具有名為 “getTermRequest” 的輸入消息和名為 “getTermResponse” 的輸出消息。
<message>
元素定義了每個消息的部分和關聯的數據類型。
<portType>
元素
<portType>
元素定義了一個 Web 服務
,可以執行的操作以及所涉及的消息。
請求-響應類型是最常見的操作類型,但 WSDL 定義了四種類型:
類型 定義
One-way 該操作可以接收消息,但不會返回響應
Request-response 該操作可以接收請求,并將返回響應
Solicit-response 該操作可以發送請求,并將等待響應
Notification 該操作可以發送消息,但不會等待響應
WSDL 單向操作
單向操作示例:
`<message name="newTermValues">``<part name="term" type="xs:string"/>``<part name="value" type="xs:string"/>`
`</message>``<portType name="glossaryTerms">``<operation name="setTerm">``<input name="newTerm" message="newTermValues"/>``</operation>`
`</portType >`
在上面的示例中,portType
“glossaryTerms” 定義了一個名為 “setTerm” 的單向操作。
“setTerm” 操作允許使用 “newTermValues” 消息輸入新術語消息,其中包括輸入參數 “term” 和 “value”。但是,沒有為操作定義輸出。
WSDL 請求-響應操作
請求-響應操作示例:
`<message name="getTermRequest">``<part name="term" type="xs:string"/>`
`</message>``<message name="getTermResponse">``<part name="value" type="xs:string"/>`
`</message>``<portType name="glossaryTerms">``<operation name="getTerm">``<input message="getTermRequest"/>``<output message="getTermResponse"/>``</operation>`
`</portType>`
在上面的示例中,portType
“glossaryTerms” 定義了一個請求-響應操作,名為 “getTerm”。
“getTerm” 操作需要名為 “getTermRequest” 的輸入消息,其中包含名為 “term” 的參數,并將返回一個名為 “getTermResponse” 的輸出消息,其中包含名為 “value” 的參數。
WSDL 綁定到 SOAP
WSDL 綁定定義了 Web 服務
的消息格式和協議細節。
請求-響應操作示例:
`<message name="getTermRequest">``<part name="term" type="xs:string"/>`
`</message>``<message name="getTermResponse">``<part name="value" type="xs:string"/>`
`</message>``<portType name="glossaryTerms">``<operation name="getTerm">``<input message="getTermRequest"/>``<output message="getTermResponse"/>``</operation>`
`</portType>``<binding type="glossaryTerms" name="b1">``<soap:binding style="document"``transport="http://schemas.xmlsoap.org/soap/http" />``<operation>``<soap:operation soapAction="http://example.com/getTerm"/>``<input><soap:body use="literal"/></input>``<output><soap:body use="literal"/></output>``</operation>`
`</binding>`
binding
元素具有兩個屬性 - name
和 type
。
name
屬性(您可以使用任何名稱)定義綁定的名稱,type
屬性指向綁定的端口,在本例中為 “glossaryTerms” 端口。
soap:binding
元素具有兩個屬性 - style
和 transport
。
style
屬性可以是 “rpc” 或 “document”。在這種情況下,我們使用 document
。transport
屬性定義要使用的 SOAP
協議。在這種情況下,我們使用 HTTP
。
operation
元素定義了 portType
公開的每個操作。
對于每個操作,必須定義相應的 SOAP
動作。您還必須指定如何編碼輸入和輸出。在本例中,我們使用 “literal”。
XML SOAP
SOAP 是 Simple Object Access Protocol
的縮寫
SOAP 是一種應用通信協議
SOAP 是用于發送和接收消息的格式
SOAP 是平臺無關的
SOAP 基于 XML
為什么使用 SOAP?
Web 應用程序
能夠在 互聯網
上進行通信是非常重要的。
在 應用程序
之間進行通信的最佳方式是通過 HTTP
,因為 HTTP
受到所有 互聯網
瀏覽器和服務器的支持。SOAP
就是為了實現這一點而創建的。
SOAP
提供了一種在運行在不同操作系統、使用不同技術和編程語言的 應用程序
之間進行通信的方式。
SOAP 構建塊
SOAP
消息是一個普通的 XML
文檔,包含以下元素:
一個 Envelope
元素,用于標識 XML
文檔作為 SOAP
消息
一個包含頭信息的 Header
元素
一個包含調用和響應信息的 Body
元素
一個包含錯誤和狀態信息的 Fault
元素
以上所有元素都聲明在 SOAP
信封的默認命名空間中
語法規則
以下是一些重要的語法規則:
SOAP
消息必須使用 XML
進行編碼
SOAP
消息必須使用 SOAP Envelope
命名空間
SOAP
消息不能包含 DTD
引用
SOAP
消息不能包含 XML
處理指令
該命名空間將 Envelope
定義為 SOAP Envelope
。
如果使用了不同的命名空間,應用程序
將生成錯誤并丟棄消息。
encodingStyle 屬性
encodingStyle
屬性用于定義文檔中使用的數據類型。該屬性可以出現在任何 SOAP
元素上,并應用于該元素及其所有子元素。
SOAP
消息沒有默認編碼。
SOAP Header 元素
可選的 SOAP Header
元素包含關于 SOAP
消息的應用程序特定信息(如身份驗證、支付等)。
如果存在 Header
元素,則必須將其放在 Envelope
元素的第一個子元素位置。
注意:Header
元素的所有直接子元素必須是命名空間限定的。
SOAP
在默認命名空間中定義了三個屬性。這些屬性是:mustUnderstand
、actor
和 encodingStyle
。
SOAP Header
中定義的屬性定義了接收者應該如何處理 SOAP
消息。
mustUnderstand
屬性
SOAP mustUnderstand
屬性可用于指示接收者是否必須處理頭部條目。
如果將 mustUnderstand="1"
添加到 Header
元素的子元素中,表示處理 Header
的接收者必須識別該元素。如果接收者不識別該元素,則在處理 Header
時將失敗。
語法
soap:mustUnderstand=“0|1”
actor
屬性
SOAP
消息可能通過沿著消息路徑傳遞不同的端點從發送方傳遞到
接收方。然而,SOAP
消息的不是所有部分都可能是針對最終端點的,而是可能針對消息路徑上的一個或多個端點。
SOAP actor
屬性用于將 Header
元素定向到特定端點。
語法
soap:actor=“URI”
encodingStyle 屬性
encodingStyle
屬性用于定義文檔中使用的數據類型。該屬性可以出現在任何 SOAP
元素上,它將應用于該元素的內容及其所有子元素。
SOAP
消息沒有默認編碼。
語法
soap:encodingStyle=“URI”
SOAP Body 元素
必需的 SOAP Body
元素包含了消息的實際 SOAP
消息,用于消息的最終端點。
SOAP Body
元素的直接子元素可以是命名空間限定的。
示例
<?xml version="1.0"?><soap:Envelope
</m:GetPrice>
</soap:Body>
</soap:Envelope>
上面的示例請求了蘋果的價格。請注意,上面的 m:GetPrice
和 Item
元素是應用程序特定的元素。它們不屬于 SOAP
命名空間
SOAP Fault 元素
可選的 SOAP Fault
元素用于指示錯誤消息。
SOAP Fault
元素包含了 SOAP
消息的錯誤和狀態信息。
如果存在 Fault
元素,它必須作為 Body
元素的子元素出現。Fault
元素只能在 SOAP
消息中出現一次。
SOAP Fault
元素具有以下子元素:
子元素 描述
<faultcode>
用于標識錯誤的代碼
<faultstring>
錯誤的人類可讀的解釋
<faultactor>
導致錯誤發生的信息
<detail>
包含與 Body
元素相關的應用程序特定錯誤信息
SOAP 錯誤代碼
當描述錯誤時,faultcode
元素中必須使用以下定義的 faultcode
值:
錯誤 描述
VersionMismatch
在 SOAP Envelope
元素的命名空間中找到無效的命名空間
MustUnderstand
Header
元素的立即子元素,mustUnderstand
屬性設置為 “1”,未被理解
Client
消息格式不正確或包含不正確的信息
Server
服務器出現問題,因此消息無法繼續進行
HTTP 協議
HTTP
通過 TCP/IP
進行通信。HTTP
客戶端使用 TCP
連接到 HTTP
服務器。建立連接后,客戶端可以向服務器發送 HTTP
請求消息:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
然后,服務器處理請求并將 HTTP
響應發送回客戶端。響應包含指示請求狀態的狀態代碼:
200 OK
Content-Type: text/plain
Content-Length: 200
在上面的示例中,服務器返回了狀態代碼 200
。這是 HTTP
的標準成功代碼。
如果服務器無法解碼請求,則可能返回以下內容:
400 Bad Request
Content-Length: 0
SOAP 綁定
SOAP
規范定義了 SOAP
消息的結構,但未定義它們如何交換。這一空白由所謂的 “SOAP 綁定” 填補。SOAP
綁定是允許使用傳輸協議有效地交換 SOAP
消息的機制。
大多數 SOAP
實現提供了常見傳輸協議的綁定,例如 HTTP
或 SMTP
。
HTTP
是同步的并且被廣泛使用。SOAP HTTP
請求至少指定了兩個 HTTP
頭部:Content-Type
和 Content-Length
。
SMTP
是異步的,通常在最后一種情況或特殊情況下使用。
Java
的 SOAP
實現通常為 JMS
(Java 消息系統
)協議提供了特定的綁定。
Content-Type
SOAP
請求和響應的 Content-Type
頭部定義了消息的 MIME
類型以及用于請求或響應的 XML
主體的字符編碼(可選)。
Content-Type: MIMEType; charset=character-encoding
示例
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length
SOAP
請求和響應的 Content-Length
頭部指定了請求或響應的主體中的字節數。
Content-Length: bytes
示例
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
最后
為了方便其他設備和平臺的小伙伴觀看往期文章:
微信公眾號搜索:Let us Coding
,關注后即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關注