[英]REST parent id in URI
假設我的模型由一個Parent
實體組成,該實體通過children
屬性引用一些Child
實體。 根據REST原則,特定Child
的URI的路徑段將是/parent/{parentId}/children/{childId}
。
對Child
執行更新操作時,通常只需要childId
就可以唯一地標識正確的Child
,從而認為路徑中的parentId
段是多余的。 隨着層次結構變得復雜,這種冗余會加劇。
現在我想到了它,它也可能導致意外行為:如果程序員不知道,訪問具有相同childId
但具有不同 parentId
URI可能會導致相同的行為。 在不相關的Parent
下訪問Child
時可能發生的情況是應該返回客戶端錯誤代碼。
目前我認為可能沒有應該向REST API引入層次結構,除非它非常直觀,因為它:
有沒有辦法逃避這種冗余並仍然符合REST原則?
是的,只需像這樣構建你的網址......
/children/{childId}
由於您可以從服務器端的子項推斷父項,因此沒有理由在URL中聲明它。 在絕對需要時,您應該只在URL中放置多個資源。 例如,用戶對評論進行投票。 由於在數據庫方面沒有正式的方法來確定,你可以創建一個類似的URL。
/voter/{userId}/comment/{commentId}/upvote
對我來說,這個問題的答案將由數據建模驅動,對於數據建模,如果他使用復合鍵,那么問題是“使用復合鍵是否為子模型”,因此如果不是,則必須將父ID放在URI中。 child有自己的id,它不是復合的,所以你只能使用帶有child id的URL。
所以這是數據建模問題!!!
由於REST指的是資源,因此它們不一定必須是分層的。
在類似的API中,我有章節,類別和文章。 當然,其中每個都在另一個之下,但在REST中我將它們指定為section / {id}&article / {id}。 它們仍然是指向各個資源的鏈接 - 但由於它們可以獨立於其父級,因此在URI中指定層次結構並不重要。
如果您肯定要在URI中指定層次結構,則應檢查以確保父項是子項的父項,並在其他方面拋出錯誤 - 以保持層次結構的完整性。
TL; DR
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.