如何为 RESTful API 实现查询字符串参数

Posted

技术标签:

【中文标题】如何为 RESTful API 实现查询字符串参数【英文标题】:How to implement query string parameters for RESTful APIs 【发布时间】:2018-04-14 16:08:52 【问题描述】:

我是 RESTful API 的新手,我已经成功地为我的 API 实现了 GET 和 DELETE 命令(POST 上的 GET localhost:4000/api,DELETE localhost:4000/api 工作正常)。

我的 get 代码如下:

router.get('/', function(req, res) 
    user.find(, function(err, users) 
        if(err)
            res.status(404).send(
                message: err,
                data: []
            );
         else 
            res.status(200).send(
                message: 'OK',
                data: users
            );
        
    );
);

现在我想使用参数来实现。例如,我想实现排序之类的东西

http://localhost/4000/api/users?sort="name": 1 (1- 升序;-1 - 降序)

表示按升序对名称进行排序。

我不知道该怎么做:

    如何使 ?sort 工作?

    如何选择要排序的字段?

请帮忙!

【问题讨论】:

【参考方案1】:

你只能传递 order(asc, desc),如果你想按名字排序你可以这样做 http://localhost/4000/api/users?order=-1 要么 http://localhost/4000/api/users?&order=1

然后在你的控制器中

router.get('/', function(req, res) 
  let order = req.query.order;
  user
   .find()
   .sort("name": order) 
   .exec(function(err, users) 
      if(err)
          res.status(404).send(
              message: err,
              data: []
          );
       else 
          res.status(200).send(
              message: 'OK',
              data: users
          );
      
  );

);

如果您将 mongoose.js 用于 mongodb,这些工作将有效

【讨论】:

非常感谢!这有帮助。您能否告诉我如何返回包含“名称”字段的数据列表?例如localhost:4000/api/users?select="name": 1(1 表示包含,0 表示排除) ***.com/questions/14559200/… 这是如何在数据库调用中排除字段。 localhost:4000/api/users?exclude=-1 像这样传递参数并从 req.query.exclude 中获取。然后通过猫鼬【参考方案2】:

我经常使用的一个很酷的解决方案是以下表格

/api/users?sort=-name|+firstname

我使用| 进行多字段排序,- 用于desc+ 用于asc

快递:

const  sort  = req.query; // sort = '-name|+firstname';
const order = sort.split('|') // will return an array ['-name', '+firstname']
 .reduce((order, item) => 
   const direction = item.charAt(0) === '-' ? -1 : 1;
   const field = item.substr(1);
   order[field] = direction;

   return order;
, )

// order 'name': -1, 'firstname': 1

 users.find().sort(order); // do your logic

【讨论】:

以上是关于如何为 RESTful API 实现查询字符串参数的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot实现Restful service前后端数据交互篇

如何设计一个restful风格的API

如何为以下语句编写标准构建器 API JPA 查询

如何为PrimeFaces资源隐藏“ln”和“v”实现/版本相关参数

Microsoft Web API 帮助页面 - 如何为参数创建注释

Django 和 Restful API