2017-09-11 73 views
1

在我的系統中我有兩個資源packagesdebts,packages可以包含多個debts。現在我準備API來刪除packages資源,但我需要有兩種方法可供選擇:如何在我想刪除資源和子資源或只是資源時正確地創建rest api端點?

  • 刪除packages及相關debts - 畢竟這個動作被刪除的資源將在系統中不可見,

這裏,我,想簡單router.delete('/packages/:token')

  • 刪除packages但取消固定相關debts - 這個動作packages瓦特後生病將被刪除,但debts將被更新爲與已刪除軟件包的連接鬆動,並且debts將在系統中用於其他操作。

在這裏,我有問題,我想創建post端點與路徑的動作,像,router.post('/packages/:token/remove/unpin')的。但它可能不是最好的休息API。

我希望,這很清楚。感謝您的任何幫助/建議。

回答

0

所以閱讀本好貼http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api後,我決定這樣router.delete('/packages/:token/unpin')創建端點,這會告訴我需要刪除包,但unpin行動會給我一個提示,我需要取消固定債務前刪除軟件包。

在提後有不錯的部分我的問題:

什麼不適合CRUD操作的世界行動?

這是事情變得模糊的地方。有許多方法:

  1. 重組的動作看起來像一個資源的領域。如果該操作不帶參數,這將起作用。例如,激活動作可以映射到布爾激活字段,並通過PATCH更新到資源。
  2. 將其視爲具有RESTful原則的子資源。例如,GitHub的API可讓您用PUT /gists/:id/star和unstar與DELETE /gists/:id/star一起呈現主題。
  3. 有時你真的無法將動作映射到合理的RESTful結構。例如,多資源搜索對於應用於特定資源的端點沒有意義。在這種情況下,即使它不是資源,/search也是最有意義的。這沒什麼 - 只要從API消費者的角度做正確的事情,並確保它清楚記錄以避免混淆。