2010-05-01 70 views
6

我唯一真正接觸到的想法是REST已經通過Ruby on Rails的RESTful routing。這對我使用Rails構建的基於CRUD的應用程序非常適合,但因此我對RESTfulness的理解有限。通過示例瞭解REST


比方說,我們有一個項目的有限集合,每個都有一個唯一的ID,以及一些特性,比如顏色,形狀和尺寸的(可能是不確定的某些項目)。

項目可以由客戶端使用一段時間,但每個項目只能由一個客戶端一次使用。物品的訪問受服務器的限制。客戶可以請求從服務器臨時使用某些項目。

通常,客戶只會有興趣獲得具有特定屬性的多個項目,而不是訪問特定的項目。

當客戶端請求使用多個Items時,服務器會響應與該請求相對應的ID列表,或者響應說所請求的Items當前不可用或不存在。

客戶端可以進行以下類型的請求:

  • 告訴我許多綠色三角形的項目有怎樣的(總/可用)。
  • 給我使用200個大型紅色物品。
  • 我已完成項目21,23,23。
  • 添加100個新的紅色方塊物品。
  • 刪除50個小綠物品。
  • 修改所有大的黃色五角形物品爲藍色。

玩具上面的例子就像是一個資源分配問題,我不得不應對最近。我應該如何去思考它RESTfully?

回答

5

如果在您的方案中鎖定資源確實是一個關注領域的問題,那麼我會推薦將鎖建模爲資源。

以下是關於如何處理您建議的請求的一些建議。

GET /Triangle/Green/Count 
GET /Triangle/Green/Available 

POST /Item/Red/Large/Locks?quantity=200 

DELETE /Item/21/Lock 
DELETE /Item/23/Lock 
DELETE /Item/25/Lock 

POST /Square/Red?quantity=100 

DELETE /Item/Green/Small?quantity=100 

POST /Pentagon/Blue?url=/Pentagon/Yellow 

說了這些之後,定義URL有點不相干。使用適當的鏈接關係設計媒體類型是RESTful設計的關鍵部分。

+0

+1好主意,鎖定爲資源 - 按照nounds而不是動詞(鎖定與鎖定事件)來考慮。 – ScottCher 2012-05-03 13:25:06

6

理解的訣竅就是從專注於名詞而不是動詞的角度思考問題。

在其他世界裏,動詞都是「預設」,名詞變得無限靈活。在肥皂或roc世界中,動詞是非常靈活的。限制你的想法來鎖定動詞,然後在你所擁有的限制範圍內,看看你需要什麼名詞來解決你的問題。

這正是親愛的在上面的答案中所做的 - 他爲鎖定了一個新的名詞,以滿足您的限制,然後設置訪問權限以實現您想要的內容。

您的一些問題與搜索或過濾器相關 - 對於那些認爲針對資源類型的GET,傳遞查詢參數以限制或過濾結果。

0

閱讀此基本知識...我卡在什麼是REST ... !!!

內容管理系統可能包含一組文章。這裏隱含着兩個資源。首先,有單獨的文章。每個構成一個資源。還有第二個資源:文章的集合。

要獲取所有文章的列表,我們可以對這個集合發出一個HTTP GET請求,比如路徑/文章。要獲取單個資源的內容,我們必須識別它。 Rails的方式是給它的主鍵值(也就是它的id)。我們再次發出GET請求,這次是針對URL/articles/1。到目前爲止,這看起來都非常熟悉。但是,當我們想要將文章添加到我們的收藏中時會發生什麼?

在非RESTful應用程序中,我們可能會發明一些以動詞短語作爲名稱的動作:articles/add_article/1。在REST的世界裏,我們不會這樣做:我們應該告訴資源如何使用標準的動詞集來做什麼。要使用REST在我們的集合中創建新文章,我們將使用針對/ articles路徑的HTTP POST請求,其中包含要添加的文章的發佈數據。是的,這與我們用來獲取文章列表的路徑相同:如果您向其發出GET,它會以列表形式進行響應,並且如果您對其執行POST操作,則會向該集合添加一篇新文章。

更進一步。我們已經看到您可以檢索文章的內容,針對路徑/ articles/1發出GET請求。要更新那篇文章,您將針對相同的URL發出HTTP PUT請求。而且,要刪除它,您可以再次使用相同的URL發出HTTP DELETE請求。