2009-01-30 91 views
10

您将如何设计RESTful查询以支持参数之间的OR操作数。 假设我的资源有两个字段field1 & field2。你会如何设计的URL,以使下面的查询:RESTful URL设计 - 如何使用参数之间的OR进行查询

“获取为MyResources其中字段1 = X或场= Y”

设计查询在REST是相当直接的,但我只看到查询,支持AND在查询字段之间。例如/ myresource FIELD1 = X & FIELD2 = Y

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

GET/myresource Q = {FIELD1 = x或FIELD2 = y}

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

你有什么建议?

回答

10

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

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

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

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,那么我建议您执行此操作。

1

这取决于

,如果你希望你的资源与八方来条件1访问或CONDITION2你可以只是把他们的方式......

,但如果你想有两种可能性(使用AND或OR )你将不得不实施类似annakata说的一个参数,指示应该如何将条件添加到查询中...

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

另一方面,如果你总是查询同一个字段(我认为情况并非如此,因为你指定了field1,field2),你可以使用allemb的方法,并使用一些字符(“,”或“;” )亲自分隔值...

,我已经开发了某种微小的查询语言,如

字段1 = VAL1 ..VAL2(VAL1之间FIELD1和val2) FIELD1 => val2的(FIELD1> val2次) FIELD1 = VAL1; val2的(FIELD1 = VAL1或FIELD1 = val2次) filed1 = VAL1(Field1包含VAL1)

FIELD1 = val1..val2 &> VAL3(VAL1和val2和字段1> VAL3之间字段1 ...

好,你的想法

但后来我每隔结合使用条件和,所以这只是一个扩展案例waht aleemb说...