XML Web服務是基於WSDL、SOAP、RDF和RSS等標準的網路應用程式組件技術。WSDL描述服務介面和消息格式,SOAP用於結構化信息交換,RDF描述網路資源,RSS則用於發佈網站更新。Web服務特點是自包含、自描述,基於開放協議,可重用且能連接現有軟體。WSDL文檔包含`types`、`m... ...
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
元素的直接子元素可以是命名空間限定的。
示例
<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
,關註後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關註