2012-01-24 70 views
5

我正在尝试为REST创建更高级的查询机制。假设我有以下内容:REST中的高级查询

GET /data/users 

并返回用户列表。然后筛选返回的用户例如我会说:

GET /data/users?age=30 

得到30岁的用户列表。现在可以说,我想30岁的用户 - 40.我想主要有一组可重用运营商,如:

GET /data/users?greaterThan(age)=30&lessThan(age)=40 

的GREATERTHAN和每种不超过将是对其他数字,日期可重复使用等领域。这也允许我添加其他运算符(包含,开始,结束等等)。我是REST noob,所以我不确定这是否违反了REST遵循的任何核心原则。有什么想法吗?

+0

MS Dynamics 2011平台做类似的oData接口。 http://msdn.microsoft.com/en-us/library/gg309461.aspx也许这会给你一些信息。 – user1231231412

+0

感谢您的链接,这对于看到像Microsoft这样的人是如何实现它非常有帮助。 – NorthFork

+0

感谢大家的反馈,这很有帮助。 – NorthFork

回答

1

或者,您可能会更好地使用可选参数“minAge”和“maxAge”。

方案2:对编码参数值(S),以表明测试进行到:不平等,模式匹配等

这会混乱,无论你对复杂的布尔表达式做什么。在某些时候,你几乎想为查询描述本身制作文档格式,但很难将其视为“GET”。

1

我会考虑设置查询参数的值,包括运营商和这样的..这样的一个范围值

/data/users?age=[30,40] 

/data/users?age=>30&age=<40 

将使语法更容易阅读,只要确保URL编码,如果您使用任何保留字符