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

问题描述 投票:0回答:3

如何设计 RESTful 查询来支持参数之间的 OR 操作数? 假设我的资源有两个字段,field1field2。您将如何设计 URL 来启用以下查询?

“获取我的资源,其中 field1=x OR field2=y”

在 REST 中设计查询非常简单,但我只见过支持查询字段之间 AND 的查询。例如,/myresource?field1=x&field2=y

一个可能的解决方案是提供带有自由文本 where 部分的单个查询参数,例如:

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

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

你有什么建议?

rest
3个回答
13
投票

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

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

如果你想默认为AND关系(合理),你想要的任何其他扩展当然是可能的。


4
投票

就其价值而言,SO 使用以下格式来查找具有多个标签的问题:

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

假设这些字符对于标签本身来说不是有效字符,那么用

,
;
分隔它们是完全合理的。搜索引擎通常使用
q=keyword1+keyword2
并对关键字本身中的任何
+
进行 url 编码,如果这是用于搜索 URI,我建议您这样做。


1
投票

这取决于

如果您希望您的资源始终通过条件 1 或条件 2 进行访问,您可以这样对待它们...

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

如果您想要更灵活的方法( cond1 和 cond2 或 cond3 ),我看不到其他选择,只能用自由文本实现您自己的查询,就像您所说的...

另一方面,如果您总是查询同一字段(我认为情况并非如此,因为您指定了 field1、field2),您可以使用 allemb 的方法,只需使用一些字符(“,”或“;”)即可单独的值...

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

field1 = val1..val2(val1 和 val2 之间的 field1) 字段 1 = > 值 2 (字段 1 > 值 2) field1 = val1;val2 (field1 = val1 或 field1 = val2 ) fields1 = val1 ( field1 包含 val1 )

field1 = val1..val2&>val3 (field1 位于 val1 和 val2 之间且 field1 > val3...

好吧,你明白了

但是然后我将每个条件与 and 结合起来,所以这只是 aleemb 所说的扩展示例......

© www.soinside.com 2019 - 2024. All rights reserved.