Web Service 訊息格式
當客戶端和Web Service伺服器進行通訊時,他們交換訊息。客戶端傳送請求訊息到Web Service伺服器。 Web Service伺服器響應並返回訊息。這就像普通的HTTP,瀏覽器傳送一個HTTP請求到Web伺服器, Web伺服器會提供一個HTTP響應。
最初唯一可用的Web Service訊息格式是SOAP,後來出現了REST式的Web Service,它採用純XML和HTTP。隨著REST的興起,出現了很多人使用JSON(JavaScript物件符號)作為訊息格式。另外一個很簡單的遠端協議被稱為XML-RPC(XML遠端過程呼叫)。 對最常見的是SOAP協議我不會在這裡詳述訊息格式細節,因為在後續的教程中會提到。在這裡,我只是簡單提一下。
客戶端傳送請求到web服務,並且接收web服務的響應
SOAP
SOAP(簡單物件訪問協議)是基於XML的訊息格式。下面是一個簡單的SOAP訊息:
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> </soap:Header> <soap:Body> ... message data ... <soap:Fault> </soap:Fault> </soap:Body> </soap:Envelope>
正如你可以看到一個SOAP訊息包括:
- Envelope
- Header
- Body
- Message Data
- Fault (optional)
相同的SOAP訊息結構用於客戶端和Web Service伺服器之間的請求和響應。
Body內的Fault元素是可選的。只有Web服務中發生內部錯誤裡才返回。否則,返回正常資訊資料。
SOAP不指定一個訊息從客戶端如何獲取到Web Service,但最常見的情況是通過HTTP。
REST + XML
REST(具象狀態傳輸)Web服務與SOAP Web服務有一點不同。一個REST請求就像一個普通的瀏覽器傳送一個簡單的HTTP請求到Web伺服器。一般情況不傳送XML請求。一個REST響應通常在一個普通的HTTP響應中傳送回一個XML文件,就像瀏覽器請求一樣。
在REST中,你不用太多關注“服務”方面,而是在“資源”。一個資源有一個給定的URL,就像在一個網站的HTML頁面。比如社交應用中一個使用者的基本資訊資源,可能是下面的網址:
http://social.jenkov.com/profiles/jakobjenkov
這個URL可能會返回一個XML文件(資源)描述了我。 返回的XML檔案會是下面這樣:
<profile> <firstName>Jakob</firstName> <lastName>Jenkov</lastName> <address> <street>The Road 123</street> <zip>12345</zip> <city>Copenhagen</city> </address> </profile>
REST也自然地支援資源的集合。舉例來說,這個URL可能代表所有的公共使用者配置檔案的列表:
http://social.jenkov.com/profiles/ 下面是這樣的XML配置檔案列表的一個例子:<profiles> <profile>...</profile> <profile>...</profile> <profile>...</profile> </profiles>
上面這兩個網址只能讀取一個資源或資源集合。如果您需要修改REST中的資源,您需要傳送不同的HTTP請求到伺服器。當你讀一個資源要傳送HTTP GET請求。如果你需要寫一個資源,就需要傳送一個HTTP PUT來代替。如果你需要刪除一個資源,需要傳送一個HTTP DELETE等。
REST + JSON
REST+ JSON跟REST + XML基本上是一樣的,只不過傳輸的資料是JSON(JavaScript物件符號)格式的。JSON的基於XML的優點是Web瀏覽器能夠自然地解析JSON結構並且轉換成JavaScript物件,不需要自己在瀏覽器中轉換。這使得許多使用AJAX的應用程式變得簡單。
下面是一個json的例子:
{ firstName : "Jakob", lastName : "Jenkov", address : { street : "The Road 123", zip : "12345", city : "Copenhagen" } }
XML RPC
相比REST,XML RPC更類似於SOAP,XML RPC的請求和響應都是一樣的格式,相比SOAP ,XML RPC是一種較為簡單的協議,它很接近標準過程呼叫的建模。有些人聲稱,XML RPC現在已死或過時。
下面是一個XML RPC的請求示例:
POST /RPC2 HTTP/1.0 User-Agent: My XML-RPC API/1.0.0 (Win7) Host: jenkov.com Content-Type: text/xml Content-length: 200 <?xml version="1.0"?> <methodCall> <methodName>getProfile</methodName> <params> <param> <value><string>Jakob Jenkov</string></value> </param> </params> </methodCall>
標註:這個HTTP請求的Content-Length頭沒有正確設定,它應該是XML請求的位元組數。
下面是一個XML RPC響應示例:
HTTP/1.1 200 OK Connection: close Content-Length: 213 Content-Type: text/xml Date: Wed, 03 Feb 2010 20:00:00 GMT+1 Server: jenkov.com <?xml version="1.0"?> <methodResponse> <params> <param> <struct> <member> <name>firstName</name> <value>Jakob</value> </member> <member> <name>lastName</name> <value>Jenkov</value> </member> <member> <name>address</name> <value> <struct>...</struct> </value> </member> </struct> </param> </params> </methodResponse>