按属性重新获取

时间:2015-03-19 20:04:27

标签: rest

仅提取具有items特定值的attribute时,以下哪个网址更符合RESTE

  1. GET: /items/attribute/{value}

  2. GET: /items/findByAttribute?attribute={value}

  3. GET: /items?attribute={value}

  4. 请记住GET: /items会返回所有项目。


    示例

    1. GET: /shirts/color/FF9900

    2. GET: /shirts/findByColor?color=FF9900

    3. GET: /shirts?color=FF9900

3 个答案:

答案 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
  • 关于如何设计搜索过滤器有一个问题:How to desing RESTful advanced search/filter。我认为你的用例如果有点简单并且使用查询参数匹配你。

否则我写了一篇关于设计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查询按属性过滤非常好,所以请继续使用。