2014-09-26 165 views
1

假設我有兩個資源:購物車和物品。項目可以嵌套在購物車或可以不這樣說:REST和嵌套資源

/carts/32658/items/screwdriver 

/items/screwdriver 

是否在購物車,而不是在車中的同一項目在REST約定不同的資源?

+2

你有沒有諮詢類似的問題,如[那一個](http://stackoverflow.com/questions/25872501)? – 2014-09-26 08:54:42

回答

1

正如其他答案和評論所暗示的,當多個URI到一個資源並且different sourcesSO answers這樣說時,沒有REST違規。

服務套件中的每個資源將具有至少一個標識它的URI。

但是我會重新考慮是否允許第二個資源鏈接上的所有HTTP方法。鑑於/carts/32658/items/screwdriver它可能不好允許PUT,因爲客戶可能會認爲他們只會更改購物車#32658螺絲刀而不是全球screwdiver實體。

1

如果您在談論相同的螺絲刀,那麼他們是相同的資源。一個資源可能有多個URL。在這種情況下,其中一個被選爲官方網址,名爲Canonical URL。官方螺絲刀網址可能是/items/screwdriver,客戶可能會得到關於它的完整信息。

+0

即在我的'carts/32658/items /'資源中,我將其鏈接到'/ items/screwdriver'資源,其中包含關於item的完整信息,並且'/ carts/32658/items/screwdriver'應該被禁用? – 2014-09-26 07:56:45

+1

不,你不應該禁用'/ carts/32658/items/screwdriver'。 '/ carts/32658/items/screwdriver'和'/ items/screwdriver'都是相同資源的URL。他們可能會給你相同的信息(或可能不)和相同的表示形式(一個XML和另一個JSON)。他們都談論同樣的事情(資源) - 螺絲刀。如果你想標記一些URL爲官方,你可以在'/ carts/32658/items/screwdriver'中添加'Content- 位置標頭',指向'規範'/ items/screwdriver'。因此,你在說螺絲刀的官方網址是'/ items/screwdriver'。 – nikita 2014-09-26 08:11:58