Restlet:使用访问多个资源的查询来获取请求

时间:2011-06-19 10:35:18

标签: java get restlet

在数据库中,假设我有许多人的姓名和出生日期,我想知道20岁以上人员的姓名。我可以使用这样的东西:

http://www.example.com/people?age=over20

在这种情况下,路由器会将此uri附加到人员资源类。 是否有任何函数可以解析uri并获得所需的请求(在此示例中,年龄> 20)?或者我应该编写自己的函数吗?

另一个问题,在这个例子中,查询(年龄> 20)很简单,所以它可以包含在uri中,如果我有复杂的查询(两个表之间的联合..etc)怎么办?我应该将查询放在xml文件中并将其发送到服务器吗?

1 个答案:

答案 0 :(得分:4)

  

是否有任何函数可以解析uri并获得所需的请求(在此示例中,年龄> 20)?

是的,有解析查询字符串的函数。在这种特殊情况下,使用Restlet,您可以通过以下方式获取资源中的值:getRequest()getResourceRef()getQueryAsForm()getFirst("age")getValue() ==“ over20"

也可能有其他方式(也许它在Restlet 2.0中得到了改进),但是我的经验是,Restlet,至少是非常有条理和冗长的。我已经转移到JAX-RSJersey来创建我的资源,因为它只需要几个注释就可以完成很多相同的操作。 (在本例中为@QueryParam("age")。)您可以考虑使用键的上/下部分而不是值,以便您可以更轻松地解析字符串并构建查询。这个想法是尝试处理之间的区别: http://www.example.com/people?age=over20&age=under30

与处理:http://www.example.com/people?ageAtLeast=20&ageAtMost=30

  

另一个问题,在这个例子中,查询(年龄> 20)很简单,所以它可以包含在uri中,如果我有复杂的查询(两个表之间的联合..etc)会怎么样?

在这里,我建议寻找有关Restful URI设计的讨论。理想情况下,不同的实体将是不同的uri路径,并且它们的关系将通过您的URL显而易见。例如,有一个高度投票的问题:RESTful URL design for search

  

我应该将查询放在xml文件中并将其发送到服务器吗?

从技术上讲,这是一个潜在的选择,但如果可能的话我会尽量避免。它非常钝,特别是对于简单的GET。 (另请注意,虽然technically not forbidden,但GET上的实体主体不是标准的,并且有许多产品无法正确处理它,因此您最终会滥用POST或其他方法来实现此目的。