Kratos项目中可通过make api生成openapi.yaml并嵌入HTTP服务,访问http://localhost:8000/swagger/index.html即可使用交互式Swagger UI,无需手动编写YAML或部署独立服务。

在Kratos项目中快速生成并访问可交互的OpenAPI文档,避免手动编写YAML、反复重启服务或部署独立Swagger UI服务。
确认项目已启用OpenAPI生成能力
打开项目根目录下的 Makefile,查找是否包含 openapi_out 字样。若无,则需在 make api 对应的 protoc 命令中补全该参数;常见缺失会导致生成的 api/openapi.yaml 为空或根本不存在。
执行 make api 后检查 api/openapi.yaml 文件大小——若小于1KB,说明未正确启用 OpenAPI 插件,【必须重装 protoc-gen-openapiv2】,否则后续所有步骤均无效。
这一步操作起来很简单,直接把文件拖进去就行。
生成符合规范的OpenAPI YAML文档
方法一:使用 make api 自动生成(推荐)
确保 proto 文件中已添加 OpenAPI 注释支持,例如在 rpc 方法前加入:
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { description: "获取用户信息"; };
运行 make api → 自动生成 api/openapi.yaml → 该文件即为 Swagger UI 可加载的标准 OpenAPI v3 文档。
方法二:手动触发 protoc 命令(调试用)
进入 api/ 目录,执行完整命令:
protoc --proto_path=. --proto_path=../third_party --openapi_out=fq_schema_naming=true,default_response=false:. helloworld/v1/greeter.proto
注意:路径错误或缺少 --proto_path=../third_party 将导致枚举、错误码等定义无法解析,生成的 YAML 中会缺失 status code 或 schema 引用。
将OpenAPI文档嵌入HTTP服务并访问
第一步:确认 configs/config.yaml 中已启用 Swagger UI 静态资源路由
检查是否存在如下配置段(无则手动添加):
http: addr: 0.0.0.0:8000 middleware: - recovery - logging swagger: enable: true doc_url: /swagger/doc.json
第二步:修改 HTTP server 初始化逻辑
打开 cmd/[project]/main.go,在 http.NewServer 创建后,插入以下代码块:
srv := http.NewServer(http.WithMiddleware(middleware...))// 嵌入 OpenAPI 文档srv.Handle("/swagger/doc.json", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") b, _ := ioutil.ReadFile("api/openapi.yaml") yaml2json := yaml.YAMLToJSON(b) w.Write(yaml2json)}))// 挂载 Swagger UIsrv.HandlePrefix("/swagger/", http.StripPrefix("/swagger/", swaggerFiles.Handler))
第三步:引入必要依赖
在 main.go 的 import 中添加:
_ "github.com/swaggo/http-swagger""gopkg.in/yaml.v3""io/ioutil"
第四步:启动服务并访问
执行 kratos run → 等待控制台输出 [HTTP] server listening on: [::]:8000 → 浏览器打开 http://localhost:8000/swagger/index.html。


















