express.js CRUD的API端点最佳实践
我正在使用express.js构建REST API。express.js CRUD的API端点最佳实践
我的API需要提供所有终端进行的“用户” CRUD,所以我迄今如下:
app.get('/users', getAllUsers); // get all users
app.post('/users', createUser); // create a new user
app.put('/users', updateUser); // update a user
app.delete('/users', deleteUser); // delete a user
但什么好的做法端点获得单个用户?
那么理想,如果你上/users/1234
我应该只返回用户ID为1234但如果我只是做/users
为未检测到ID我应该返回的所有用户。
我如何修改我:
app.get('/users', getAllUsers);
处理这两种情况?
您可以创建一个更高级别的路由器,然后调用app.use()
/router.use()
就可以了。这是Express documentation中推荐的方法。
var express = require('express');
var app = express();
var usersRouter = express.Router();
usersRouter.get('/', function(req, res) {
res.send('Got all users');
});
usersRouter.get('/:id', function(req, res) {
res.send('Got user ' + req.params.id);
});
app.use('/users', usersRouter);
你不能,最好的做法是尽可能地隔离你的航线运营。有一个单一的ID,这样的路线只能得到这些数据。 示例。
var router = express.Router();
router.route('some/route/id/123').get(function(req,res){
console.log('id');
});
router.route('some/route/all').get(function(req,res){
console.log('all');
});
请问您的问题的下列说明是否合理? – Remario
您可以通过提供ID作为可选PARAM和检查,在控制器功能
对于如这样做。
app.get('/users/:id?', getAllUsers);
但我宁愿去与单一职责原则
app.get('/users', getAllUsers);
app.get('/users/:id', getUser);
我最终做了这样的事情。这是否会级联?即,如果我发送/ users/123,它会跳过/用户路由(getAllUsers),并且只打(getUser)。我换了它,并在我的getUser()方法,如果“ID”未定义我打电话next()..然后去getAllUsers() – newbreedofgeek
最好的答案在我看来,单一的责任和零散的代码,以保持更容易 –
我喜欢这个。这是最干净的解决方案。 – newbreedofgeek
@newbreedofgeek记得接受答案,如果它是解决您的问题的答案。 :) –