今天这个笔记是阅读文档的最后一篇,后面阅读类型的资料全部放前三篇,之后的若干篇全部放开发的笔记。
错误码设计
这个错误码是暴露给用户的,所以其实只需要做好 RESTful 那些接口的错误码设计就好。
具体实现参考 internal/pkg/code ,错误码从 10'00'01 开始。最开始的 10 代表服务,中间的 00 代表模块,最后的 01 代表模块下的错误序号,每个模块可以注册 100 个错误。
对于服务和模块,实际上就是之前提到的核心组件里出现的那些。
| 服务 | 模块 | 说明(服务 - 模块) |
|---|---|---|
| 10 | 0 | 通用 - 基本错误 |
| 10 | 1 | 通用 - 数据库类错误 |
| 10 | 2 | 通用 - 认证授权类错误 |
| 10 | 3 | 通用 - 编解码类错误 |
| 11 | 0 | iam-apiserver 服务 - 用户模块错误 |
| 11 | 1 | iam-apiserver 服务 - 密钥模块错误 |
| 11 | 2 | iam-apiserver 服务 - 策略模块错误 |
错误信息也有规范,比如说全部以大写开头,结尾不加英文句号;对外暴露的错误要简洁,准确说明问题;然后错误说明应该是如何解决而不是错误原因。还有一点,因为错误是暴露给用户的,敏感信息是不能包含在错误和错误说明里的。
下面看一个实际发生的错误:
{
"code": 100101,
"message": "Database error",
"reference": "https://github.com/marmotedu/iam/tree/master/docs/guide/zh-CN/faq/iam-apiserver"
}
出现 code 表明 API 调用失败,错误码都来了。