如果我想在REST中实现复杂的查询,该怎么办?

时间:2010-01-17 08:20:29

标签: rest

我想实现一个REST服务,它能够解析查询,例如检索在startdate之后和endate之前创建的用户以及admin的特权。似乎标准REST实现只能通过ID进行查询。我是否需要自定义协议才能使这种查询成为可能或任何标准?

谢谢!

5 个答案:

答案 0 :(得分:3)

REST中没有约束表明您只能通过ID进行查询。使用一组查询参数返回一组符合这些搜索条件的用户绝对没有错。

答案 1 :(得分:1)

看看Google's GDATA Protocol。它非常 RESTful ,它们有一种非常好的方式来执行“复杂”查询,同时仍然保持一个干净的URI。

http://code.google.com/apis/gdata/docs/2.0/reference.html#Queries

以下是其干净查询URI

的示例
http://example.com/jo/-/Fritz/2006

而不是

http://example.com/jo?category=Fritz&category=2006

来自Google:

  

此方法在不使用查询参数的情况下标识资源,并生成更清晰的URI。我们选择这种方法用于类别,因为我们认为类别查询将是最常见的查询。

答案 2 :(得分:0)

就我而言 - 宁静的东西对CRUD行为有效。您可以实现单独的search方法/网址,并根据需要将其传递给多个参数。如果您仍然尝试遵循REST方法 - 您应该使用GET请求类型。

答案 3 :(得分:0)

Ryan Bates有一个Railscast,他将搜索创建为资源。即使你没有做Rails,这个概念仍然有效。

http://railscasts.com/episodes/111-advanced-search-form

答案 4 :(得分:0)

我将django的字段查找语义作为复杂查找的指南。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#id4

不要被它定义为特定于语言的api这一事实所牵制,它很容易转换为html查询参数。

一个例子是http://example.com/Goods?category=fruit&size__lt=14

要在sql中获取select * from goods where category = 'fruit' and size < 14或在xpath中获取/goods[@category='fruit' and @size < 14]的结果,或者其他任何内容。