2009-07-29 262 views
6

你需要避免設置一個Restful接口來確保你沒有把它變成一個RPC?Restful網絡服務

+0

傑夫,不要用四個空格開始你的句子 - 這會告訴「降價」把它當作一個代碼塊(沒有自動換行),並且很難閱讀 - 除了實際的代碼塊,課程! :-) – 2009-07-29 20:39:46

+0

http://www.pluralsight.com/community/blogs/tewald/archive/2007/04/28/47067.aspx – skaffman 2009-07-29 20:42:22

+0

@SLott ... oops .. done – skaffman 2009-07-29 21:01:28

回答

8

務必:

  • 設計自己的應用程序hypertext-driven(超媒體作爲應用狀態的引擎 - HATEOAS)。
  • 花大部分時間和精力來識別資源並製作媒體類型來表示它們。
  • 將整個URI視爲您的資源標識符,並假定它將來會更改。
  • 提供所有選項以繼續作爲您表示中的鏈接進一步貫穿您的應用程序。
  • 將您的應用程序視爲將由客戶「爬行」或「瀏覽」的網站。
  • 嘗試爲您的API編寫客戶端並查找耦合發生的位置。

不要:

  • 發佈URI模板API文檔。例如,如果您必須具有查詢參數的模板,請確保它們是您的媒體類型定義的一部分。
  • 將您的應用程序看作是由四個動詞執行的URI集合。
  • 向客戶端提供諸如「application/xml」或「application/json」等MIME類型。

要使用類比,您的API應該更像您的客戶端的GPS,而不像地圖。您只會向客戶提供附近街道的名稱。但從那時起,他們只能做你的應用程序所說的任何事情。

這種風格的目的是儘量減少應用程序和客戶端之間的耦合。所有的耦合應該發生在你的媒體類型定義中。這簡化了API的發展,併爲版本化提供了一個很好的機制。這也使得關於分頁消失等問題成爲問題。

大多數「RESTful」API不遵循這種模式。對於那個,請參閱Sun Cloud API及其backstory

2

一種廣泛的問題,但我會試一試。首先,只使用HTTP動詞的意圖。不要通過基本上覆蓋POST的url參數POST,並將其變爲GET或DELETE。這就是SOAP的工作原理(一切都是POST)。

+0

這只是正確的HTTP使用 - doesn與REST無關。 – aehlke 2009-08-03 14:37:16

4

儘可能利用底層協議。而不是在有效載荷中有動詞嘗試使用(例如)HTTP GET,POST,PUT,DELETE方法。你的URI應該描述一個資源,但不應該用它來做什麼。