多个 get API in MEAN.IO (Express, Angular)
Multiple get API in MEAN.IO (Express, Angular)
在传统的 REST API 中,我们应该这样定义 API:
- GET /api/things -> 获取全部
- POST /api/things -> 创建
- GET /api/things/:id -> 得到一个
- PUT /api/things/:id -> 更新
- 删除 /api/things/:id -> 删除
我应该如何定义另一个 'get one' 端点以通过 id 以外的任何其他字段查询数据?例如:
GET /api/things/:title -> 按标题获取(这肯定行不通,因为 api 不知道 URL 参数名称)
获取 /api/things/title/:title ?这对我根本不起作用..
GET /api/things?title=whatever(这根本无法定义。当我在我的index.js中写这个时:
router.get('?title=whatever', controller.getByTitle);
我明白了:
SyntaxError: Invalid regular expression: /^?title=whatever\/?$/: Nothing to repeat
at RegExp (native)
ID 应该是唯一标识符。给定一个 ID,您最多应该 return 一个资源。这就是为什么像 GET /api/things/:id
这样的 URI 有意义。
对于可能唯一也可能不唯一的其他属性,您可以有多个结果,因此使用 GET /api/things
端点并传递查询参数:/api/things?title=mytitle
.
app.get('/api/things', function (req, res) {
console.log(req.query.title); //mytitle
ThingModel.find({
title: req.query.title
}, function (err, things) {
res.send(things);
});
});
在传统的 REST API 中,我们应该这样定义 API:
- GET /api/things -> 获取全部
- POST /api/things -> 创建
- GET /api/things/:id -> 得到一个
- PUT /api/things/:id -> 更新
- 删除 /api/things/:id -> 删除
我应该如何定义另一个 'get one' 端点以通过 id 以外的任何其他字段查询数据?例如:
GET /api/things/:title -> 按标题获取(这肯定行不通,因为 api 不知道 URL 参数名称)
获取 /api/things/title/:title ?这对我根本不起作用..
GET /api/things?title=whatever(这根本无法定义。当我在我的index.js中写这个时:
router.get('?title=whatever', controller.getByTitle);
我明白了:
SyntaxError: Invalid regular expression: /^?title=whatever\/?$/: Nothing to repeat
at RegExp (native)
ID 应该是唯一标识符。给定一个 ID,您最多应该 return 一个资源。这就是为什么像 GET /api/things/:id
这样的 URI 有意义。
对于可能唯一也可能不唯一的其他属性,您可以有多个结果,因此使用 GET /api/things
端点并传递查询参数:/api/things?title=mytitle
.
app.get('/api/things', function (req, res) {
console.log(req.query.title); //mytitle
ThingModel.find({
title: req.query.title
}, function (err, things) {
res.send(things);
});
});