2011-07-07 128 views
3

我正在研究Web服務,我正在嘗試決定是否使其成爲RESTful。我發現關於REST的信息丟失了,但沒有多少關於它爲什麼有用的信息。通過網頁與RESTful API交互?

特別是我很困惑,因爲它似乎使用RESTful方法使得通過客戶端網頁與服務交互非常困難,因爲您必須使用AJAX提交除GET/POST查詢以外的任何內容,並且如果您的服務存在於不同的服務器上,那麼由於相同的原始策略,這幾乎是不可能的。

任何人都可以填寫我通常如何做到這一點,以及REST爲您提供什麼好處,例如簡單的RPC API?

+0

此信息應該很有用:http://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-most-web-browsers –

回答

0

現代瀏覽器(兼容HTML5)支持所有適當的HTTP動詞(GET,PUT,POST,DELETE)。爲了處理相同的原始策略問題,您可以始終在您的服務器上公開端點以連接到外部服務器。

從REST獲得的好處來自於您的數據模型表示形式的資源,而不是服務。特別是,數據模型元素的表示可以利用HTTP緩存機制。同樣,使用表示模型可以強制對您的數據模型進行設計時評估(根據我的經驗)證明非常有用。

0

1) 爲什麼REST:

試想MVC模式。

如果您有多個相同內容的視圖,模型 - 視圖分離尤其有意義。

現在通過易於實現的特定於應用程序的協議將REST看作是一種機器友好的視圖。讓您的應用程序對希望將應用程序作爲Web服務集成到自己的應用程序中的其他開發人員也有用。

REST是一種應用程序集成技術。

如果您想爲您的應用程序提供機器和開發人員友好的Web服務API,那麼REST是一個不錯的選擇。

2) REST vs RPC REST應該按照無狀態的方式實現每個定義。 RPC調用是對對象或會話變量的遠程方法調用,這會使RPC API處於有狀態,並且在許多情況下更昂貴。

3) 不同REST風格 與REST的問題是,它並不總是很容易爲對象的所有操作地圖上常見的HTTP方法GET,POST,PUT,DELETE,OPTIONS。

顯然CRUD可以通過將4個CRUD操作分配給GET,POST,PUT,DELETE方法來實現。

但是你也可以在POST方法的HTTP主體中編寫這種操作,這是做REST的簡約GET,POST風格。

問題並非所有的HTTP客戶端都可以發送PUT請求。

由CRUD式的服務倡導的解決方案是通過註釋POST請求有一個特殊的HTTP標頭以模擬PUT請求: X-HTTP-方法 - 替換:PUT

但是,這並不能解決問題,因爲一些外來的防火牆刪除了這個非標準的HTTP頭。

Roy Fielding創造了RESTful API這個術語,他還提到他認爲用GET和POST設計一個完美的RESTful系統是完全可能的。

4) 將REST添加到現有的MVC Web應用程序中需要至少實現一個額外的RESTful控制器,該控制器將HTTP方法轉換爲由請求URI標識的模型對象上的PUT,POST,DELETE動作,實現更加機器友好的視圖(JSON,XML,...)。