什么是资源标签的最佳RESTful uri

时间:2014-04-21 16:19:02

标签: rest uri

假设您有食谱资源,食谱可以有标签。那么你想获得所有配方中使用的所有标签的列表,URI是什么?

/recipes/tags

似乎它可能会起作用,但它打破了不指向特定ID的惯例,例如:

/recipes/1/tags

您也可以使用:

/tags

但我只想要食谱的标签而不是任何其他资源。那么我会使用查询参数,例如:

/tags?type-recipes

FTR,标签仅用于配方,而不是任何其他资源,因此使用查询参数似乎有误导性,因为除了食谱之外它永远不会是任何东西

1 个答案:

答案 0 :(得分:1)

过滤器很棘手 - 尤其是当您的过滤器也是资源时。

你是正确的/食谱/标签是有问题的。你从/ resouce / {resouceId}的路径变量转到/ resource / {filter},这可以打开一整个痛苦的话。

因此,对于您的第一个示例,请选择类似

的内容
 /recipes?tags={tags to filter on}
 Returns a list of Recipes based on the tag

问题是你没有任何可接受标签的查找方法。我希望/ tags返回一个标签列表,然后像这样使用它

 /tags
 Returns a list of all tags

 /tags/{tagID}
 Returns meta data about the specific tag (what the tag is used for, which is superfluous in this case if you only have recipe tags, but it is more flexible)

 /tags/{tagID}/recipes
 Returns a list of recipes associated with that ID.

然后你必须决定是否要支持这样的链接资源

 /tags/eggs/recipes/1
 Recipe details 

这仍然与

相同
/recipes/1 

将它们链接起来是可以接受的 - 如果食谱/ 2中没有任何鸡蛋并且您尝试使用/ tags / eggs / recipes / 2