当前位置: 首页 > article >正文

Swagger与go-zero框架生成和展示API文档详解

在现代API开发中,清晰、准确的接口文档是前后端协作的重要基础。作为一款功能强大的Go语言微服务框架,go-zero提供了简便的方式来生成Swagger文档,极大地提高了API开发的效率与质量。今天,我们将深入探讨Swagger的作用以及如何通过goctl工具快速生成Swagger文档。

Swagger简介

API文档的行业标准,Swagger是一个开源的API文档规范和工具集。它可以帮助开发者设计、构建、文档化和使用RESTful API。作为OpenAPI规范的前身,Swagger已经成为行业标准,被广泛应用于各类项目中。

Swagger的主要优势
  1. 标准化文档:提供结构化的API文档,使API易于理解和使用。
  2. 交互式体验:自带UI界面,可以直接在浏览器中测试API。
  3. 代码生成:支持从文档生成客户端和服务端代码。
  4. 版本控制:方便API的版本管理和迭代。
  5. 减少沟通成本:前后端开发人员可以基于同一份文档协作。
go-zero中的Swagger支持

go-zero框架通过goctl工具提供了Swagger文档的生成功能,可以基于API文件自动生成JSON和YAML格式的Swagger文档。这使得开发者可以专注于业务逻辑的开发,而将API文档的生成工作交给工具自动完成。

温馨提示
  • Swagger功能目前处于实验性阶段。
  • 要求:goctl 版本大于1.8.2。
  • 需要开启实验性功能:goctl env -w GOCTL_EXPERIMENTAL=on
在API文件中定义Swagger信息

go-zero使用自定义的API语法来定义服务接口,同时支持在API文件中添加Swagger相关的元数据。以下是一个示例:

syntax = "v1"info (title: "演示 API" // 对应 swagger 的 titledescription: "演示 api 生成 swagger 文件的 api 完整写法" // 对应 swagger 的 descriptionversion: "v1" // 对应 swagger 的 versiontermsOfService: "https://github.com/zeromicro/go-zero" // 对应 swagger 的 termsOfServicecontactName: "keson.an" // 对应 swagger 的 contactNamecontactURL: "https://github.com/zeromicro/go-zero" // 对应 swagger 的 contactURLcontactEmail: "example@gmail.com" // 对应 swagger 的 contactEmaillicenseName: "MIT" // 对应 swagger 的 licenseNamelicenseURL: "https://github.com/zeromicro/go-zero" // 对应 swagger 的 licenseURLconsumes: "application/json" // 对应 swagger 的 consumes,不填默认为 application/jsonproduces: "application/json" // 对应 swagger 的 produces,不填默认为 application/jsonschemes: "https" // 对应 swagger 的 schemes,不填默认为 httpshost: "example.com" // 对应 swagger 的 host,不填默认为 127.0.0.1basePath: "/v1" // 对应 swagger 的 basePath,不填默认为 /wrapCodeMsg: "true" // 是否用 code-msg 通用响应体,如果开启,则以格式 {"code":0,"msg":"OK","data":$data} 包括响应体bizCodeEnumDescription: "1001-未登录<br>1002-无权限操作" // 业务错误码枚举描述
)type (QueryReq { Id int `form:"id,range=[1:10000],example=10"` Name string `form:"name,example=keson.an"` Avatar string `form:"avatar,optional,example=https://example.com/avatar.png"` }QueryResp { Id int `json:"id,example=10"` Name string `json:"name,example=keson.an"` }
)@server (tags: "query 演示" // 对应 swagger 的 tagssummary: "query 类型接口集合" // 对应 swagger 的 summary
) service Swagger { @doc (description: "query 接口") @handler queryget /query (QueryReq) returns (QueryResp)@doc (description: "query path 中包含 id 字段接口") @handler queryPathget /query/:id (PathQueryReq) returns (PathQueryResp)
}
goctl swagger 命令的使用方法

goctl swagger 是go-zero提供的命令行工具,用于根据API文件生成Swagger文档。以下是其基本用法:

生成Swagger文档
# 基本用法
goctl api swagger --api <api文件路径> --dir <输出目录># 示例
goctl api swagger --api example.api --dir ./docs/swagger
常用参数说明
  • --api:指定API文件的路径。
  • --dir:指定生成的Swagger文档的输出目录。
Swagger文档的使用

生成Swagger文档后,可以通过多种方式进行查看和使用:

使用Swagger UI
  1. 准备Swagger JSON文件:确保你有一个有效的Swagger/OpenAPI规范的JSON文件。这个文件通常命名为swagger.jsonopenapi.json,并放置在你的web服务器的可访问目录下。例如,文件路径可能是http://yourdomain.com/api/swagger.json

  2. 下载并部署Swagger UI:Swagger UI是一个开源项目,可以直接从GitHub页面下载或者通过npm安装。下载后,将Swagger UI的静态文件部署到你的web服务器上。这些文件通常包括一个HTML文件(如index.html)和其他必要的CSS、JS资源。

  3. 配置Swagger UI:打开Swagger UI的index.html文件,找到如下配置部分:

    <!-- 在这里配置Swagger UI -->
    <script>
    window.onload = function() {// 初始化Swagger UISwaggerUIBundle({url: "https://petstore.swagger.io/v2/swagger.json", // 修改为你的Swagger JSON文件URLdom_id: '#swagger-ui',presets: [SwaggerUIBundle.presets.apis,SwaggerUIStandalonePreset],layout: "BaseLayout",deepLinking: true,showExtensions: true,showCommonExtensions: true})
    }
    </script>
    

    url属性的值替换为你第一步中准备好的Swagger JSON文件的实际URL。

  4. 访问Swagger UI:部署好Swagger UI及其依赖资源后,通过浏览器访问Swagger UI的入口页面(通常是index.html),你就可以看到根据JSON文件生成的API文档界面了。你可以浏览API、阅读描述、尝试调用等。

这种方法适用于那些不想或不能直接在代码中集成Swagger的情况,比如对已有API文档进行快速可视化展示,或者是对第三方API文档进行本地浏览和测试。

实际案例分析

让我们来看一个更复杂的例子,展示在实际项目中如何使用go-zero的Swagger功能:

type (JsonReq { Id int `json:"id,range=[1:10000],example=10"` Name string `json:"name,example=keson.an"` Avatar string `json:"avatar,optional"` Language string `json:"language,options=golang|java|python|typescript|rust"` Gender string `json:"gender,default=male,options=male|female,example=male"` }JsonResp { Id int `json:"id"` Name string `json:"name"` Avatar string `json:"avatar"` Language string `json:"language"` Gender string `json:"gender"` }
)@server (tags: "post json api 演示"summary: "json 请求类型接口集合"
) service Swagger { @doc (description: "简单的 json 请求体接口") @handler jsonSimplepost /json/simple (JsonReq) returns (JsonResp)
}

生成的Swagger文档将包含完整的请求和响应模型定义,包括参数范围、可选值等信息,这使得API的使用变得非常直观和简单。

最佳实践建议

在使用go-zero的Swagger功能时,以下是一些建议的最佳实践:

  1. 完善API描述:在API文件中提供详细的接口描述、参数说明和示例值。
  2. 合理分组:使用@server标签对API进行逻辑分组,提高文档的可读性。
  3. 版本控制:为API定义明确的版本信息,方便管理API的迭代。
  4. 自动化集成:将Swagger文档的生成集成到CI/CD流程中,确保文档与代码的一致性。
  5. 参数校验:充分利用go-zero提供的参数校验功能,保证API的健壮性。
总结

go-zero框架通过goctl工具提供的Swagger支持,极大地简化了API文档的生成和维护工作。虽然目前该功能还处于实验阶段,但已经可以在实际项目中发挥重要作用。开发者只需在API文件中定义接口和数据模型,并开启实验性功能,就可以自动生成标准化的Swagger文档,无需额外的工作。

在微服务架构日益流行的今天,清晰的API文档对于系统的可维护性和开发效率至关重要。go-zero的Swagger支持为开发者提供了一个简单而强大的解决方案,值得在实际项目中应用。希望本文对你理解和使用go-zero的Swagger功能有所帮助!如有任何问题或建议,欢迎在评论区留言讨论。

使用示例

上面步骤成功生成了静态的json文件。接下来可以复制以下内容,将其保存为swagger-ui.html文件,然后放置在任一静态文件目录。比如static/swagger目录下。

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>Swagger UI</title><link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5/swagger-ui.css">
</head>
<body><div id="swagger-ui"></div><script src="https://unpkg.com/swagger-ui-dist@5/swagger-ui-bundle.js"></script><script>window.onload = function() {const ui = SwaggerUIBundle({url: "./goNutpi.json",dom_id: '#swagger-ui'});};</script>
</body>
</html>

在go-zero项目的main.go中启用静态文件服务:

package mainimport ("flag""fmt""net/http""goNutpi/internal/config""goNutpi/internal/handler""goNutpi/internal/svc""github.com/zeromicro/go-zero/core/conf""github.com/zeromicro/go-zero/rest"
)var configFile = flag.String("f", "etc/gonutpi-api.yaml", "the config file")func main() {flag.Parse()var c config.Configconf.MustLoad(*configFile, &c)//启用静态文件服务,目录staticfs := http.Dir("./static")server := rest.MustNewServer(c.RestConf, rest.WithFileServer("/static/", fs))defer server.Stop()ctx := svc.NewServiceContext(c)handler.RegisterHandlers(server, ctx)fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)server.Start()
}

最后,启动服务。在浏览器中就可以访问啦。如:

http://120.27.146.247:7000/static/docs/swagger/swagger-ui.html

通过上述步骤,您可以基于静态Swagger JSON文件使用Swagger UI来展示和测试API,而不需要直接集成到代码中。这种方式非常适合文档和测试的需求,极大地提高了API开发的效率与质量。

相关文章:

Swagger与go-zero框架生成和展示API文档详解

在现代API开发中&#xff0c;清晰、准确的接口文档是前后端协作的重要基础。作为一款功能强大的Go语言微服务框架&#xff0c;go-zero提供了简便的方式来生成Swagger文档&#xff0c;极大地提高了API开发的效率与质量。今天&#xff0c;我们将深入探讨Swagger的作用以及如何通过…...

“安康杯”安全生产知识竞赛活动流程方案

一、竞赛组织部门&#xff1a;排水公司安全生产办公室 二、竞赛说明&#xff1a; 1、由安全生产办公室组编辑、整理&#xff0c;安全生产领导小组审核。竞赛时由公司领导及各部门负责人对本次知识竞赛进行监督评比&#xff0c;以保证竞赛活动的公平、公正。本次竞赛活动由闫红…...

特征分解:线性代数在AI大模型中的核心工具

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...

sqlite的拼接字段的方法(sqlite没有convert函数)

我在sqlserver 操作方式&#xff1a; /// <summary>///获取当前门店工资列表/// </summary>/// <param name"wheres">其他条件</param>/// <param name"ThisMendian">当前门店</param>/// <param name"IsNotU…...

【SSL部署与优化​】​​OCSP Stapling配置指南:减少证书验证延迟​​

以下是 通过 Nginx 和 Apache 启用 OCSP Stapling 的详细配置指南&#xff0c;帮助您减少证书验证延迟并提升 HTTPS 性能&#xff1a; 一、OCSP Stapling 核心原理 • 目的&#xff1a;服务器定期从 CA 获取 OCSP&#xff08;在线证书状态协议&#xff09;响应&#xff0c;缓存…...

【C#】Invalidate()的使用

Invalidate()的使用 Invalidate() 是 C# 中用于通知控件需要重新绘制的方法。它通常用于 Windows Forms 应用程序中&#xff0c;当想要更新控件的显示内容时使用。调用 Invalidate() 方法后&#xff0c;系统会安排对该控件进行重绘&#xff0c;这将导致后续调用 OnPaint 方法&…...

理解计算机系统_并发编程(10)_线程(七):基于预线程化的并发服务器

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 接续理解计算机系统_并发编程(9)_线程(六):读者-写者问题-…...

身份认证: JWT和Session是什么?

一、为什么需要临时凭证&#xff1f; 系统面临三个核心约束&#xff1a; 唯一鉴权方式只有&#xff08;账号&#xff0c;密码&#xff09; 服务端不记录请求状态&#xff0c;服务端不知道用户已登录了 避免重复传输敏感信息&#xff0c;不能每次都携带(账号&#xff0c;密码…...

OpenFOAM 字典系统与求解器配置解析机制

文章目录 OpenFOAM 字典系统与求解器配置解析机制字典系统的基本结构配置文件解析流程字典实现细节1. 字典存储结构2. 条目类型3. 令牌系统4. 解析过程 典型配置文件示例解析字典访问机制高级特性性能考虑 OpenFOAM 字典系统与求解器配置解析机制 OpenFOAM 使用一套独特的字典…...

机器学习中的多GPU训练模式

文章目录 一、数据并行&#xff08;Data Parallelism&#xff09;二、模型并行&#xff08;Model Parallelism&#xff09;1. 模型并行2. 张量并行&#xff08;Tensor Parallelism&#xff09; 三、流水线并行&#xff08;Pipeline Parallelism&#xff09;四、混合并行&#x…...

TPAMI 2025 | CEM:使用因果效应图解释底层视觉模型

底层视觉可解释性专题&#xff1a;https://x-lowlevel-vision.github.io/ 论文&#xff1a;https://arxiv.org/abs/2407.19789 代码&#xff1a;https://github.com/J-FHu/CEM 动机 在底层视觉领域&#xff0c;深度学习模型虽极大提升了任务性能&#xff0c;但其内部运行机…...

小红书文章内容提取免费API接口教程

接口简介&#xff1a; 提取指定小红书文章内容。本接口仅做内容提取&#xff0c;未经作者授权请勿转载。 请求地址&#xff1a; https://cn.apihz.cn/api/caiji/xiaohongshu.php 请求方式&#xff1a; POST或GET。 请求参数&#xff1a; 【名称】【参数】【必填】【说明】 【…...

Halcon 图像预处理②

非线性图像分段变化&#xff1a; 先窗体打开图片 对数非线性变化&#xff1a; 结果图像的亮度/对比度显著增加 log_image(Image,LogImag1,e) 参数1&#xff1a;输入图像 参数2&#xff1a; 输出图像 参数3&#xff1a;底数 log_image(Image,LogImage2,0.1) 图像结果亮度和…...

20250526-C++基础-函数指针

C基础-函数指针 函数指针&#xff0c;顾名思义就是指向函数的指针&#xff0c;用一个变量来存储函数的地址&#xff0c;可以通过这个变量&#xff08;指针&#xff09;间接访问函数。&#xff08;可以把函数指针名看作函数名来进行函数调用&#xff09;。代码及说明如下&#…...

软考 系统架构设计师系列知识点之杂项集萃(73)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;72&#xff09; 第126题 可一次性编程的只读存储器是( )。 A. ROM B. PROM C. EPROM D. EEPROM 正确答案&#xff1a;B。 解析&#xff1a; ROM&#xff1a;出厂时已编程&#xff0c;用户无…...

大模型训练中的GPU作用解析

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4-turbo模型辅助完成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认…...

Flutter Web 3.0革命:用WebGPU实现浏览器端实时光追渲染,性能提升300%

一、WebGPU为何是图形渲染的未来&#xff1f; 1. 传统WebGL的致命瓶颈 // WebGL 2.0绘制调用示例&#xff08;每秒帧率<45&#xff09; gl.drawElements(gl.TRIANGLES, vertexCount, gl.UNSIGNED_SHORT, 0); 性能对比表&#xff1a; 场景WebGL 2.0WebGPU三角形绘制速率…...

DeepSeek-V3-0526乍现

DeepSeek-V3-0526 可能是 DeepSeek 最新发布的模型版本&#xff0c;相较于之前的 DeepSeek-V3-0324&#xff0c;它在代码能力、推理性能和本地部署方面有了进一步提升。以下是关于该版本的主要信息&#xff1a; - DeepSeek-V3-0526 在多项基准测试中表现优异&#xff0c;性能…...

Java设计模式之观察者模式:从基础到高级的全面解析

文章目录 一、观察者模式基础概念1.1 什么是观察者模式?1.2 观察者模式的四大角色1.3 观察者模式类图二、观察者模式实现步骤2.1 基础实现步骤2.2 详细代码实现第一步:定义主题接口第二步:定义观察者接口第三步:创建具体主题第四步:创建具体观察者第五步:客户端使用三、观…...

C/C++---类型转换运算符

在C中&#xff0c;类型转换运算符&#xff08;Type Conversion Operator&#xff09;允许类对象在需要时自动转换为其他类型。这是一种特殊的成员函数&#xff0c;能够增强类的灵活性和交互性。 1. 基本语法 类型转换运算符的声明格式为&#xff1a; operator 目标类型() co…...

STM32 I2C 通信协议

1、原理 1、硬件电路 一主多从&#xff0c;单片机作为总线主机 SDA&#xff1a;数据线 SCL&#xff1a;时钟线 主机对SCL线完全控制&#xff0c;从机只能读取&#xff1b;在空闲状态下&#xff0c;主机可以主动发起对SDA的控制&#xff0c;只有在从机发送数据和从机应答的时…...

【后端高阶面经:Elasticsearch篇】38、Elasticsearch 高可用架构解析:分片容灾、Translog 调优与双集群

一、高可用架构核心:节点角色与分布式设计 (一)节点角色精细化划分 1. 四大核心节点类型 节点类型核心职责资源配置建议典型部署数量主节点(Master)集群元数据管理(索引创建、分片分配、节点选举)CPU≥4核,内存≥16GB,禁用数据存储3-5个(奇数)数据节点(Data)存储…...

5月26日复盘-自注意力机制

5月26日复盘 一、自注意力机制 Self-Attention Mechanism&#xff0c;自注意力机制&#xff0c;用于捕捉序列数据内部依赖关系的关键技术。它在NLP和CV中非常重要&#xff0c;尤其是Transformer。 1. 产生背景 自注意力机制的产生与序列建模任务&#xff08;如机器翻译、文…...

*HTML `<script>` 标签中的核心属性解析:掌控脚本加载与执行的艺术

HTML <script> 标签中的核心属性&#xff1a;掌控脚本加载与执行的艺术 在网页开发中&#xff0c;<script> 标签是 JavaScript 的“入口”。它不仅决定了脚本如何加载和执行&#xff0c;还深刻影响着页面性能、安全性和跨域策略。本文将深入解析 <script> 标…...

聊一聊接口测试如何设计有效的错误响应测试用例

目录 一、 覆盖常见的错误场景 a. 输入验证错误 b. 认证与权限错误 c. 资源操作错误 d. 业务逻辑错误 e. 服务端错误 二、设计测试用例的关键原则 a. 明确的错误信息 b. 正确的 HTTP 状态码 c. 幂等性处理 d. 安全性与敏感信息 三、测试用例设计模板 四、工具与自…...

记忆上传与自我同一性的哲学-技术综合分析

记忆上传与自我同一性的哲学-技术综合分析 在2025年的科技前沿&#xff0c;记忆上传技术已取得突破性进展&#xff0c;但其引发的"自我同一性"问题远比技术实现更为复杂。当记忆被上传至云端&#xff0c;所形成的是真实的自我延续&#xff0c;还是仅仅是一个数据的副…...

人工智能工程师学习路线总结(下)

目录 人工智能工程师学习路线总结&#xff08;下&#xff09; 十、深度学习框架进阶 &#xff08;一&#xff09;TensorFlow分布式训练 &#xff08;二&#xff09;PyTorch模型优化 十一、自然语言处理&#xff08;NLP&#xff09;进阶 &#xff08;一&#xff09;Transf…...

Vue:axios(POST请求)

发送 POST 请求 基本用法 axios.post(/api/login, {username: lcyyyy,password: 123456 }) .then(response > {console.log(请求成功:, response.data); }) .catch(error > {console.error(请求失败:, error); });在 Vue 组件中使用 export default {methods: {async …...

企业级调度器LVS (面试版)

1. 什么是 LVS?有什么作⽤? LVS ( Linux Virtual Server )是⼀个基于 Linux 内核实现的⾼性能、可扩展和可靠的负载均衡。它将多个服务器组成⼀个⾼可⽤、⾼性能和⾼可靠的虚拟服务器集群,通过将客户端的请求转发到不同的后端服务器,实现负载均衡和⾼可⽤性。 2.什么是 …...

从OTA双雄「共舞」,透视旅游持续繁荣背后的结构性跃迁

2025年&#xff0c;中国旅游市场仍在持续复苏中。 文化和旅游部发布的国内出游数据显示&#xff0c;2025年一季度&#xff0c;国内出游人次17.94亿&#xff0c;比上年同期增加3.75亿&#xff0c;同比增长26.4%&#xff1b;国内居民出游总花费1.80万亿元&#xff0c;比上年同期…...