假设我有一个" 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
,但这似乎不太优雅。
有什么建议吗?
答案 0 :(得分:6)
立即想到的解决方案是使用
GET /orders?category=pending HTTP/1.1
这适用于查询,应该可以在任何服务器上轻松实现。
资源的属性不应该用作url段,因为理想情况下,每个url段代表一个资源(或多个),而不是属性。我想你已经知道了,因为你自己说过了
这种方法的问题在于(非常非常罕见) 订单收到ID"待定" (或"确认"或 "已完成"),在这种情况下,URI / orders / pending变为 不明确的强>
如果您想根据属性的值过滤结果,可以使用网址中的查询。
另外,正如@mahemoff指出的那样
可以在此基础上进行构建,例如: ?category = pending& paid = true,and 你无法真正扩展/订购/挂起的网址样式以涵盖所有内容 可能的查询输入。