Skip to content

12.1 API 响应规范 ​

概述

必须遵守的响应契约:统一信封四字段、code 语义、data 形态、命名驼峰(含下划线例外)。机制详解见 8.1 统一响应格式,本节为强制规范条目。

强制规范 ​

text
1. 全部接口返回 {code, ok, msg, data} 四字段信封——禁止裸数组/裸对象
2. 成功 code=0;失败 code=1(细分码在服务端语义,401 原样返回)
3. data 失败时为 {}(非 null);records 为空时为 [](非 null)
4. 分页统一 PageData[T]:{records, total, size, current, pages}
5. 新增返回 {id};修改/删除返回 {}
6. 出入参 json 一律驼峰
   唯一例外:登录/令牌接口返回 access_token/refresh_token/expires_in/token_type
   (OAuth2 惯例,前端按此读取,禁止"修正"为驼峰)
7. 业务错误经 gerror 上抛由包装层统一 Fail——禁止业务代码手写 JSON 响应
8. 未认证必须 code=401 且 HTTP 401(前端跳登录依赖此约定)

代码层对应(防呆) ​

go
// 响应由 Bind 包装层统一写出——业务只管返回出参与 error
func (s *sExample) Add(ctx context.Context, req *v1.ExampleAddReq) (*v1.ExampleIdRes, error) {
    id, err := exampleSpec.Add(ctx, req)
    if err != nil {
        return nil, err          // 包装层 → response.Fail
    }
    return &v1.ExampleIdRes{Id: id}, nil   // 包装层 → response.Ok
}

Review 检查项 ​

text
□ 新接口返回类型是否用 PageData/IdRes/空结构体(而非自造形态)
□ 错误是否 gerror 上抛(而非手写 {code:1})
□ 字段 json 标签是否驼峰
□ 是否误改了登录接口的下划线字段
□ msg 是否用户可读(前端会弹出)
□ data 为 nil 的路径是否验证过(框架兜底 {} / [])

反例(禁止) ​

text
❌ {"status":200, "result": {...}}            自造信封
❌ {"code":0, "data":null}                    data null(应 {} / [])
❌ {"code":1003,"msg":"密码错误"} 直接返回细分码   (除 401 外应降级 1,细分在 msg/日志)
❌ 裸数组 [ {...} ] 作为响应体                 (应包信封)
❌ {"access_token":...} 改为 accessToken        (破坏 OAuth2 惯例)

小蚂蚁云团队 · 提供技术支持