REST API:嵌套URI可以与ID共存吗?

时间:2014-10-27 09:00:31

标签: rest http

假设我有一个" Orders"的集合。

(a)订单分为三类:"待定","已确认","已完成"。

(b)当然,可以通过ID

查找订单

最初我想到了这个URI方案:

对于(a):

  • GET /orders/:id

对于(b):

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

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

另一种选择是使用:GET /orders_pending,但这似乎不太优雅。

有什么建议吗?

1 个答案:

答案 0 :(得分:6)

立即想到的解决方案是使用

GET /orders?category=pending HTTP/1.1

这适用于查询,应该可以在任何服务器上轻松实现。

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

  

这种方法的问题在于(非常非常罕见)   订单收到ID"待定" (或"确认"或   "已完成"),在这种情况下,URI / orders / pending变为   不明确的

如果您想根据属性的值过滤结果,可以使用网址中的查询。

另外,正如@mahemoff指出的那样

  

可以在此基础上进行构建,例如: ?category = pending& paid = true,and   你无法真正扩展/订购/挂起的网址样式以涵盖所有内容   可能的查询输入。