HstarDoc
HstarDoc copied to clipboard
REST API状态码设计
正常请求
直接返回具体的业务数据,HTTP状态码根据具体的场景列举如下:
- 200 最常用,返回数据
- 201 如果是创建资源成功,则使用201
- 202 如果是更新或删除资源成功,则使用202
- 204 不想返回任何内容,则可以使用204
异常请求
业务异常
- 400 错误的请求,可能是参数不对
- 401 未授权
- 403 禁止访问
- 404 找不到资源
服务端标准错误
- 500 直接扔标准的500错误
异常数据格式
{
status: 401, // 和HTTP状态码一致
code: '201452', // 业务定义的错误代码
message: 'Unauthorized', // 错误信息
stack: null // 区分环境,确认是否输出
}
附Express中的错误处理逻辑:
app.use((req, res, next) => {
next({
status: 404,
code: '404',
message: '404 Not Found.'
});
});
app.use((err, req, res, next) => {
let status = 500;
let message = '';
let code = '500';
let stack = null;
// 简单业务错误
if (typeof err === 'string') {
status = 400;
code = '400';
message = err;
} else if (err.isJoi) {// 请求验证错误
status = 400;
code = '400';
message = err.details.map(x => x.message).join('\n');
} else if (err instanceof Error) { // 标准错误处理
if (err.code) {
code = err.code;
}
message = err.message;
stack = err.stack;
} else { // Next({status: 400, code: 'xxx'}) 自定义错误
status = err.status || 400;
code = err.code || '400';
message = err.message;
}
res.status(status).json({
status,
code,
message,
stack
});
});