2014-09-26 169 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