假设您有食谱资源,食谱可以有标签。那么你想获得所有配方中使用的所有标签的列表,URI是什么?
/recipes/tags
似乎它可能会起作用,但它打破了不指向特定ID的惯例,例如:
/recipes/1/tags
您也可以使用:
/tags
但我只想要食谱的标签而不是任何其他资源。那么我会使用查询参数,例如:
/tags?type-recipes
FTR,标签仅用于配方,而不是任何其他资源,因此使用查询参数似乎有误导性,因为除了食谱之外它永远不会是任何东西
答案 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