RESTful URL设计 - 如何使用参数之间的OR进行查询

时间:2009-01-30 12:59:32

标签: rest

如何设计RESTful查询以支持参数之间的OR操作数。 假设我的资源有两个字段field1&域2。您将如何设计URL以启用以下查询:

“获取myresources where field1 = x OR field2 = y”

在REST中设计查询非常简单,但我只看到了在查询字段之间支持AND的查询。例如/ myresource FIELD1 = X&安培; FIELD2 = Y

一种可能的解决方案是提供单个查询参数,其中包含自由文本部分,例如:

GET / myresource?q = {field1 = x OR field2 = y}

但这会使客户端解析和扩展或减少过滤字段变得更加复杂。

你有什么建议?

3 个答案:

答案 0 :(得分:11)

查询参数不是定义和相关的,它们只是惰性参数 - 你如何处理它们取决于你。对于OR搜索,我建议:

GET /myresources?field1=x&field2=y&inclusive=true

如果您希望默认为AND关系(合理),您当然可以使用任何其他扩展名。

答案 1 :(得分:2)

为了它的价值,SO使用以下格式来查找具有多个标签的问题:

http://stackoverflow.com/questions/tagged?tagnames=jquery or css or asp.net or php or web-development or svn

将它们与,;分开是完全合理的,假设它们不是标记本身的有效字符。搜索引擎通常使用q=keyword1+keyword2并对关键字本身中的任何+进行网址编码,如果是搜索URI,我建议您这样做。

答案 2 :(得分:1)

取决于

如果您希望您的资源可以通过条件1或条件2来访问,那么您可以这样对待它们......

但是如果你想要两种可能性(使用AND或OR)你必须实现类似annakata所说的一个参数,这个参数指示如何将条件添加到que查询...

如果你想有更灵活的方法(cond1和cond2或cond3),除了用自由文本实现你自己的查询之外别无选择,就像你说的那样...

另一方面,如果你总是在查询同一个字段(我认为不是因为你指定了field1,field2),你可以使用allemb的方法,只使用一些字符(“,”或“;” )分离价值......

个人而言,我开发了某种微查询语言,比如

field1 = val1..val2(val1和val2之间的field1) field1 => val2(field1> val2) field1 = val1; val2(field1 = val1或field1 = val2) filed1 = val1 (field1包含val1)

field1 = val1..val2&> val3(val1和val2之间的field1以及field1> val3 ...

嗯,你明白了

然后我将每个条件与和结合起来,所以这只是一个扩展的例子,说明了aleemb说...