Go Engineering - Error Code
预期功能
- 有业务 Code 码标识 - HTTP Code 码有限
- 安全 - 对内对外展示不同的错误信息
设计方式
- 无论请求成功与否,都返回
200
,在 HTTP Body 中包含错误信息- HTTP Code 通常代表 HTTP Transport 层的状态信息
- 缺点:性能不佳(需解析 Body) + 对客户端不友好
- 返回
4xx
or5xx
,并在 Body 中返回简单
的错误信息 - 返回
4xx
or5xx
,并在 Body 中返回详细
的错误信息 - 推荐
设计思路
- 区别于 http status code,业务码需要有一定的
规则
,可以通过业务码判断出是哪类错误 - 请求出错时,可以通过 http status code,直接感知到请求出错
- 需要在请求出错时,返回详细的信息:
Code
+Message
+Reference
(Optional) - 返回的错误信息,需要是可以直接展示给用户的
安全信息
,不能包含敏感信息
- 但同时也要有内部更详细的错误信息,方便 Debug
- 返回的数据格式应该是固定的,规范的
- 错误信息要保持简洁,并提供有用的信息
Biz Code
纯数字表示,不同部位代表不同的服务,不同的模块
HTTP Code
net/http - 60
Code | Short | Desc |
---|---|---|
1xx | 指示信息 | 表示请求已接收 ,继续处理 |
2xx | 请求成功 | 表示成功处理了请求 |
3xx | 请求被重定向 | 表示要完成请求,需要进一步操作 |
4xx | 请求错误 | 代表请求可能出错,通常是客户端出错 |
5xx | 服务端错误 | 服务器在尝试处理请求时发生错误 |
不建议 http status code 太多
- 200 - 表示请求成功执行
- 400 - 表示客户端出错
- 500 - 表示服务端出错
最多再加 3 个 Code
- 401 - 表示认证失败
- 403 - 表示授权失败
- 404 - 表示资源找不到
Error Message
- 对外暴露的错误,统一
大写开头
,结尾不需要.
- 对外暴露的错误要简洁,并能
准确说明问题
- 对外暴露的错误说明,应该是
怎么做
,而不是哪里错
如果返回结果中存在 code 字段,表示调用 API 接口失败
1 | { |
Mapping
1 | func init() { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.