2015-05-18 63 views
1

我閱讀了很多關於RESTful API Design的內容。 但是當涉及到實施時,它不再那麼容易了。 我被困在下面的問題:Restful Collections - 如何刪除或刪除項目

假設以下2端點:

  1. /API/V1 /用戶/:ID
  2. /API/V1 /用戶/ 1 /朋友/:ID

大家都可以看到,朋友是資源用戶的集合。 用戶可以在他的好友列表中擁有n個好友(標準情況下,這將成爲多人對象,但現在讓我們假設這是一對多)。 好,現在我想REMOVE用戶從用戶1通過執行下列HTTP請求的friendslist(ID = 3):

DELETE API/V1 /用戶/ 1 /朋友/ 3

而這正是我被困 - 任一方請求刪除具有ID = 3或刪除從集合中的資源在整個用戶資源。因爲兩者都是有效的Restful實現,我認爲。

所以,問題是: 如何不刪除原始資源

我希望這個問題是沒有重複的從集合中刪除一個項目 - 但我沒有google了很多尋找答案。也許我不知道相關的技術術語,以找到一些令人滿意的結果...

感謝轉發。

+0

你爲什麼問「如何刪除」?如果你問「我應該使用這樣的URI從集合中刪除一個項目而不刪除原始資源嗎?」我會回答「是的,看起來非常RESTful」。這是你的問題嗎? –

+0

對不起,我是RESTful實現的新手 - 正如我在下面評論的,我一直認爲DELETE在一個集合中刪除鏈接和/或刪除原始資源。所以我不確定如何在集合上實現DELETE。但是像勘誤表示的那樣,在一個集合的上下文中,DELETE-Method **只刪除**鏈接**。它確實不會影響原始資源**。這就是關鍵! ;-) –

回答

1

REST的方法看起來很不錯,但實際上只能說路徑格式和HTTP動詞。問題必須出現在您的應用程序代碼或應用程序路線中。

+0

所以要清楚:上面的DELETE-Method只能刪除集合中另一個資源的鏈接。鏈接的資源本身將保持不變。真的嗎? –

+0

是的,這是有道理的。您只應刪除朋友關係狀態,而不是用戶/ 1或/ friends/3所代表的用戶,但只能刪除兩者之間的關係。如果您有用戶表和擁有user_1和user_2字段的朋友表,則只有朋友表應該受到影響。 – errata

+1

我一直以爲DELETE上的一個集合也刪除了鏈接的資源。那是我的錯......我覺得這太複雜了......現在只是一個簡單的答案,它使我的一切變得清晰。非常感謝!但是爲了完成這個:爲了移除鏈接資源本身,我必須讓所有朋友返回許多鏈接到用戶資源 - 然後在其中一個鏈接上調用DELETE,這實際上指向了特定的資源。我認爲這是正確的方法。非常感謝兄弟! –

0

我認爲DELETE api/v1/users/1/friends/3會被用來刪除用戶3,就像DELETE api/v1/users/1會被用來刪除用戶1一樣。

要刪除用戶3作爲用戶1的朋友,我將使用DELETE api/v1/users/1/friends並指定一個過濾器,以僅刪除ID爲3的朋友。

DELETE api/v1 /用戶/ 1 /沒有過濾器的朋友會刪除用戶1的所有朋友。

同樣要添加用戶1的朋友,我會使用PUT api/v1/users/1/friends並指定要添加的朋友的ID。