我正在嘗試爲應用程序編寫REST接口。rest:修改與資源關聯的資源的順序
示範
在這個應用程序的模型我已經有類似下面的情況:
- 一個人可以有多個活動。
- 一個活動可以由幾個人引用。
- 人們的活動是與一個特定的領域(職位)排序。
我在我的數據庫中用三個表格表示了這種情況:people,activities,people_activities。表people_activities具有三個字段:person_id,activity_id,position。
了新的要求
一切工作細到現在爲止,但現在我已經有了一個新的要求,我應該能夠插入一個活動的其他人之上的人。
因此,如果people_activities表的內容比如這一個:
「標記閱讀0」 「標記運行1」
如果我收到添加「標記雜耍」的結果的請求應該是:
「標記雜耍0」 「標記讀數1」 「標記運行2」
的溶液
的REST接口的困境,現在來自於事實,我確定只有兩個選擇:使用像/人/標記/ addActivity單個URL
- 但這似乎寧靜根本不會因爲它會修改未由URL引用的資源並且太多地包含「動詞」。
- 使用我已經使用的一些URL(類似於/ people/mark/activities或/ people_activities?person = mark),並將新改變發佈到所有這些資源。這似乎是寧靜的,但在我看來很sl sl。
在您看來,處理這種情況的正確方法是什麼?我沒有考慮第三種選擇嗎?
首先編輯
就約我意識到另一個合理的解決辦法是這樣的情況在數據庫中結束的問題想好:
「標記雜耍-1」 「標記讀數0「 」標記運行1「
因爲位置只是一個數字,對我來說沒有」真實「值。在實踐中,我無法做到這一點,但它看起來像是一種寶貴的信息,也是一種添加新資源而不修改其他關聯的方式,這不是我從業務邏輯角度所要做的。
也許另一個錯誤是,我讓我的界面上溢出大量數據庫數據。在這種情況下,我從商業角度真正需要的是元素的順序,而不是它們的位置。位置是我在數據庫中用來完成排序的技術細節。
那麼另一個問題也許:
- 是在您看來合理的修改一些信息在數據庫中,如果該信息僅僅是一個技術細節,它不是暴露在接口的用戶?
我可能會這樣做的方式是'/ people/mark/activities'上的'POST'。但這不是你的選擇之一:D – cheesemacfly
我只是不相信這是一個非常好的選擇。如果這是完成我想要做的最好的方法,那就沒問題。 – heapOverflow