2012-06-13 43 views
0

我正在設計一個Restful HTTP API並且有一個設計問題。Restful HTTP API模式

在我的應用程序中,用戶應該能夠建議物品創建。

然後我可以批准或不批准他們。

我想知道最好的VERB + URL模式是什麼。

實施例1:

POST|GET|PUT|DELETE /items 

用戶POST一個新的項目和我可以把它從「待定」或刪除「認可」。

這裏我必須使用GET/items?status = approved來獲取所有批准的項目和GET/items?status = pending以獲取所有未決項目。也許GET/items會默認給我所有批准的。

但我不明白我可以如何阻止用戶將其設置爲已批准狀態。

例2:

POST|GET|PUT|DELETE /item_creation_suggestions 

用戶發佈一個新的項目建議,我可以通過DELETE批准:婷,並做一個POST /項或刪除它。

這裏/ items和/ item_creation_suggestions是兩個獨立的集合。我只需在批准時刪除建議並創建項目。

這使得我的應用程序免受未經授權的訪問變得非常簡單。我可以通過授權保護我的/物品,而/ item_creation_suggestions可以被任何人使用。

但這似乎不是很安靜?

這同樣適用於用戶建議更新和刪除項目時,並且我批准或拒絕這些項目。

我在Restful設計非常新,所以所有的反饋意見和建議,將不勝感激!

回答

2

第一個聽起來不錯。

POST /items應創建一個新項目,並可能返回202 Accepted狀態。
GET /items應返回所有批准的項目。
GET /items?status=pending應將未決項目返回給具有正確權限的用戶。
PUT /items/[id]與請求主體指定一個新的狀態來改變狀態。
DELETE /items/[id]刪除該項目。

最後,您需要決定什麼對您的 API最有意義,但上述聲音通常是合理的。

+0

我不認爲Accepted在這裏適合;這意味着請求已收到,它在第一眼看來似乎有效,但這可能隨請求在後臺處理而改變。 – Evert

+0

是的,這取決於目標受衆是誰。從用戶的角度來看,如果我'POST'一個項目,但它不是立即可見的,就會收到'202'。如果可能還有一個選項立即發佈項目,並且區分這兩者很重要,那麼使用HTTP狀態代碼很容易。 – deceze

+0

由於201表示它是創建的,所以202接受可能暗示該建議被接受。 – wingy

1

我也非常喜歡第一個設置。

但我不明白我可以如何防止用戶將其設置爲已批准狀態。

如果用戶沒有權限執行此操作,那麼您的應用程序邏輯需要阻止用戶在批准狀態下POST'ing項目。 REST不僅僅是一個'死存儲',你實際上可以處理請求並且拋出一個403 Forbidden以防用戶做錯了事情。

訪問控制仍然很重要,並不違背'安寧'。