我有一個URI結構是分層的特定數據集:什麼是Restful URI設計來區分集合和單例資源?
/Blackboard/Requirement/{reqID}/Risk/{riskId}/MitigationPlan/{planId}
如果URL是在各種ID拆你可以得到特定的資源如:
GET: /Blackboard/Requirement/2/Risk/2
這得到風險# 2與需求#2相關聯
問題是:現在需要的功能是能夠在同一個HTTP請求中更新(PUT)和刪除(DELETE)一組需求。 (當您將HTTP GET發送到/Blackboard
URL時,整個'設置'需求是GET可用的 - 這是默認功能,因爲東西寫在黑板上,比喻)
因此,我應該創建一個新的集合資源URL僅支持PUT/DELETE這樣的:
/Blackboard/Requirements : HTTP PUT/DELETE
(注意是複數)
或實際上使現有的URL結構多
/Blackboard/Requirements/{reqID}/Risk/{riskId}/MitigationPlan/{planId}
後者似乎打破語義統一,因爲層次結構中的其他項目是單數。我應該讓他們複數呢?
是否具有項目ID有助於區分奇點(從人的角度來看:)等Blackboard/Requirements/1
或者是優選以暴露不同的資源(即,集合)純粹是爲了操作上的原因(由於GET也不是沒有ID允許 - 不論它是單數還是複數)?
只是想知道社區的意見,哪些方法通常選擇(或是正確的方式),以清晰度清潔設計。
公平點。在對這個問題進行深入研究之後,似乎_pluralization_就是要走的路。它的確提供了最簡潔的方式來回到集合資源,並且URI的每個部分都變得可用,例如:'/ Blackboard/Requirements/1/Risks'將返回與需求#1有關的所有風險。這也保證了它'很酷')唯一令我困惑的是''/ Blackboard/Requirements'與GET /'/ Blackboard'有什麼區別?擁有'/ Blackboard'的原因是可以存在多個黑板,並且可以獲取不同黑板上的'數據',這是要求的集合 – PhD
...因此,它只會導致頂部兩級的混淆點。該結構實際上是「/ ProjectName/BlackboardName/Requirements ...」,那麼在'/ Blackboard'上顯示的最合適的GET數據是什麼?會/應該與「/ Blackboard/Requirements」不同? – PhD
糾正我,如果我錯了,但我想你是說'Blackboard'是URL的用戶定義的一部分,像'/ Foo/BarBlackboard/Requirements/1'。在這種情況下,我對'/ Foo/BarBlackboard'和'/ Foo/BarBlackboard/Requirements'的描述不同,因爲需求實際上只是BarBlackboard的一部分。 BarBlackboard的一種可能表示形式是BarBlackboard不同方面的鏈接/ URL列表,例如「/ Foo/BarBlackboard/Requirements」鏈接,這樣客戶端就可以知道下一個路徑是什麼。 (很多評論,如果需要我可以添加回答)。 –