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

时间:2013-12-05 22:14:03

标签: 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;
}

问题是如何改进上面的代码以避免冗余if else(检查)条款并保持DRY? 我正在使用Jersey JaxRS 2.0实现Web服务

1 个答案:

答案 0 :(得分:3)

我会创建一个finder方法而不是两个或更多。

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

因此,如果您搜索{username:“X”},它将为您提供所需内容。 如果您搜索{description:“Y”},它将为您提供所需的信息。 此外,如果您搜索{username:“X”,说明:“Y”}, 它会给你你需要的东西。

在REST中展示POST方法,它更灵活,并为您提供更多。 使其接受XML或JSON。如果它接受JSON,您甚至可以轻松地将其传递给MongoDB(事先进行一些验证检查和所有这些)。

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