按属性 RESTful 获取

eve*_*sor 6 rest

在仅获取具有特定值的URL时,以下哪个 URL 更符合RESTful ?itemsattribute

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

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

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

请记住,GET: /items返回所有项目。


例子

  1. GET: /shirts/color/FF9900

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

  3. GET: /shirts?color=FF9900

Thi*_*ier 8

我认为最后一个选项是正确的 ;-)

以下是对其他人的一些评论:

  • 通常,与列表资源对应的路径元素之后的路径元素是元素的标识符。因此,如果您在此级别使用某些东西,则可以将其视为标识符......
  • 您可以拥有管理特定字段的资源,但 URL 类似于/items/{itemid}/fieldname.
  • 您不应该在 URL 中使用“操作名称”(在您的示例中findByAttribute)。HTTP 方法应该对应于“动作”本身。如果您想支持 HTTP 方法的多个操作,请参阅此答案:如何更新 REST 资源集合
  • 有一个关于如何设计搜索过滤器的问题:How to desing RESTful advanced search/filter。我认为你的用例如果有点简单并且使用查询参数适合你。

否则我写了一篇关于设计 Web API 的方法的文章。这可能对你有用。请参阅此链接:https : //templth.wordpress.com/2014/12/15/designing-a-web-api/

希望对你有帮助,蒂埃里


Tim*_*Tim 5

最肯定的是这个

GET: /items?attribute={value}
Run Code Online (Sandbox Code Playgroud)

为什么?

GET: /items/attribute/{value} 错误,因为使用 REST,url 段代表资源,属性不是资源

GET: /items/findByAttribute?attribute={value}出于同样的原因确实是错误的。findByAttribute 不是资源

使用 url 查询按属性过滤非常好,所以就这样吧。


Ped*_*eck 5

URI 语义与 REST 无关。询问哪个 URI 更 RESTful 是没有意义的。URI 是否为 REST 取决于客户端如何获取它。如果他正在阅读文档中的 URI 模式并用值填充占位符,那么它就不是 RESTful。如果这对您来说是新闻,我建议您阅读此内容

考虑到这一点,如果服务器向客户端提供 URI 模板作为查询按该值过滤的集合资源的链接,则所有三个示例都可以是 RESTful,但 3 绝对是最佳选择,因为它遵循更传统的查询语法。我不会使用 2,因为它意味着一个方法调用,而且它看起来太 RPC 不符合我的口味;我也不会使用 1,因为它对于人类来说意味着它将仅返回属性作为资源。