我目前正在为搜索查询实施Rest API。该方法采用多个过滤器参数,如关键字,名称,标题,描述,日期等。为了保持DRY并避免重复的if else子句,我正在寻找从数据库中检索资源的最佳实践方法。假设数据库公开了两个方法findByUsername(...)
和findByDescription()
,我们希望通过一个安静的Web界面公开它们。一个天真的实现将使用类似于下面的if和else子句。
@GET
@Path("users")
public User getUsers(@QueryParam("username") String username,
@QueryParam("description") String description) {
User user = null;
if (username != null) {
// execute findByUsername method to the database
user = findByUsername(username);
} else if (description != null) {
// execute findByDescription method to the database
user = findByDescription(description);
}
return user;
}
问题是如何改进上面的代码以避免冗余if else(检查)条款并保持DRY? 我正在使用Jersey JaxRS 2.0实现Web服务
答案 0 :(得分:3)
我会创建一个finder方法而不是两个或更多。
它会接受一个对象。 我认为MongoDB非常擅长这一点。
因此,如果您搜索{username:“X”},它将为您提供所需内容。 如果您搜索{description:“Y”},它将为您提供所需的信息。 此外,如果您搜索{username:“X”,说明:“Y”}, 它会给你你需要的东西。
在REST中展示POST方法,它更灵活,并为您提供更多。 使其接受XML或JSON。如果它接受JSON,您甚至可以轻松地将其传递给MongoDB(事先进行一些验证检查和所有这些)。
所以我希望你明白我的意思。 我会创建一个通用方法而不是两个或更多方法。