簡單物件存取協定
此條目沒有列出任何參考或來源。 (2023年6月8日) |
SOAP(原為Simple Object Access Protocol的首字母縮寫,即簡單物件存取協定)是交換資料的一種協定規範,使用在電腦網路Web服務(web service)中,交換帶結構的資訊。SOAP為了簡化網頁伺服器(Web Server)從XML資料庫中提取資料時,節省去格式化頁面時間,以及不同應用程式之間按照HTTP通訊協定,遵從XML格式執行資料互換,使其抽象於語言實現、平台和硬體。此標準由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,並得到IBM、蓮花(Lotus)、康柏(Compaq)等公司的支援,於2000年提交給全球資訊網聯盟(World Wide Web Consortium,W3C),目前SOAP 1.1版是業界共同的標準,屬於第二代的XML協定(第一代具主要代表性的技術為XML-RPC以及WDDX)。
用一個簡單的例子來說明SOAP使用過程,一個SOAP訊息可以傳送到一個具有Web Service功能的Web站點,例如,一個含有房價資訊的資料庫,訊息的參數中標明這是一個查詢訊息,此站點將返回一個XML格式的資訊,其中包含了查詢結果(價格,位置,特點,或者其他資訊)。由於資料是用一種標準化的可分析的結構來傳遞的,所以可以直接被第三方站點所利用。
相關定義
編輯- SOAP封裝(envelope):定義了一個框架,描述訊息中的內容是什麼、是誰傳送的、誰應當接受並處理它以及如何處理它們;
- SOAP編碼規則(encoding rules):定義了一種序列化的機制,用於表示應用程式需要使用的資料類型的實例;
- SOAP RPC表示(RPC representation):定義了一個協定,用於表示遠端程序呼叫和應答;
- SOAP繫結(binding),它定義了SOAP使用哪種協定交換資訊。使用HTTP/TCP/UDP協定都可以。
把SOAP繫結到HTTP的方式,同時利用了SOAP的樣式和分散的靈活性特點以及HTTP的豐富特徵庫的優點。在HTTP上傳送SOAP並不意味著SOAP會覆蓋現有的HTTP語意,而是HTTP上的SOAP語意會自然地對映到HTTP語意。在使用HTTP作為協定繫結的場合中,RPC請求對映到HTTP請求上,而RPC應答對映到HTTP應答。然而,在RPC上使用SOAP並不僅限於HTTP協定繫結。
歷史
編輯SOAP曾經代表「Simple Object Access Protocol」,但是這種縮寫已經在標準的1.2版後被廢止了。1.2版在2003年6月24日成為W3C的推薦版本。這種縮寫容易與SOA——Service-Oriented Architecture產生歧義,即使它們之間存在非常大的差異。
SOAP由Dave Winer、Don Box、Bob Atkinson、 Mohsen Al-Ghosein於1998年設計,當時只作為一種物件存取協定。現在,SOAP規範 (頁面存檔備份,存於網際網路檔案館)由全球資訊網協會 (頁面存檔備份,存於網際網路檔案館)的XML工作群組 (頁面存檔備份,存於網際網路檔案館)維護。
傳輸方式
編輯SOAP使用網際網路應用層協定作為其傳輸協定。SMTP以及HTTP協定都可以用來傳輸SOAP訊息,但是由於HTTP在如今的網際網路結構中工作得很好,特別是在網路防火牆下仍然正常工作,所以被廣泛採納。SOAP亦可以在HTTPS上傳輸。
SOAP的訊息格式採用XML。
語法規則
編輯- SOAP訊息必須用XML來編碼
- SOAP訊息必須使用SOAP Envelope命名空間
- SOAP訊息必須使用SOAP Encoding命名空間
- SOAP訊息不能包含DTD參照
- SOAP訊息不能包含XML處理指令
SOAP訊息實例
編輯請求
編輯<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<req:echo xmlns:req="http://localhost:8080/wxyc/login.do">
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>
回應
編輯<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<soapenv:Header>
<wsa:ReplyTo>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:From>
<wsa:Address>http://localhost:8080/axis2/services/MyService</wsa:Address>
</wsa:From>
<wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
</soapenv:Header>
<soapenv:Body>
<req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/">
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>
參見
編輯外部連結
編輯- W3C的SOAP頁面 (頁面存檔備份,存於網際網路檔案館)
- SOAP1.2版說明書 (頁面存檔備份,存於網際網路檔案館)
- 教學網站