2009-07-15 58 views
2

希望有人能幫我解決這個問題。在這些RESTFUL用例中使用哪種HTTP方法?

考慮以下用例:

  1. 添加角色到用戶
  2. 卸下/從用戶

到系統的接口是RESTFUL吊銷作用。

添加了作用,使用以下網址:

PUT /user/{userId}/role/{roleId} 

刪除/撤銷來自用戶的角色,使用以下網址:

DELETE /user/{userId}/role/{roleId} 

我的直覺是這兩個RESTFUL調用應該是PUT,並且URL也應該修改:

PUT /user/{userId}/register/role/{roleId} 
PUT /user/{userId}/revoke/role/{roleId} 

想法?

回答

2

創建應該使用POST來完成,因此爲用戶創建新角色應該是POST而不是PUT,我會說。這取決於你是否考慮添加一個角色來創建一個角色(在這種情況下它是一個POST),或者修改一個用戶(然後它是一個PUT)。你用URL表示URL的方式向我表明前者,所以我會用POST。

相同的論點適用於撤銷角色。這是對用戶的修改還是刪除角色?如果前者,那麼我會說PUT,如果後者,然後刪​​除。

+0

感謝您的回覆。我自己將其視爲對用戶的修改,因爲角色已經存在。唯一的創作是關係....有趣的 – JamesC 2009-07-15 09:05:57

0

我自己的看法是,從RESTful的角度來看,DELETE通常是可取的。如果你通過一個事務日誌工作,你可以使用PUT--你不只是刪除一些權限,你添加一個事務去除你的事務日誌的權限,這也意味着每次你會得到一個唯一的ID代表行動。

+0

謝謝您響應。資源User和Role一樣有一個ID,但是這種關係不會導致沒有唯一的資源ID,這就是爲什麼我認爲PUT更合適。 – JamesC 2009-07-15 09:04:56

0

由於您始終使用Http動詞,因此您提供的第一個解決方案非常安靜。第二種解決方案不一致,因爲您使用PUT來刪除某些內容。

如果您要創建一個資源代表註冊和撤銷的交易,那麼你可以做到以下幾點:

POST /registrations 

POST /revokations 

現在,在撤銷的情況下,更清楚地表明你正在創建一個資源(撤銷事務),其具有從用戶移除角色的副作用。缺點是,現在您需要一個包含用戶和受事務影響的角色的POST主體。

我認爲您的第一個解決方案絕對是最好的。

0

我建議使用DELETE進行第二種選擇。只要你正在尋找一個唯一的資源,你就應該嘗試把這個操作視爲在這個資源上完成。所以在你的情況下,你所採取的URL是角色的。所以你從用戶下面刪除角色。這就是我看到它的方式,它使得閱讀變得容易 - RESOURCE方法。

而且,如果您執行PUT,通常會替換RESOURCE,這意味着您將整個資源發送到服務器。

0

一個古老的問題,但URL不應該在OP中修改。 RESTful URL的不得包含動詞(registerrevoke。動詞表示RPC或REST-RPC混合體繫結構。

其他人已經回答了動詞的選擇問題提得好,但我的2P/2c是: -

POST應該用於創建新資源,PUT用於更新現有