在设计后端接口的状态码和响应码体系时,我们需要考虑 HTTP 状态码与业务逻辑状态码的结合。HTTP 状态码用于描述 HTTP 请求的状态,而业务逻辑状态码(通常称为 code)用于描述应用程序特定的状态或错误。以下是一个推荐的设计方案:
HTTP 状态码
-
2xx 成功
200 OK- 请求成功201 Created- 创建成功204 No Content- 无内容(通常用于 DELETE 请求)
-
4xx 客户端错误
400 Bad Request- 客户端请求无效401 Unauthorized- 未认证403 Forbidden- 无权限404 Not Found- 资源未找到409 Conflict- 资源冲突
-
5xx 服务器错误
500 Internal Server Error- 服务器内部错误502 Bad Gateway- 网关错误503 Service Unavailable- 服务不可用
业务逻辑状态码
成功状态码
| Code | Message | Description |
|---|---|---|
| 0 | Success | 请求成功 |
客户端错误码
| Code | Message | Description |
|---|---|---|
| 1000 | Invalid Parameters | 参数无效 |
| 1001 | Authentication Failed | 认证失败 |
| 1002 | Access Denied | 权限不足 |
| 1003 | Resource Not Found | 资源未找到 |
| 1004 | Resource Conflict | 资源冲突 |
服务器错误码
| Code | Message | Description |
|---|---|---|
| 2000 | Internal Error | 服务器内部错误 |
| 2001 | Service Unavailable | 服务不可用 |
| 2002 | Gateway Error | 网关错误 |
示例响应格式
|
|
示例错误响应
客户端错误
|
|
服务器错误
|
|
状态码与业务逻辑码映射
在实际开发中,可以将 HTTP 状态码和业务逻辑码结合起来使用,以便前端开发人员和 API 用户能够明确地知道发生了什么问题。例如:
-
请求成功
- HTTP 状态码:200
- 业务逻辑码:0
- 响应体:
1 2 3 4 5 6 7{ "code": 0, "message": "Success", "data": { "exampleField": "exampleValue" } }
-
参数无效
- HTTP 状态码:400
- 业务逻辑码:1000
- 响应体:
1 2 3 4 5{ "code": 1000, "message": "Invalid Parameters", "data": null }
-
服务器内部错误
- HTTP 状态码:500
- 业务逻辑码:2000
- 响应体:
1 2 3 4 5{ "code": 2000, "message": "Internal Error", "data": null }
这种设计使得 API 使用者能够从 HTTP 状态码了解请求的基本状态,并从业务逻辑码了解更详细的错误信息或业务状态。