Lun*_*ayo 5 java api rest jersey
我目前正在为搜索查询实现一个 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;
}
Run Code Online (Sandbox Code Playgroud)
问题是如何改进上面的代码以避免多余的 if else(检查)子句并保持 DRY?我正在使用 Jersey JaxRS 2.0 实现 Web 服务
我会创建一种查找方法,而不是两种或更多。
它会接受一个对象。我认为 MongoDB 在这方面非常擅长。
因此,如果您搜索{用户名:“X”},它将为您提供所需的信息。如果您搜索{description: "Y"},它将为您提供所需的内容。另外,如果您搜索{用户名:“X”,描述:“Y”},它将为您提供所需的内容。
在 REST 中公开 POST 方法,它更加灵活,并且可以为您提供更多功能。让它接受 XML 或 JSON。如果它接受 JSON,您甚至可以轻松地将其传递给 MongoDB(事先进行一些验证检查等)。
所以我希望你明白我的意思。我会创建一种通用方法,而不是两种或多种方法。