在我的資源模型中,我有一個「訂閱」資源。它會經歷生命週期狀態,如「取消訂閱」 - >「訂閱待處理」 - >「訂閱」 - >「取消訂閱待處理」 - >「取消訂閱」。發佈到控制器資源 - 控制器的ID是控制器URI還是POST參數的一部分?
爲了允許客戶訂閱或取消訂閱訂閱,我打算公開兩個控制器資源(稱爲「sub」和「unsub」)用於訂閱/取消訂閱訂閱,每個接受POST請求將同步放置目標訂閱資源轉換爲適當的「等待」狀態,並異步執行額外的工作以將訂閱置入「訂閱」或「未訂閱」狀態。
我可以想到幾種方法讓客戶端在向「sub」或「unsub」發出POST請求時指定目標訂閱。我可以把目標預訂ID爲URI,就像這樣:
/訂閱/ {subscription_id} /子 也許 /子/ {subscription_id}
[注:在URI露出訂閱ID不會出現安全問題,我的應用程序]
或者,我可以讓訂閱ID的POST參數去:
/子
思考哪種方法最好?如果你更喜歡URI方式,你更喜歡哪種URI風格,爲什麼?
注意:已取消訂閱的訂閱隨後可能會重新訂閱,因此「取消訂閱」操作不等同於刪除訂閱資源。
感謝您的反饋意見。關於術語「訂戶」的含糊不清的好處;我會重新考慮這個名字。關於您的要點:對於我的應用程序,取消訂閱不是刪除 - 訂閱在理論上可以在未來重新訂閱。我沒有提到這個問題。我最初認爲要將「action = subscribe」或「action = unsubscribe」這樣的表單參數傳遞給訂閱資源,但從我讀到的內容來看,這相當於隧道,這讓人望而卻步。這就是我帶領兩個控制器資源的方向。 – 2012-03-13 18:18:08
注意:我更新了原始問題以重命名控制器資源,並澄清取消訂閱!=刪除。 – 2012-03-14 12:45:54
爲了響應您的編輯:在我的應用中,訂閱通過POST創建到訂閱集合。在預訂操作的訂閱資源上使用POST和取消訂閱操作的PUT似乎不一致;兩者的動詞似乎都是可取的。我使用PUT來更改訂閱的狀態(不包括生命週期狀態),例如改變名字。然而,我認爲訂閱/取消訂閱是作爲操作而不是狀態改變(儘管狀態受到影響),所以我傾向於POST,但是試圖避免隧道,因此控制器資源。 – 2012-03-14 16:53:06