SOAP(Simple Object Access Protocol )簡易物件存取通訊協定 (SOAP)是在分散或分布式的環境中交換資訊的簡單的協議,是一個基於XML的協議,它包括四個部分:SOAP封裝(envelop),封裝定義了一個描述訊息中的內容是什麼,是誰發送的,誰應當接受並處理它以及如何處理它們的架構;SOAP編碼規則(encoding rules),用於表示應用程式需要使用的資料類型的執行個體; SOAP RPC表示(RPC representation),表示遠端程序呼叫和應答的協定;SOAP綁定(binding),使用底層協議交換資訊。
雖然這四個部分都作為SOAP的一部分,作為一個整體定義的,但他們在功能上是相交的、彼此獨立的。特別的,信封和編碼規則是被定義在不同的XML命名空間(namespace)中,這樣使得定義更加簡單。
SOAP也被稱作XMLP,為兩個程式交換資訊提供了一種標準的工作機制。在各類機構之間通過電子方式相互協作的情況下完全有必要為此制定相應的標準。
交換資訊可以採用很多方法,比如電子郵件、即時聊天和遠端程序呼叫(RPC)等。電子郵件和聊天訊息通常不具備電腦友好性。電腦可以讀取電子郵件前序,但是其類型內容卻無法得到電腦這個"矽腦袋"的理解。即時聊天和RPC也面臨同樣的尷尬情況:電腦倒是可讀可人又沒法讀了。
電腦確實知道如何理解XML。SOAP描述了把訊息捆綁為XML的工作方式。它還說明了發送訊息的發送方、訊息的內容和地址以及發送訊息的時間。這也是為什麼把SOAP叫做一種協議的原因。SOAP並沒有同電子郵件協議(SMTP)、RPC(通訊端和IDL)或者Web協議(HTTP)截然分開。SOAP要利用這些系統作為訊息的起點。
SOAP是Web Service的基本通訊協定。因為SOAP與DCOM和CORBA在概念上有相同之處,所以很多人在問:"SOAP是怎樣啟用物件的?"或"SOAP在使用什麼命名服務(Naming Service)?"。或許在執行SOAP的過程當中會用到這些,但這些並不在SOAP規範要考慮的範疇之內。SOAP只是定義SOAP訊息的XML格式(XML Format),如果你用一對SOAP標記(SOAP Elements)把XML文檔括起來,那麼這個就是一個SOAP訊息,這不是很簡單嗎?
SOAP規範還定義了怎樣用XML來描述程式資料(Program Data),怎樣執行RPC(Remote Procedure Call)。這些可選的規範是為了構建RPC-style的應用程式(用戶端SOAP訊息包含函數名和在函數中用到的參數,而伺服器端SOAP訊息包含執行函數之後的結果)。大多數SOAP解決方案都支援RPC-style應用程式,因為很多程式員已對DCOM或CORBA熟悉。SOAP還支援 Document-style應用程式(SOAP訊息只包含XML文本資訊)。Document-style應用程式有很好的靈活性,所以很多用RPC很難構建的Web Service用這種方式構建。
最後SOAP規範還定義了HTTP訊息是怎樣傳輸SOAP訊息的。這並不代表SOAP只能用HTTP來作為傳輸協議,MSMQ、SMTP、TCP/IP都可以做SOAP的傳輸協議。
很多大公司根據SOAP規範,都開發出了自己的SOAP解決方案。這些解決方案都是相對於某種語言。比如說Microsoft SOAP toolkit2.0把COM函數轉換成SOAP訊息,而Apache toolkit把JAVA函數轉換成SOAP訊息。這樣難免帶來一些相容性問題。
現在SOAP的很多另人矚目的特性已成為現實(SOAP已經運行於不同的硬體和軟體平台),而且有70多個解決方案。之所以SOAP被人們所愛戴,是因為SOAP比其他同類技術(CORBA、DCE)簡單易用。
安全性對於應用程式來說是很重要的。那麼SOAP的安全性如何呢?對於把HTTP作為傳輸協議的SOAP來說是沒有問題的,因為HTTP協議已經有很好的安全構架。那麼用其他傳輸協議會出現安全問題嗎?不是的,你不必擔心,因為已經有這方面的規範了。