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
,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關注