Rest API 最佳实践:多参数搜索过滤器 API 实现

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 服务

pet*_*rov 3

我会创建一种查找方法,而不是两种或更多。

它会接受一个对象。我认为 MongoDB 在这方面非常擅长。

因此,如果您搜索{用户名:“X”},它将为您提供所需的信息。如果您搜索{description: "Y"},它将为您提供所需的内容。另外,如果您搜索{用户名:“X”,描述:“Y”},它将为您提供所需的内容。

在 REST 中公开 POST 方法,它更加灵活,并且可以为您提供更多功能。让它接受 XML 或 JSON。如果它接受 JSON,您甚至可以轻松地将其传递给 MongoDB(事先进行一些验证检查等)。

所以我希望你明白我的意思。我会创建一种通用方法,而不是两种或多种方法。