如何设计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}
但这会使客户端解析和扩展或减少过滤字段变得更加复杂。
你有什么建议?
答案 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说...