签入版本
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
# 8.1 统一响应格式
|
||||
|
||||
:::tip 概述
|
||||
全部接口返回统一 JSON 信封:code/ok/msg/data 四字段。code=0 成功、1 通用失败、401 未认证(配合 HTTP 401);前端按 code 分流。分页用 PageData 泛型壳。
|
||||
:::
|
||||
|
||||
## 信封结构
|
||||
|
||||
```json
|
||||
// 成功
|
||||
{
|
||||
"code": 0,
|
||||
"ok": true,
|
||||
"msg": "操作成功",
|
||||
"data": { "id": 1 }
|
||||
}
|
||||
|
||||
// 失败
|
||||
{
|
||||
"code": 1,
|
||||
"ok": false,
|
||||
"msg": "用户不存在",
|
||||
"data": {}
|
||||
}
|
||||
|
||||
// 未认证(HTTP 401)
|
||||
{
|
||||
"code": 401,
|
||||
"ok": false,
|
||||
"msg": "登录已过期,请重新登录",
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
## 字段约定
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| code | int | 0=成功;1=通用失败;401=未认证;细分业务码见 8.2(前端主要看 0/1/401) |
|
||||
| ok | bool | 与 code==0 等价的布尔便捷字段 |
|
||||
| msg | string | 提示信息;失败时前端弹出 |
|
||||
| data | object | 业务数据;失败时为空对象 `{}`(非 null) |
|
||||
|
||||
## Fail 映射规则
|
||||
|
||||
```text
|
||||
response.Fail(err):
|
||||
gerror 码 == 401 → 原样保留(配合 HTTP 401,前端跳登录)
|
||||
其余 → 一律降级 code=1
|
||||
|
||||
设计含义:consts 中的细分错误码(1001 用户不存在……)主要用于
|
||||
日志与服务端语义区分;前端统一按 1 弹 msg 即可。
|
||||
```
|
||||
|
||||
## 分页壳(PageData[T])
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0, "ok": true, "msg": "操作成功",
|
||||
"data": {
|
||||
"records": [ ... ],
|
||||
"total": 100,
|
||||
"size": 10,
|
||||
"current": 1,
|
||||
"pages": 10
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| records | 行数组;**为空输出 `[]` 而非 null** |
|
||||
| total | 总条数 |
|
||||
| size | 每页条数(pageSize,默认 10 上限 500) |
|
||||
| current | 当前页码(pageNo,默认 1) |
|
||||
| pages | 总页数 |
|
||||
|
||||
## 其他通用出参形态
|
||||
|
||||
```text
|
||||
新增: {"id": 1} (IdRes)
|
||||
修改/删除:{} (空结构体)
|
||||
列表(非分页):[ ... ] (数组直接作 data)
|
||||
详情: { ...单对象... }
|
||||
```
|
||||
|
||||
## 状态页
|
||||
|
||||
```text
|
||||
404 → {"code":1,"msg":"接口不存在: GET /api/xxx"}
|
||||
500 → {"code":1,"msg":"服务器内部错误"}
|
||||
非 200 一律输出统一 JSON 信封,不返回 HTML
|
||||
```
|
||||
|
||||
## 前端处理模板
|
||||
|
||||
```ts
|
||||
// 响应拦截器分流(语义示意)
|
||||
if (code === 0) return data; // 成功解包
|
||||
if (code === 401) { 跳登录/尝试refresh; }
|
||||
if (code === 1) ElMessage.error(msg); // 统一弹窗
|
||||
```
|
||||
|
||||
## 开发规约
|
||||
|
||||
+ 出参 json 一律驼峰;唯一例外是登录/令牌接口的下划线字段(见 8.6)
|
||||
+ 业务错误用 gerror.NewCode(consts.Xxx, "消息") 上抛,由 Bind 包装层统一 Fail
|
||||
+ 不要在业务代码手写 JSON 响应(统一信封在包装层完成)
|
||||
+ data 为 nil 时框架输出 `{}`/`[]`,业务无需特殊处理
|
||||
Reference in New Issue
Block a user