JSON API 设计-快递

JSON API design - express

我要写一篇JSONAPI.

我的问题是,有时我想查询 ID,有时想查询字符串。

一种选择是添加查询字符串,例如:

example.com/user/RandomName
example.com/user/1234556778898?id=true

并像这样使用它:

api.get('user/:input', function(req, res) {
  if(req.query.id) {
    User.find({ '_id': req.params.input }, cb);
  } else {
    User.find({ 'name': req.params.input }, cb);
  } 
};

但这对我来说似乎是不好的做法,因为它会导致一堆条件表达式。 还有更优雅的方式吗?

我建议处理两个端点。一种用于获取 ALL 个用户,另一种用于通过 ID 获取 SPECIFC 个用户。

  1. example.com/users
  2. example.com/users/:id

第二个终结点可用于按 ID 查找特定用户。

第一个端点可用于查找所有用户,但过滤器可应用于此端点。

例如:example.com/users?name=RandomName

通过这样做,您可以非常轻松地根据 URL 中的参数在您的节点服务中创建查询。

api.get('/users', function(req, res) {
    // generate the query object based on URL parameters
    var queryObject = {};
    for (var key in req.query) {
        queryObject[key] = req.query[key];
    }

    // find the users with the filter applied.
    User.find(queryObject, cb);
};  

通过这种方式构建端点,您将遵循 RESTful API 标准,这将使其他人很容易理解您的代码和您的 API。此外,您正在构建一个适应性强的 API,因为您现在可以通过将字段作为参数添加到 URL.

按任何字段过滤用户

有关何时使用路径参数与 URL 参数的更多信息,请参阅 this response