GoWind 开源生态GoWind 开源生态
首页
框架
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind IoT
GoWind Toolkit
GoWind Quant
GitHub
首页
框架
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind IoT
GoWind Toolkit
GoWind Quant
GitHub
  • 介绍

    • GoWind Admin 产品介绍
    • GoWind Admin 安装指南
  • 后端文档

    • 后端架构总览
    • 后端核心模块详解
    • 后端 API 与 Protobuf 定义
    • 后端配置与部署
    • 后端扩展开发
  • 前端文档

    • 前端架构总览
    • 前端核心功能详解
  • 二开教程

    • 后端新增业务模块实战教程
    • 前端新增业务页面实战教程
    • 前后端联调完整实战教程
  • 高级教程

    • Lua 脚本扩展实战教程
    • 权限系统深度解析教程
    • 多租户架构实战教程
    • 任务调度与异步处理教程
    • 文件上传与对象存储教程
    • 事件总线与解耦架构教程
    • 前端主题定制与国际化教程
    • 性能优化与监控教程
    • SSE 实时推送
    • 登录策略与安全加固
    • 加密工具实战

后端 API 与 Protobuf 定义

GoWind Admin 后端采用 Protobuf First 的 API 开发模式,所有接口通过 Protobuf 定义,借助 Buf 工具链自动生成 Go 服务端代码、TypeScript 客户端代码和 OpenAPI 文档。

一、Protobuf 组织结构

所有 Protobuf 定义文件位于 backend/api/protos/ 目录下,按业务领域划分:

api/protos/
├── admin/service/v1/       # Admin 服务接口定义(HTTP 路由、请求/响应消息)
├── audit/                  # 审计日志消息定义
├── authentication/         # 认证相关消息定义
├── dict/                   # 字典管理消息定义
├── identity/               # 身份管理消息定义(用户、角色、组织、租户等)
├── internal_message/       # 站内信消息定义
├── permission/             # 权限管理消息定义
├── storage/                # 文件存储消息定义
└── task/                   # 任务调度消息定义

各模块说明

模块目录职责
admin/service/v1/定义 RPC Service 和 HTTP 路由映射,是 API 的入口定义
authentication/定义登录请求/响应、令牌载荷、用户凭证等消息
identity/定义用户(User)、角色(Role)、组织(OrgUnit)、租户(Tenant)、部门、职位等实体消息
permission/定义权限(Permission)、权限分组(PermissionGroup)、菜单(Menu)等消息
dict/定义字典类型(DictType)和字典条目(DictEntry)消息
audit/定义各类审计日志消息
internal_message/定义站内信、消息分类、消息接收者消息
storage/定义文件上传下载相关消息
task/定义任务调度相关消息

二、Service 定义规范

以认证服务为例,展示标准 Service 定义:

syntax = "proto3";

package admin.service.v1;

import "gnostic/openapi/v3/annotations.proto";
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
import "authentication/service/v1/authentication.proto";

// 用户后台登录认证服务
service AuthenticationService {
  // 登录
  rpc Login (authentication.service.v1.LoginRequest) returns (authentication.service.v1.LoginResponse) {
    option (google.api.http) = {
      post: "/admin/v1/login"
      body: "*"
    };
    option(gnostic.openapi.v3.operation) = {
      security: {}
    };
  }

  // 登出
  rpc Logout (google.protobuf.Empty) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      post: "/admin/v1/logout"
      body: "*"
    };
  }
}

关键约定

  1. HTTP 路由映射:通过 google.api.http 注解指定 HTTP 方法和路径
  2. 统一前缀:所有 Admin API 路由以 /admin/v1/ 为前缀
  3. OpenAPI 安全标注:不需要认证的接口标注 security: {}(如登录、验证码)
  4. 包名规范:admin.service.v1 用于 Service 定义,其他消息按领域分包

三、API 接口清单

1. 认证服务(AuthenticationService)

方法路由说明
POST/admin/v1/login用户登录
POST/admin/v1/logout用户登出
POST/admin/v1/register用户注册
POST/admin/v1/refresh-token刷新令牌
GET/admin/v1/captcha生成验证码
POST/admin/v1/captcha/verify验证验证码

2. 用户管理服务

方法路由说明
POST/admin/v1/user创建用户
PUT/admin/v1/user/{id}更新用户
DELETE/admin/v1/user/{id}删除用户
GET/admin/v1/user/{id}获取用户详情
GET/admin/v1/user用户列表查询

3. 租户管理服务

方法路由说明
POST/admin/v1/tenant创建租户
PUT/admin/v1/tenant/{id}更新租户
DELETE/admin/v1/tenant/{id}删除租户
GET/admin/v1/tenant/{id}获取租户详情
GET/admin/v1/tenant租户列表查询

4. 角色管理服务

方法路由说明
POST/admin/v1/role创建角色
PUT/admin/v1/role/{id}更新角色
DELETE/admin/v1/role/{id}删除角色
GET/admin/v1/role/{id}获取角色详情
GET/admin/v1/role角色列表查询

5. 权限管理服务

方法路由说明
POST/admin/v1/permission创建权限
PUT/admin/v1/permission/{id}更新权限
DELETE/admin/v1/permission/{id}删除权限
GET/admin/v1/permission/{id}获取权限详情
GET/admin/v1/permission权限列表查询

6. 菜单管理服务

方法路由说明
POST/admin/v1/menu创建菜单
PUT/admin/v1/menu/{id}更新菜单
DELETE/admin/v1/menu/{id}删除菜单
GET/admin/v1/menu/{id}获取菜单详情
GET/admin/v1/menu菜单列表查询

7. 组织管理服务

方法路由说明
POST/admin/v1/org-unit创建组织
PUT/admin/v1/org-unit/{id}更新组织
DELETE/admin/v1/org-unit/{id}删除组织
GET/admin/v1/org-unit/{id}获取组织详情
GET/admin/v1/org-unit组织列表查询

8. 字典管理服务

方法路由说明
POST/admin/v1/dict-type创建字典类型
PUT/admin/v1/dict-type/{id}更新字典类型
DELETE/admin/v1/dict-type/{id}删除字典类型
GET/admin/v1/dict-type字典类型列表查询
POST/admin/v1/dict-entry创建字典条目
PUT/admin/v1/dict-entry/{id}更新字典条目
DELETE/admin/v1/dict-entry/{id}删除字典条目
GET/admin/v1/dict-entry字典条目列表查询

9. 文件管理服务

方法路由说明
POST/admin/v1/file创建文件记录
PUT/admin/v1/file/{id}更新文件记录
DELETE/admin/v1/file/{id}删除文件
GET/admin/v1/file/{id}获取文件详情
GET/admin/v1/file文件列表查询
POST/admin/v1/file/upload上传文件
GET/admin/v1/file/download/{id}下载文件

10. 站内信服务

方法路由说明
POST/admin/v1/internal-message创建消息
PUT/admin/v1/internal-message/{id}更新消息
DELETE/admin/v1/internal-message/{id}删除消息
GET/admin/v1/internal-message/{id}获取消息详情
GET/admin/v1/internal-message消息列表查询
POST/admin/v1/internal-message-category创建消息分类
GET/admin/v1/internal-message-category消息分类列表

11. 任务调度服务

方法路由说明
POST/admin/v1/task创建任务
PUT/admin/v1/task/{id}更新任务
DELETE/admin/v1/task/{id}删除任务
GET/admin/v1/task/{id}获取任务详情
GET/admin/v1/task任务列表查询

12. 仪表盘服务(AdminPortalService)

方法路由说明
GET/admin/v1/portal/dashboard获取仪表盘数据

13. 审计日志服务

方法路由说明
GET/admin/v1/login-audit-log登录日志列表查询
GET/admin/v1/api-audit-logAPI审计日志列表查询
GET/admin/v1/operation-audit-log操作日志列表查询
GET/admin/v1/data-access-audit-log数据访问日志列表查询

四、代码生成

1. Buf 配置

Buf 配置文件位于 api/ 目录:

文件说明
buf.yaml模块定义
buf.gen.yamlGo 代码生成配置
buf.admin.openapi.gen.yamlOpenAPI 文档生成配置
buf.vue-vben.admin.typescript.gen.yamlVue Vben 版 TypeScript 生成配置
buf.vue-element.admin.typescript.gen.yamlVue Element 版 TypeScript 生成配置
buf.react.admin.typescript.gen.yamlReact 版 TypeScript 生成配置

2. 生成命令

# 生成 Go 服务端代码(HTTP Handler、消息类型、错误码)
make api

# 生成 OpenAPI v3 文档
make openapi

# 生成 TypeScript 客户端代码(Vue Vben + Vue Element + React)
make ts

# 一键生成所有(Ent + Wire + API + OpenAPI)
make gen

3. 生成代码输出

api/gen/go/              # Go 代码
├── admin/service/v1/    # Admin 服务生成代码(HTTP Handler、接口定义)
├── audit/service/v1/    # 审计服务生成代码
├── authentication/      # 认证消息生成代码
├── dict/                # 字典消息生成代码
├── identity/            # 身份消息生成代码
├── internal_message/    # 站内信消息生成代码
├── permission/          # 权限消息生成代码
├── storage/             # 存储消息生成代码
└── task/                # 任务消息生成代码

五、Swagger UI

开发环境默认启用 Swagger UI,访问地址:http://localhost:7788/docs/

Swagger UI 通过 kratos-swagger-ui 集成,在 rest_server.go 中注册:

if cfg.GetServer().GetRest().GetEnableSwagger() {
    swaggerUI.RegisterSwaggerUIServerWithOption(
        srv,
        swaggerUI.WithTitle("GoWind Admin"),
        swaggerUI.WithMemoryData(assets.OpenApiData, "yaml"),
    )
}

OpenAPI 文档访问地址:

  • Swagger UI:http://localhost:7788/docs/
  • OpenAPI YAML:http://localhost:7788/docs/openapi.yaml

六、错误码定义

错误码通过 Protobuf 定义,自动生成 Go 错误类型。错误码定义文件为 admin_error.proto:

enum ErrorReason {
  option (errors.default_code) = 500;

  INTERNAL_SERVER_ERROR = 0;
  INVALID_GRANT_TYPE = 1;
  INCORRECT_REFRESH_TOKEN = 2;
  FORBIDDEN = 3;
  // ...
}

生成的错误类型支持 HTTP 状态码映射,可直接在 Service 层使用:

return nil, authenticationV1.ErrorInvalidGrantType("invalid grant type")

七、添加新 API 的流程

步骤 1:定义 Protobuf

在 api/protos/ 对应目录下创建或修改 .proto 文件:

syntax = "proto3";
package admin.service.v1;

import "google/api/annotations.proto";

service MyNewService {
  rpc GetMyData (GetMyDataRequest) returns (GetMyDataResponse) {
    option (google.api.http) = {
      get: "/admin/v1/my-data"
    };
  }
}

message GetMyDataRequest {
  uint32 id = 1;
}

message GetMyDataResponse {
  string name = 1;
}

步骤 2:生成代码

make api

步骤 3:实现 Service

在 internal/service/ 下创建 my_new_service.go,实现生成的接口。

步骤 4:注册到 Server

在 internal/server/rest_server.go 中注册新的 Service Handler。

步骤 5:重新生成 Wire

cd app/admin/service/cmd/server
wire

八、相关文档

  • 后端架构总览
  • 后端核心模块详解
  • 后端配置与部署
Edit this page
Last Updated:: 6/5/26, 11:52 AM
Contributors: Bobo
Prev
后端核心模块详解
Next
后端配置与部署