仅提取具有items
特定值的attribute
时,以下哪个网址更符合RESTE ?
GET: /items/attribute/{value}
GET: /items/findByAttribute?attribute={value}
GET: /items?attribute={value}
请记住GET: /items
会返回所有项目。
示例
GET: /shirts/color/FF9900
GET: /shirts/findByColor?color=FF9900
GET: /shirts?color=FF9900
答案 0 :(得分:3)
URI语义与REST无关。询问哪个URI更RESTful是没有意义的。是什么使URI RESTful是客户端获取它的方式。如果他在文档中阅读URI模式并用值填充占位符,那么它不是RESTful。如果这对您来说是新闻,我建议您阅读this。
考虑到这一点,如果服务器将URI模板提供给客户端作为查询按该值过滤的集合资源的链接,则所有三个示例都可以是RESTful,但3绝对是最佳选择,因为它遵循更常规查询语法。我不会使用2,因为它暗示了一个方法调用,它看起来太过我的口味,而且我不会使用1,因为它意味着人类只会将属性作为资源返回。
答案 1 :(得分:3)
我认为最后一个选项是正确的;-)
以下是对其他人的一些评论:
/items/{itemid}/fieldname
。findByAttribute
中)。 HTTP方法应该对应于“action”本身。如果要支持HTTP方法的多个操作,请参阅此答案:How to Update a REST Resource Collection。否则我写了一篇关于设计Web API的方法的帖子。这可能对你有用。请看这个链接:https://templth.wordpress.com/2014/12/15/designing-a-web-api/。
希望它可以帮到你, 亨利
答案 2 :(得分:0)
肯定是这个
GET: /items?attribute={value}
为什么?
GET: /items/attribute/{value}
是错误的,因为使用REST,url段代表资源,属性不是资源
GET: /items/findByAttribute?attribute={value}
出于同样的原因是错误的。 findByAttribute不是资源
使用url查询按属性过滤非常好,所以请继续使用。