通用API类型
**本文引用的文件** - [[[[[bi-common/apitypes/error.go]]]]](file/bi-common/apitypes/error.go) - [[[[[bi-common/apitypes/page.go]]]]](file/bi-common/apitypes/page.go) - [[[[[bi-common/apitypes/request.go]]]]](file/bi-common/apitypes/request.go) - [[[[[bi-common/apitypes/response.go]]]]](file/bi-common/apitypes/response.go) - [[[[[bi-common/apitypes/result.go]]]]](file/bi-common/apitypes/result.go) - [[[[[bi-common/auth/jwt.go]]]]](file/bi-common/auth/jwt.go) - [[[[[bi-common/auth/rbac.go]]]]](file/bi-common/auth/rbac.go) - [[[[[bi-common/auth/context.go]]]]](file/bi-common/auth/context.go) - [[[[[bi-common/conf/common.proto]]]]](file/bi-common/conf/common.proto) - [[[[[bi-analysis/api/anls/v1/common.proto]]]]](file/bi-analysis/api/anls/v1/common.proto)
目录
简介
本文件为通用API类型与数据结构的权威参考,覆盖以下主题:
- 统一的错误码规范与通用消息格式
- Protobuf消息定义、枚举与OpenAPI注解
- 分页参数、排序规则与过滤条件的标准化接口
- 认证令牌、权限标识与租户上下文的通用规范
- API版本管理与向后兼容策略
- SDK使用示例与客户端集成指南
目标是帮助跨服务开发者快速理解并正确使用通用API类型,确保一致性与可维护性。
项目结构
围绕“通用API类型”这一主题,核心代码位于 bi-common 模块,涵盖:
- apitypes:统一响应、错误、分页、请求体与结果封装
- auth:JWT工具、RBAC中间件、上下文与元数据传递
- conf:通用配置的Protobuf定义(服务、数据、Kafka、日志、鉴权等)
- 各业务模块的API目录下包含Protobuf定义与OpenAPI注解
图表来源
- [[[[bi-common/apitypes/response.go]]]]
- [[[[bi-common/apitypes/error.go]]]]
- [[[[bi-common/apitypes/page.go]]]]
- [[[[bi-common/apitypes/request.go]]]]
- [[[[bi-common/apitypes/result.go]]]]
- [[[[bi-common/auth/jwt.go]]]]
- [[[[bi-common/auth/rbac.go]]]]
- [[[[bi-common/auth/context.go]]]]
- [[[[bi-common/conf/common.proto]]]]
- [[[[bi-analysis/api/anls/v1/common.proto]]]]
章节来源
- [[[[bi-common/apitypes/response.go]]]]
- [[[[bi-common/apitypes/error.go]]]]
- [[[[bi-common/apitypes/page.go]]]]
- [[[[bi-common/apitypes/request.go]]]]
- [[[[bi-common/apitypes/result.go]]]]
- [[[[bi-common/auth/jwt.go]]]]
- [[[[bi-common/auth/rbac.go]]]]
- [[[[bi-common/auth/context.go]]]]
- [[[[bi-common/conf/common.proto]]]]
- [[[[bi-analysis/api/anls/v1/common.proto]]]]
核心组件
- 统一响应与错误
- 统一响应结构、成功/错误便捷构造器
- 业务错误封装与HTTP状态映射、元数据携带业务错误码
- 分页与排序
- 分页请求/响应、偏移与限制计算
- 排序请求与默认排序方向
- 通用请求体
- ID/IDs请求、时间范围请求与校验
- 泛型结果封装
- 分页/树形/列表/选项/ID/空结果等
- 认证与授权
- JWT签发/解析、令牌对、过期与刷新阈值
- RBAC中间件、路径到权限映射、白名单与缓存
- 租户上下文与跨服务元数据传递
- 配置与API定义
- 通用配置Protobuf(服务、数据、Kafka、日志、鉴权)
- 业务API通用枚举与OpenAPI注解
章节来源
- [[[[bi-common/apitypes/response.go]]]]
- [[[[bi-common/apitypes/error.go]]]]
- [[[[bi-common/apitypes/page.go]]]]
- [[[[bi-common/apitypes/request.go]]]]
- [[[[bi-common/apitypes/result.go]]]]
- [[[[bi-common/auth/jwt.go]]]]
- [[[[bi-common/auth/rbac.go]]]]
- [[[[bi-common/auth/context.go]]]]
- [[[[bi-common/conf/common.proto]]]]
- [[[[bi-analysis/api/anls/v1/common.proto]]]]
架构总览
通用API类型在服务端的典型流转如下:
图表来源
- [[[[bi-common/auth/context.go]]]]
- [[[[bi-common/auth/rbac.go]]]]
- [[[[bi-common/apitypes/response.go]]]]
详细组件分析
统一响应与错误
- 统一响应结构包含业务码、消息与数据字段;提供成功/错误便捷构造器
- 业务错误封装:
- 业务错误码采用XXYYZZZ格式,XX部分映射HTTP状态
- 错误对象携带业务码元数据,便于下游识别与处理
- 提供从错误对象提取业务码与消息的工具函数
图表来源
章节来源
分页与排序
- 分页请求参数:页码、每页大小;提供参数校验、偏移与限制计算
- 分页响应:总条数、列表、当前页与每页大小
- 排序请求:排序字段与方向,默认降序
- 分页+排序组合:继承分页与排序请求
图表来源
章节来源
通用请求体与结果封装
- ID/IDs请求:单个与批量ID,约束与上限
- 时间范围请求:起止时间校验
- 泛型结果封装:分页/树形/列表/选项/ID/空结果
- 选项结果:标签与值对
图表来源
章节来源
认证与租户上下文
- JWT工具:生成访问/刷新令牌对、解析令牌、过期判断与刷新阈值
- 认证中间件:从Header解析Authorization,白名单与黑名单校验,注入用户上下文与Kratos元数据
- Header认证中间件:下游服务从Header信任网关传递的用户信息
- 租户上下文:用户ID、租户ID、用户名、角色/部门/组织、是否超级/租户管理员
- 跨服务元数据:统一键名用于传递用户身份信息
图表来源
章节来源
RBAC权限控制
- 中间件根据路径是否包含“-m”区分管理端与客户端API
- 管理端:仅系统用户可访问,超级管理员跳过检查;否则通过Provider/RPC校验
- 客户端:超级管理员/租户管理员跳过检查;否则校验本地或RPC权限
- 权限标识默认规则:模块:资源 或 模块:资源:动作
- 支持白名单、缓存与自定义路径到权限映射函数
图表来源
章节来源
Protobuf消息定义与OpenAPI注解
- 通用配置Protobuf:服务(HTTP/GRPC)、数据源(GORM/StarRocks)、Redis、Kafka、日志、Snowflake、鉴权(JWT/白名单)
- 业务API通用定义:通用枚举(如状态)、OpenAPI全局信息与标签
图表来源
章节来源
依赖关系分析
- 统一响应/错误被各服务广泛使用,保证错误语义一致
- 分页/排序/请求体作为通用输入模型,降低重复实现
- JWT/RBAC/上下文形成认证授权闭环,贯穿所有HTTP中间件
- Protobuf配置与业务API定义为跨语言/跨服务契约
图表来源
- [[[[bi-common/apitypes/response.go]]]]
- [[[[bi-common/apitypes/error.go]]]]
- [[[[bi-common/apitypes/page.go]]]]
- [[[[bi-common/apitypes/request.go]]]]
- [[[[bi-common/auth/jwt.go]]]]
- [[[[bi-common/auth/rbac.go]]]]
- [[[[bi-common/auth/context.go]]]]
- [[[[bi-common/conf/common.proto]]]]
- [[[[bi-analysis/api/anls/v1/common.proto]]]]
章节来源
- [[[[bi-common/apitypes/response.go]]]]
- [[[[bi-common/apitypes/error.go]]]]
- [[[[bi-common/apitypes/page.go]]]]
- [[[[bi-common/apitypes/request.go]]]]
- [[[[bi-common/auth/jwt.go]]]]
- [[[[bi-common/auth/rbac.go]]]]
- [[[[bi-common/auth/context.go]]]]
- [[[[bi-common/conf/common.proto]]]]
- [[[[bi-analysis/api/anls/v1/common.proto]]]]
性能考量
- 分页参数校验与默认值设置,避免过大页大小导致内存压力
- 排序默认降序减少不必要的升序扫描
- RBAC中间件支持缓存,建议结合LRU/Redis缓存提升权限查询性能
- JWT刷新阈值与过期时间合理配置,平衡安全与性能
- 跨服务元数据传递使用轻量键名,避免冗余字段
故障排查指南
- 未登录/Token无效/过期
- 检查中间件白名单配置与Authorization头
- 核对JWT密钥、签发者与过期时间
- 无权限访问
- 确认用户角色与权限标识
- 检查路径到权限映射规则与缓存一致性
- 错误码不一致
- 统一使用业务错误封装与提取工具
- 核对业务码XX部分与HTTP状态映射
- 分页异常
- 校验页码与每页大小边界
- 确认偏移与限制计算逻辑
章节来源
- [[[[bi-common/auth/context.go]]]]
- [[[[bi-common/auth/rbac.go]]]]
- [[[[bi-common/apitypes/error.go]]]]
- [[[[bi-common/apitypes/page.go]]]]
结论
通用API类型通过统一响应、错误、分页、排序与认证授权机制,为多服务协作提供了稳定契约。配合Protobuf配置与业务API定义,实现了跨语言、跨服务的一致性与可维护性。建议在新服务中直接复用这些通用类型,并遵循本文档的版本管理与兼容策略。
附录
API版本管理与向后兼容
- 版本命名:按服务目录下的 vX 子目录区分版本(如 anls/v1、tenant/v1)
- 向后兼容原则:
- 新增字段保持可选,避免破坏旧客户端
- 不删除/重命名已有字段
- 枚举新增值需确保旧客户端可忽略或安全降级
- 通过OpenAPI注解维护文档与变更追踪
章节来源
SDK使用示例与客户端集成
- HTTP客户端集成要点
- 统一响应:解析响应中的业务码与消息
- 错误处理:根据业务码进行分支处理
- 分页:传入页码与每页大小,使用偏移与限制计算
- 排序:指定排序字段与方向
- gRPC客户端集成要点
- 使用Protobuf定义的消息类型
- 在Metadata中携带用户上下文键(如 x-user-id、x-tenant-id),便于服务端透传
- 认证流程
- 登录获取访问/刷新令牌对
- 请求时在Authorization头添加Bearer前缀
- 令牌即将过期时使用刷新令牌换取新令牌
章节来源