在数据库中,假设我有许多人的姓名和出生日期,我想知道20岁以上人员的姓名。我可以使用这样的东西:
http://www.example.com/people?age=over20
在这种情况下,路由器会将此uri附加到人员资源类。 是否有任何函数可以解析uri并获得所需的请求(在此示例中,年龄> 20)?或者我应该编写自己的函数吗?
另一个问题,在这个例子中,查询(年龄> 20)很简单,所以它可以包含在uri中,如果我有复杂的查询(两个表之间的联合..etc)怎么办?我应该将查询放在xml文件中并将其发送到服务器吗?
答案 0 :(得分:4)
是否有任何函数可以解析uri并获得所需的请求(在此示例中,年龄> 20)?
是的,有解析查询字符串的函数。在这种特殊情况下,使用Restlet,您可以通过以下方式获取资源中的值:getRequest()。getResourceRef()。getQueryAsForm()。getFirst("age")。getValue() ==“ over20"
也可能有其他方式(也许它在Restlet 2.0中得到了改进),但是我的经验是,Restlet,至少是非常有条理和冗长的。我已经转移到JAX-RS和Jersey来创建我的资源,因为它只需要几个注释就可以完成很多相同的操作。 (在本例中为@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或其他方法来实现此目的。