中转系统接口文档自动生成,OpenAPI/Swagger输出

对于部署了 API 中转服务(如 one-api、new-api 或自研网关)的团队来说,接口文档长期靠手工维护很容易和实际接口脱节。
正确做法是让中转系统直接输出 OpenAPI/Swagger 规范文档,前端、测试和调用方都能拿到统一接口说明。
本文会从准备条件开始,带你把文档自动生成链路完整跑通,并给出验证和避坑方法。

开始前需要确认哪些条件

先确认你的中转系统是否已经内置 OpenAPI 支持。
大部分基于 Gin、FastAPI、Spring Boot 构建的中转程序,都自带 Swagger UI 或 OpenAPI JSON 输出接口,只是默认关闭。

至少准备好三样东西:

  • 一台已部署中转系统的服务器,能通过命令行操作;
  • 中转服务源码或可修改的配置文件(如果是容器部署,需要挂载配置);
  • 一个能访问服务端口的域名或 IP,用于后续验证文档页面。

以常见的 new-api 项目为例,它依赖 Go 的 swaggo 工具生成文档,服务启动后访问 /swagger/index.html 即可看到界面。
如果是自己写的 FastAPI 服务,框架自带 /docs/openapi.json,连额外配置都不需要。

自动生成 OpenAPI/Swagger 文档的两种主流方式

第一种:使用框架自带文档生成器。 这种方式适合新项目或代码结构简单的服务。

以 FastAPI 为例,在入口文件里已经默认注册了路由:

from fastapi import FastAPI

app = FastAPI(title="中转系统 API", version="1.0.0")

@app.get("/v1/models")
def list_models():
    return {"data": ["gpt-4", "claude-3"]}

启动后直接访问:

http://你的服务器IP:端口/docs
http://你的服务器IP:端口/openapi.json

第二种:使用 Swaggo 注解生成。
Go 生态里最常用,适合 one-api 这类项目。
先在项目根目录安装工具:

go install github.com/swaggo/swag/cmd/swag@latest

在路由函数上方写注解,例如:

// @Summary 获取模型列表
// @Tags 模型
// @Produce json
// @Success 200 {object} Response
// @Router /v1/models [get]
func ListModels(c *gin.Context) {}

然后执行:

swag init

生成 docs 目录后,在 main.go 中注册 Swagger 路由:

import (
    ginSwagger "github.com/swaggo/gin-swagger"
    "github.com/swaggo/gin-swagger/swaggerFiles"
    docs "你的项目路径/docs"
)

docs.SwaggerInfo.Title = "中转系统 API"
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

重新编译并启动服务,打开 /swagger/index.html 就能看到带测试按钮的文档页面。

配置后如何验证输出是否正常

文档页面能打开不代表输出一定符合 OpenAPI 规范,建议做两步验证。

先用浏览器访问 JSON 地址,确认返回内容中包含 openapi 字段和 paths 节点:

curl http://127.0.0.1:3000/openapi.json | head -50

正常的输出里应能看到类似结构:

{
  "openapi": "3.0.0",
  "info": {
    "title": "中转系统 API",
    "version": "1.0.0"
  },
  "paths": {}
}

如果 paths 为空,说明路由注解没写全或 swag 没有扫描到对应 controller。
这时检查代码注释格式,重新执行 swag init 并重启服务。

再验证 UI 界面是否能列出所有接口。
打开 /swagger/index.html,左侧应该能展开各个分组,点击接口能看到参数说明和返回值示例。
如果界面 404,多半是静态文件路径没注册对,检查路由注册是否在监听端口上生效。

常见报错与避坑指南

报错一:swag init 生成 docs 失败,提示解析错误。 多数原因是注解缩进不对或注释里出现了特殊字符。
尽量保持注解和函数之间没有空行,且 // 后必须带空格。

报错二:接口文档能打开,但显示 No operations defined in spec。 这是扫描不到路由的表现。
确认项目里是否使用了分组路由,比如 /api/v1,需要把分组路由也加上注释。
也可以先运行 swag init --parseDependency 强制解析依赖包。

报错三:生产环境不想暴露文档页面。 建议通过 Nginx 对 /swagger/openapi.json 加访问控制,只允许内网 IP 或 VPN 访问。

location /swagger/ {
    allow 192.168.1.0/24;
    deny all;
    proxy_pass http://127.0.0.1:3000;
}

另外要注意,自动生成的文档只反映代码中已登记的接口,如果某个路由是动态注册的(比如根据数据库模型临时生成),需要额外写静态注解或用插件补齐。

让文档保持同步的日常维护习惯

接口文档自动生成不代表一劳永逸,代码合并前要养成运行生成命令的习惯。
建议在 CI/CD 流程中加入文档校验步骤:

swag init
if [ -f docs/swagger.json ]; then
    echo "文档生成成功"
else
    echo "文档生成失败,请检查注解"
    exit 1
fi

同时可以打开 Swagger UI 的验证功能,确认所有响应 schema 都能正常解析。
遇到模型字段变更时,优先修改代码里的结构体 tag 和注解,不要手动改 JSON 文件,否则下次生成会被覆盖。

如果你正在处理 108.中转系统接口文档自动生成,OpenAPI/Swagger输出,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
等文档能稳定输出后,再考虑接入 API 网关的文档聚合功能,把多个服务的 OpenAPI 合并成一个统一入口。

分享到:
上一篇
Ollama配合ufw防火墙,仅允许内网访问11434端口
下一篇
中转业务带宽峰值预估,并发用户、token速率换算公式
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意