內容目錄
前言
最近真的串太多 XML 的 api 了
覺得太多眉眉角角要注意 又有滿多詭異的部份
所以這邊記下來 供有需要的朋友參考參考!
名詞解釋
Web Services (Web 服務)
是一種跨程式語言和跨作業系統平臺的遠端呼叫技術
- 跨程式語言
- 也就是 server 端無論用什麼程式語言寫的, client 端都可以用其他語言寫
- 跨操作平臺:
- server 端程式和 client 端程式可以在不同的作業系統上執行
- 遠端呼叫技術:
- 機器 A 上的一個程式可以呼叫到另外機器 B 上的一個物件的方法
- 例: Youtube 把斗內的金額狀態以 Web Service 的方式暴露在外,讓 client 端可以呼叫並應用
比如說做一個斗內的進度條出來 (https://www.youtube.com/watch?v=xdySMoDZq-E)
三大平台技術
- XML XSD
- SOAP
- WSDL
分成以下三個部份詳述
XML XSD
Web Service採用HTTP協議傳輸資料 並採用XML格式封裝資料
(即XML中說明呼叫遠端服務物件的哪個方法,傳遞的引數是什麼,以及服務物件的返回結果是什麼)
XML (Extensible Markup Language,可延伸標記式語言)
- Web Service平臺中表示資料的格式。易於建立和易於分析
- 例:
example.xml
<?xml version="1.0"?>
<note>
<to>George</to>
<from>MoroseDog</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
XSD (XML Schema Definition)
- 指出如何形式描述XML文件的元素,定義了一套標準的資料型別,並給出了一種語言來擴充套件這套資料型別
- 例:
example.xsd (XML Schema文件,它定義了上面那個XML文件的元素。)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://morosedog.gitlab.io/2020/XMLSchema"
targetNamespace="http://morosedog.gitlab.io"
xmlns="http://morosedog.gitlab.io"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
註: 工具可能已經自動完成了這個轉換,但我們或會根據需求修改一下轉換過程
SOAP
Web Service通過 HTTP 協議傳送請求和接收結果時
傳送的請求內容和結果內容都採用XML格式封裝
並增加了一些特定的HTTP header
以說明 HTTP 訊息的內容格式
這些特定的 HTTP header 和 XML 內容格式就是 SOAP 協議
SOAP協議 = HTTP協議 + XML資料格式
例:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://morosedog.gitlab.io/2001/12/soap-envelope"
soap:encodingStyle="http://morosedog.gitlab.io/2001/12/soap-encoding">
<soap:Header>
...
...
</soap:Header>
<soap:Body>
...
...
<soap:Fault>
...
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
WSDL (Web Services Description Language)
Web Service 的 client 端要向 server 端呼叫一個Web Service服務時
首先要有知道這個服務的地址在哪 以及這個服務裡有什麼方法可以呼叫
所以Web Service servier端首先要通過一個 WSDL 檔案來說明上述資訊
WSDL 就是這樣一個基於XML的語言
它是Web Service客戶端和伺服器端都能理解的標準格式
用於描述Web Service及其函式、引數和返回值
例:
<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>
寫到這邊 架構大概會長成這樣
(可先忽略 UDDI 的部份)