2014-10-27 67 views
2

假设我有一个“订单”的集合。 (a)订单分为三类:“待定”,“确认”,“已完成”。REST API:嵌套URI可以与ID通过查找共存吗?

(b)中自然地,订单可以通过ID

最初我认为这URI方案的抬头:

对于(A):

  • GET /orders/:id

对于(b):

  • GET /orders/pending
  • GET /orders/confirmed
  • GET /orders/completed

这种方法的问题是,有一个(非常非常罕见的)机会,订单将收到的ID为“待定”(或“证实”或“已完成“),在这种情况下,URI /orders/pending变得不明确。

另一种选择是使用:GET /orders_pending但这看起来不太优雅。

有什么建议吗?

回答

6

立即浮现在脑海中的溶液中使用

GET /orders?category=pending HTTP/1.1 

这工作与查询,应该很容易在任何服务器上实现。

不应将资源的属性用作网址段,因为理想情况下,每个网址段代表资源(或多个),而不是属性。我想你已经知道,因为你自己说的

这种方法的问题是,有一个(非常非常罕见) 机会,订单将收到的ID为“待定”(或“证实”或 “completed”),在这种情况下,URI/orders/pending变成 不明确的

如果您想根据属性的值过滤结果,那么在url中使用查询是一种方法。

此外,作为@mahemoff指出

有可能扩大战果,例如?category = pending & paid = true,并且 您无法真正扩展/订购/挂起样式的URL以覆盖所有 可能的查询输入。

+2

这是一个很好的答案,因为要求是简单的'/ orders'搜索/过滤器,是所有订单的列表。有可能在此基础上,例如?category = pending&paid = true,并且您无法真正扩展/排序/暂挂URL的样式以覆盖所有可能的查询输入。 – mahemoff 2014-10-27 09:12:44

+1

@mahemoff关于扩展的好处,生病添加:-) – 2014-10-27 09:13:34

相关问题