Go 语言写一个 IAM 系统 (3) | 青训营

62 阅读1分钟

今天这个笔记是阅读文档的最后一篇,后面阅读类型的资料全部放前三篇,之后的若干篇全部放开发的笔记。

错误码设计

这个错误码是暴露给用户的,所以其实只需要做好 RESTful 那些接口的错误码设计就好。

具体实现参考 internal/pkg/code ,错误码从 10'00'01 开始。最开始的 10 代表服务,中间的 00 代表模块,最后的 01 代表模块下的错误序号,每个模块可以注册 100 个错误。

对于服务和模块,实际上就是之前提到的核心组件里出现的那些。

服务模块说明(服务 - 模块)
100通用 - 基本错误
101通用 - 数据库类错误
102通用 - 认证授权类错误
103通用 - 编解码类错误
110iam-apiserver 服务 - 用户模块错误
111iam-apiserver 服务 - 密钥模块错误
112iam-apiserver 服务 - 策略模块错误

错误信息也有规范,比如说全部以大写开头,结尾不加英文句号;对外暴露的错误要简洁,准确说明问题;然后错误说明应该是如何解决而不是错误原因。还有一点,因为错误是暴露给用户的,敏感信息是不能包含在错误和错误说明里的。

下面看一个实际发生的错误:

{
  "code": 100101,
  "message": "Database error",
  "reference": "https://github.com/marmotedu/iam/tree/master/docs/guide/zh-CN/faq/iam-apiserver"
}

出现 code 表明 API 调用失败,错误码都来了。