如果我们使用包含查询字符串组件的URL标识资源,它仍然是REST吗?

时间:2014-06-17 16:35:04

标签: rest uri

1)我假设URL的查询字符串组件也被视为资源身份的一部分?

2)如果它确实被认为是身份的一部分,那么有什么理由说明为什么在REST中我们不能/不应该使用包含<的URL来识别资源 em>查询字符串组件?

谢谢

2 个答案:

答案 0 :(得分:2)

如果您使用URL寻址的资源代表http://yourdomain.com/customers等资源的集合,那么使用查询参数过滤结果是一种有效的休息方式:

http://yourdomain.com/customers?minSalary=2000&maxAge=50

所以是的,查询参数对于识别资源是有意义的。

答案 1 :(得分:1)

我认为你的根问题是关于使用会返回唯一项的查询。

/orders?ID=8

的资源相同
/order/8

因此我们有两个相同资源的URI。你可能会问这是好的,拥有多个URI来获得相同的资源是完全没问题的。一般来说,你应该链接到更多的规范&#39; URI,最短的路径&#39; (分层次地说)资源。

您通常不应该依赖查询参数,因为它往往会导致API设计尴尬。例如,如果你想知道鲍勃所做的所有订单,你可能会想到&#34;好吧,我过滤订单&#34;

/orders?users=bob

在哪里,更好的思维方式是&#34;我想要所有用户,只是bob,只是他的订单&#34;,所以你宁愿做

/users/bob/orders

这是一个简单的URI,您可以从&#39;用户资源&#39;链接到该URI。对于鲍勃。可悲的是,当你想说,看看多个用户的订单时,第二种方法会有点尴尬

/users/jack,jill,alice,bob/orders

它可行,但很奇怪。