我正在开发一个移动应用程序,后端在Node.js.用户几乎只能通过移动应用程序与平台进行交互。作为后端的一部分,我公开了移动应用程序使用的多个API - 例如:用于创建帐户,发送消息,发布图片等的API。
验证API输入的最佳做法是什么?
我的想法是为每个API创建一个模块,其目的是从http请求中提取,清理和验证相关属性。例如,“创建帐户”API将具有关联的AccountCreationRequest
模块,其中validate
方法将定义所有特定于帐户创建的验证。然后,每个特定的验证都可以由express validator和validator等库执行。
exports.AccountCreationRequest = {
init: function(request) {
... extract attributes ...
},
sanitizeAndValidate: function() {
... use express-validator/validator on
attributes such as username, email, etc ...
},
isValid: function() {
... return result of validation ...
}
};
然后,当后端API收到请求时,
var accountCreationRequest = AccountCreationRequest.init(httpRequest);
accountCreationRequest.sanitizeAndValidate();
if (accountCreationRequest.isValid()) {
... store in database and notify client of success ...
} else {
... notify client of failure ...
}
我担心N API需要N个请求验证模块。但是,由于每个API都是唯一的,我认为代码重用的机会并不多。
答案 0 :(得分:2)
如果您使用快递,您可以执行类似
的操作app.use('/private', function(req, res, next) {
if (/*some condition to check for authentication*/) {
next();
} else { //unauthorized
res.status(401).send('not authorized, please authenticate');
}
});
将通过您的身份验证条件过滤/ private路径下的所有内容。如果您愿意,也可以在路径中使用通配符。