开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:集成 Swagger UI 打造交互式 API 文档

简介: GoWind Admin(风行)是基于 Kratos 的企业级中后台框架,集成 Swagger UI 实现交互式 API 文档。通过 Protobuf 自动生成 OpenAPI v3 规范文档,利用 `//go:embed` 嵌入服务,一键部署可视化调试界面,提升前后端协作效率,开箱即用。

开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:集成 Swagger UI 打造交互式 API 文档

在企业级中后台系统开发中,接口调试、测试与文档同步始终是困扰前后端团队的核心痛点:接口变更后文档未及时更新、手动编写文档效率低下、调试工具切换繁琐等问题,严重影响开发协作效率。而 OpenAPI 规范(原 Swagger 规范)及其配套工具 Swagger UI,正是解决这些问题的最优解之一。

笔者在使用 Python 生态的 FastAPI 框架时,发现其内置的 Swagger UI 体验极佳——开发者可直接通过 http://127.0.0.1:8000/docs 访问交互式 API 文档,实现接口可视化调试与测试,无需额外部署工具。受此启发,我们将这一方案借鉴到 GoWind Admin(基于 Kratos 框架的企业级前后端一体中后台框架)中,实现了 API 文档的自动化生成与嵌入式访问。

Fast API Swagger UI

一、核心概念:OpenAPI 与 Swagger 的关系

很多开发者会混淆 OpenAPI 和 Swagger,其实二者是「规范」与「实现工具集」的关系,明确这一点是后续集成的基础。

1.1 什么是 OpenAPI?—— API 设计的全球标准

OpenAPI 是一套用于设计、描述 RESTful API 的开放标准(并非工具),其核心价值在于标准化 API 的设计规范,确保 API 具备良好的可读性、可扩展性与安全性。遵循该标准的 API 可实现:

  • 跨团队协作标准化:前后端、测试、运维团队基于同一套规范沟通,减少理解偏差;
  • 自动化流程支撑:为后续的文档生成、接口测试、客户端 SDK 生成提供结构化数据基础;
  • 兼容性与可维护性:API 版本迭代、跨系统集成时具备统一的约束,降低维护成本。

OpenAPI 最初名为 Swagger 规范,由 Swagger 团队提出,后捐赠给 Linux 基金会并更名为 OpenAPI。如需深入学习规范细节,可参考 [OpenAPI 规范(中文版)][2]。

1.2 什么是 Swagger?—— OpenAPI 规范的落地工具集

OpenAPI 仅定义规范,手动编写符合规范的文档(如 JSON/YAML 格式)繁琐且易出错。Swagger 则是一套实现了 OpenAPI 规范的工具集,旨在降低 API 开发与管理的门槛。其核心工具包括:

  • Swagger Editor:浏览器端编辑器,支持实时编写 OpenAPI 规范并预览文档;
  • Swagger UI:核心工具,可将 OpenAPI 规范(JSON/YAML)动态生成交互式文档,支持在线调试接口;
  • Swagger Codegen:根据 OpenAPI 规范自动生成多语言客户端 SDK、服务器存根代码;
  • Swagger Inspector:免费 API 测试工具,支持验证 API 并反向生成 OpenAPI 规范;
  • SwaggerHub:团队级 API 设计与文档管理平台,支持协作编辑与版本控制。

Swagger 官网:https://swagger.io/,其中 Swagger UI 是我们本次集成的核心组件。

二、Kratos 集成 Swagger UI 的核心思路

Kratos 框架基于 Protobuf(IDL 语言)和 gRPC 设计 API,因此集成 Swagger UI 的核心逻辑是:

  1. 通过工具从 Protobuf 定义生成符合 OpenAPI 规范的 JSON/YAML 文档;
  2. 将生成的 OpenAPI 文档嵌入到 Kratos 服务中(避免额外部署文档服务);
  3. 在 Kratos HTTP 服务中集成 Swagger UI,使其加载嵌入式的 OpenAPI 文档,提供交互式访问。

下面我们按步骤拆解具体实现过程。

三、第一步:从 Protobuf 生成 OpenAPI 文档

Protobuf 是 Kratos 定义 API 的基础,我们需要通过 protoc 插件将 Protobuf 文件转换为 OpenAPI 规范文档。目前主流的 Go 语言插件有两个,分别支持 OpenAPI v2 和 v3 版本(推荐 v3,功能更强大、规范更完善)。

3.1 安装 OpenAPI 生成插件

通过 go install 安装两个核心插件:

# OpenAPI v2 生成器(兼容旧版 Swagger UI)
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest

# OpenAPI v3 生成器(推荐,功能更完善)
go install github.com/google/gnostic/cmd/protoc-gen-openapi@latest

3.2 直接通过 protoc 生成文档(基础方式)

安装完成后,可直接通过 protoc 命令生成文档,核心参数说明:

  • --proto_path=.:指定 Protobuf 文件所在目录;
  • --openapiv2_out/--openapi_out:指定输出目录与路径规则(如 paths=source_relative 表示按源文件相对路径输出);
  • --openapiv2_opt/--openapi_opt:额外配置(如 JSON 字段命名规则、日志输出等)。

生成 OpenAPI v2 JSON 文档:

protoc --proto_path=. \
    --openapiv2_out=paths=source_relative:../docs \  # 输出到上级 docs 目录
    --openapiv2_opt logtostderr=true \              # 开启日志输出
    --openapiv2_opt json_names_for_fields=true \    # JSON 字段名使用蛇形命名(如 user_name)
    ./*.proto

生成 OpenAPI v3 YAML 文档(推荐):

protoc --proto_path=. \
    --openapi_out=naming=json,paths=source_relative:../docs \  # 修复原文参数错误,用逗号分隔配置
    ./*.proto

3.3 工程化生成:使用 Buf 替代原生 protoc

直接使用 protoc 命令存在诸多问题:多文件依赖管理复杂、参数重复输入、团队协作规范不统一。推荐使用 Buf.Build 工具进行工程化管理,它提供了 Protobuf 语法检查、依赖管理、批量生成等功能。

3.3.1 安装 Buf

go install github.com/bufbuild/buf/cmd/buf@latest

3.3.2 配置 Buf 生成规则

Buf 需通过三个核心配置文件管理生成流程(详细配置可参考 Buf 官方文档),此处重点关注 OpenAPI 生成相关的配置:在 Protobuf 文件同级目录创建 buf.openapi.gen.yaml,配置 OpenAPI 生成规则:

# buf.openapi.gen.yaml:OpenAPI 生成专属配置
version: v1
managed:
  enabled: false  # 关闭自动管理依赖(根据项目实际需求调整)
plugins:
  # 生成 OpenAPI v3 YAML 文档(后台 API 示例)
  - name: openapi
    out: ./app/admin/service/cmd/server/assets  # 输出到服务 assets 目录(便于后续嵌入)
    opt:
      - naming=json  # 字段名使用 JSON 风格(蛇形命名)
      - depth=2      # 嵌套字段解析深度(避免过度嵌套导致文档冗余)
      - paths=source_relative  # 按源文件相对路径生成文件

3.3.3 执行 Buf 生成命令

在项目根目录执行以下命令,即可按配置生成 OpenAPI v3 文档:

# 生成指定目录的 Protobuf 对应的 OpenAPI 文档
buf generate --path api/admin/service/v1 \
    --template api/admin/service/v1/buf.openapi.gen.yaml

生成成功后,会在 ./app/admin/service/cmd/server/assets 目录下生成 openapi.yaml 文件。

四、第二步:将 OpenAPI 文档嵌入 Kratos 服务

为了避免单独部署 OpenAPI 文档服务,我们利用 Go 1.16+ 提供的 //go:embed 指令,将 openapi.yaml 文件嵌入到 Kratos 服务的二进制文件中,实现「文档与服务一体部署」。

4.1 编写嵌入代码

./app/admin/service/cmd/server/assets 目录下创建 assets.go 文件:

package assets

import _ "embed"

//go:embed openapi.yaml
// OpenApiData 嵌入的 OpenAPI v3 文档数据(二进制格式)
var OpenApiData []byte

通过 //go:embed openapi.yaml 指令,Go 编译器会在构建时将 openapi.yaml 文件内容写入 OpenApiData 变量,后续可直接在代码中读取。

五、第三步:集成 Swagger UI 到 Kratos 服务

Kratos 官方曾提供 swagger-api 项目,但目前已归档,且仅支持 OpenAPI v2,存在文档读取不稳定等问题。为此,笔者封装了 kratos-swagger-ui 库,专门适配 Kratos 框架,支持 OpenAPI v3,且集成简单。

5.1 安装集成库

go get -u github.com/tx7do/kratos-swagger-ui

5.2 在 Kratos HTTP 服务中注册 Swagger UI

在 Kratos 服务的 HTTP 服务器初始化代码中,调用 kratos-swagger-ui 库的注册方法,加载嵌入式的 OpenAPI 文档:

package server

import (
    rest "github.com/go-kratos/kratos/v2/transport/http"
    swaggerUI "github.com/tx7do/kratos-swagger-ui"

    "kratos-cms/app/admin/service/cmd/server/assets"
)

func NewRESTServer() *rest.Server {
   
    srv := CreateRestServer()

    swaggerUI.RegisterSwaggerUIServerWithOption(
        srv,
        swaggerUI.WithTitle("Admin Service"),
        swaggerUI.WithMemoryData(assets.OpenApiData, "yaml"),
    )
}

5.3 自动化构建与运行

为了简化「生成文档 + 启动服务」的流程,我们将相关命令写入 Makefile,实现一键执行:

# Makefile
.PHONY: api openapi run

# 生成 Protobuf 对应的 Go 代码(gRPC + HTTP 网关)
api:
        buf generate

# 生成所有服务的 OpenAPI v3 文档
openapi:
        # 生成后台服务 API 文档
        buf generate --path api/admin/service/v1 --template api/admin/service/v1/buf.opena API 文档(如有)
        buf generate --path api/front/service/v1 --template api/front/service/v1/buf.openapi.gen.yaml

# 一键生成代服务
run: api openapi
        @echo "启动 Admin 服务..."
        @go run ./cmd/server -conf ./configs码、文档并启动pi.gen.yaml
        # 生成前台服务

执行以下命令即可完成全流程:

# 仅生成 OpenAPI 文档
make openapi

# 生成代码、文档并启动服务
make run

六、验证集成效果

启动 Kratos 服务后,若 HTTP 服务端口为 8080,可通过以下链接访问 Swagger UI:

访问后可看到:

  • 所有 Protobuf 定义的 API 接口按模块分类展示;
  • 支持在线填写请求参数,点击「Try it out」直接调试接口;
  • 自动展示响应示例、状态码说明,无需手动编写文档。

七、项目代码与参考资料

7.1 完整项目代码

7.2 扩展参考资料

八、总结

通过本文的方案,我们实现了 Kratos 框架与 Swagger UI 的深度集成,核心优势在于:

  1. 自动化文档生成:从 Protobuf 定义一键生成 OpenAPI 文档,避免手动编写与更新;
  2. 嵌入式部署:文档与服务一体部署,无需额外维护文档服务;
  3. 交互式调试:前端开发者可直接通过浏览器调试接口,提升协作效率;
  4. 工程化支撑:基于 Buf 实现规范管理,适配团队协作场景。

该方案已集成到 GoWind Admin 框架中,开箱即用。如果你的 Kratos 项目也需要高效的 API 文档解决方案,可直接参考本文实现,或直接使用 GoWind Admin 框架快速搭建企业级中后台系统。

目录
相关文章
|
前端开发 JavaScript Go
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:介绍
风行(GoWind Admin)是一款开箱即用的企业级Golang全栈中后台框架,基于go-kratos与Vben Admin,支持单体/微服务架构。功能完备,涵盖用户、租户、角色、权限、日志等管理模块,助力开发者高效构建管理系统。
955 0
|
2月前
|
Go API Docker
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:Makefile 在后端开发中的应用与 Windows 环境配置
GoWind Admin(风行)是基于 Go + Vue 的企业级中后台框架,通过 Makefile 实现高效工程化管理。本文详解其在 Windows 环境下 make 工具的安装配置、分层 Makefile 设计及核心命令实战,助力开发者统一构建流程,提升协作效率,实现开箱即用的全栈开发体验。(238字)
112 1
|
前端开发 Go API
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:数据脱敏和隐私保护
GoWind Admin基于Protobuf生态,集成protoc-gen-redact插件,实现开箱即用的数据脱敏与隐私保护。通过注解定义规则,自动生成脱敏代码,支持多语言、灵活配置,零侵入业务逻辑,适用于微服务、日志、前端等场景,保障数据安全合规。
167 0
|
2月前
|
前端开发 JavaScript Go
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:为什么选 Golang+Vue3 这套组合?
go-wind-admin 采用 Golang + Vue3 技术栈,融合高性能后端与高效前端生态。后端基于 go-kratos、ent/gorm 灵活适配复杂业务,前端结合 Vue3、TypeScript 与 Vben Admin,提升开发效率与可维护性,兼顾性能、扩展性与企业级需求,是中后台系统的理想选择。(239字)
327 6
|
前端开发 安全 API
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:自动化解放双手,初学者快速搭建系统并自动生成前端接口
GoWind Admin 是基于 Go-Kratos 与 Vue3 的企业级中后台框架,开箱即用,集成用户、权限、租户等核心模块。搭配 protoc-gen-typescript-http,可从 Protobuf 自动生成类型安全的前端接口,大幅降低联调成本,提升开发效率,助力初学者快速搭建系统,实现前后端高效协作。
287 0
|
2月前
|
存储 缓存 关系型数据库
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:分层设计的取舍之道(从 “简单粗暴” 到依赖倒置)
GoWind Admin 是企业级前后端一体中后台框架,深入探讨分层设计的取舍:从“Service直连Data”到依赖倒置与biz层演进,平衡开发效率与架构韧性,适配轻量到超大型项目,实现开箱即用与长期扩展的统一。
133 4
|
2月前
|
关系型数据库 API Go
初学者友好:Go-Kratos 集成 go-crud,GORM ORM CRUD 无需重复编码,轻松上手
本文介绍如何在Go-Kratos微服务中集成go-curd与GORM,实现CRUD操作免重复编码。基于kratos-gorm-example项目,通过step-by-step教程,帮助初学者快速上手:从环境搭建、模型定义到API开发,全程简化数据操作,显著提升开发效率,适合Go新手快速构建微服务应用。
178 2
|
2月前
|
监控 NoSQL 开发者
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:极速搭建微服务应用
GoWind Admin(风行)是基于Go语言的企业级前后端一体中后台框架,集成kratos生态,支持一键生成微服务、多协议(gRPC/REST)、多数据层(gorm/ent/redis),开箱即用,大幅降低架构成本,助力快速构建高可用微服务应用。
233 2
|
8月前
|
JSON Cloud Native Go
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:后端权限控制
GoWind Admin「风行」是企业级中后台框架,集成Casbin与OPA实现API权限控制。支持RBAC、ABAC等模型,开箱即用,助力高效构建安全的前后端一体化系统。
651 1
|
前端开发 安全 Go
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:如何上传文件
GoWind Admin(风行)是企业级中后台框架,支持文件上传功能。通过集成MinIO,实现安全高效的文件管理,提供预签名URL直传与服务端中转两种模式,推荐使用减轻后端压力的直连MinIO方案,提升系统性能与安全性。
327 0