【Go】Go Swagger 生成和转 openapi 3.0.3

news2024/11/17 9:43:08

本文档主要描述在 gin 框架下用 gin-swagger 生成 swagger.json 的内容,中间猜的坑。以及,如何把 swagger 2.0 转成 openapi 3.0.3

下面操作均在项目根目录下执行

生成 swagger 2.0

import swagger
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files

main.go 或者 main 函数所在代码内 import 上面 go get 的包

import "github.com/swaggo/gin-swagger" // gin-swagger middleware
import "github.com/swaggo/files" // swagger embed files
通用 API 注释

在 main.go 或者 main 函数所在代码内添加

具体可以添加的注释见:https://github.com/swaggo/swag?tab=readme-ov-file#general-api-info

// @title           Swagger Example API
// @version         1.0
// @description     This is a sample server celler server.
// @termsOfService  http://swagger.io/terms/

// @contact.name   API Support
// @contact.url    http://www.swagger.io/support
// @contact.email  support@swagger.io

// @license.name  Apache 2.0
// @license.url   http://www.apache.org/licenses/LICENSE-2.0.html

// @host      localhost:8080
// @BasePath  /api/v1
给 controller 接口加注释

具体可以添加的注释见:https://github.com/swaggo/swag?tab=readme-ov-file#api-operation

// Ksd 人声分离接口
//  @Summary      人声分割
//  @Description  传入语音来做人声分割
//  @Tags         ksd
//  @Accept       mpfd
//  @Produce      json
//  @Param        json   body      KsdReq true   "KsdReq"
//  @Response     200       {object}   CommonResp{data=KsdResp}
//  @Router       /aihc/v1/speaker/ksd [post]
func Ksd(ctx *gin.Context) {}

KsdReq 和 CommonResp 是自己定义的 struct,可以直接引用

如果是嵌套的,比如我的 CommonResp 是:

type CommonResp struct {
    Code int `json:"code"`
    Msg  string `json:"msg"`
    Data interface{} `json:"data"`
}

那对应接口返回值就可以用 CommResp{data=KsdResp} 来赋值,出来的网页就会带上这个 KsdResp

构建 swagger docs

在执行 swag 前先 install

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

再调用下面指令生成 docs 目录

swag init
问题
  1. 如果 main 函数所在文件不叫 mian.go

    比如我的 main 函数在 speaker-svc.go

    swag init -g speaker-svc.go
    
  2. Error parsing type definition

    如果出现这个,可能是你确实类型写错了,另一个就是缺少下面两个参数。就是要解析目录中的 go 源文件,以及解析 internal 包中的 go 文件。

    swag init --parseDependency --parseInternal
    
  3. swagger ‘LeftDelim’ unknow

    更新 swag 包

    go get -u github.com/swaggo/swag
    

最后指令,我用的是

swag init -g speaker-svc.go --parseDependency --parseInternal
导入 docs 目录

如果不加打开页面会出现:Fetch error Internal Server Error doc.json

在 main.go 或者 main 函数的代码内导入生成的 docs。path 是你项目的根目录,或者你放到 pkg 下面或者哪里。

import "/path/docs"
路由添加 swagger

r 是 gin.New()

 r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
验证

http://localhost:8080/swagger/index.html

在这里插入图片描述


转换 openapi 3.0.1

方法1:swagger converter

要转换成 3.0.0 是因为最近在尝试,把接口导入 LLMOps 的插件里面,都需要 openapi 的 spec,所以就想说找一下。找了很多方式,最快捷的还是用官方自带的 swag convertor。调用里面的接口,或者用页面的测试,都可以。输入就是上面生成的 swagger.json,输出就是 openapi 的 spec,很明显的标志就是第一行会是 "openapi": "3.0.1",之前是 "swagger": "2.0"

https://converter.swagger.io/#/

在这里插入图片描述

这个网站可以私有化部署,所以可以部署到本地去,方法见:https://github.com/swagger-api/swagger-converter

方法2:封装转换代码

查看了 go-openapi 官方代码和 kin-openapi 做了整合,通过对生成的 swagger.json 做转换

代码见:swagger2openapi3

后面为了方便,打算把 swag 那个工具改一下,把输出的 swagger.json 直接调这个接口,然后生成,省的每次都贴来贴去。


如果有更好的方法或者其他错误,欢迎讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1665304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提高静态住宅代理稳定性妙招

在数字化时代的浪潮中,静态住宅代理因其独特的优势,如固定的IP地址、更高的隐私保护性等,逐渐成为网络爬虫、数据分析等领域不可或缺的工具。然而,静态住宅代理的稳定性问题一直是用户关注的焦点。本文将为您揭示提高静态住宅代理…

分布式任务调度框架xxl-job使用手册

官网地址和文档地址:https://www.xuxueli.com/xxl-job/ 一、快速入门 1.1 下载源码 https://github.com/xuxueli/xxl-job https://gitee.com/xuxueli0323/xxl-job 下载完成后有以下模块 1.2 初始化数据库 官方指定mysql8.0,但我是mysql5.7 执行/xxl…

C++相关概念和易错语法(12)(迭代器、string容量调整)

1.迭代器(以string为例) (1)基本理解:在我们刚接触迭代器的时候,我们可以将迭代器理解为改造过的“指针”,这是一个新的类型,指向对应容器中的各个元素。我们可以像指针那样对迭代器…

朋友圈刷屏的粘土风格照片,你体验过了吗?

Remini 的粘土风格真的丑萌丑萌的! 从去年“妙鸭相机”的走红,到今年Remini的刷屏,其实可以看出大众对于图片趣玩的兴趣非常大! 一张普通的照片经过工具的处理,一下子变成新风格,让人眼前一亮。如果你也对…

【代码分享】使用HTML5的Canvas绘制编码说明图片

最急在工作中遇到一个需求,根据给定的编码生成编码说明,像下面这样的效果。 不同含义的编码用横杠分割,然后每个编码下面用箭头指明具体的含义。下面是我使用canvas实现的代码。具体的编码宽度大家可以根据实际情况进行调整,目前…

Excel如何设置密码保护【图文详情】

文章目录 前言一、Excel如何设置密码保护?二、Excel如何取消密码保护?总结 前言 在软件项目开发过程中,会输出很多技术文档,其中也包括保密级别很高的服务器账号Excel文档。为了确保服务器账号相关的Excel文档的安全性&#xff0…

Python经典案例爬取豆瓣Top250电影数据

随着网络数据的日益丰富,如何从海量的信息中快速、准确地提取出有价值的数据,成为了许多开发者和技术爱好者关注的焦点。在这个过程中,网络爬虫技术凭借其强大的数据获取能力,成为了数据分析和挖掘的重要工具。本文将通过一个经典…

二叉树进阶 --- 上

目录 1. 二叉搜索树的概念及结构 1.1. 二叉搜索树的概念 1.2. 二叉搜索树的结构样例 2. 二叉搜索树的实现 2.1. insert 的非递归实现 2.2. find 的非递归实现 2.3. erase 的非递归实现 2.3.1. 第一种情况:所删除的节点的左孩子为空 2.3.1.1. 错误的代码 2…

[QNX] BSP 网络性能优化:调优io-pkt和ClockPeriod提升网速

0 概要 本文介绍如何在QNX系统上优化网络性能,主要通过调整io-pkt和ClockPeriod参数来实现。通过优化,网络吞吐量可以得到显著提升。 1 优化方法 1.1 调整io-pkt的mclbytes参数: io-pkt是QNX系统中常用的网络协议栈,其mclbytes参数指定了…

一、精准化测试介绍

精准化测试介绍 一、精准化测试是什么?二、什么是代码插桩?三、两种插桩方式Offine模式:On-the-fly插桩: 四、jacoco覆盖率报告展示五、增量代码覆盖率监控原理六、精准测试系统架构图七、全量与增量覆盖率报告包维度对比八、全量与增量覆盖率…

视频断点上传

什么是断点续传 通常视频文件都比较大,所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大小没有限制,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了没有上传完成&#xf…

分布式事务?哪几种方式实现?一文看懂!

什么是分布式事务 分布式事务是指在分布式系统中涉及到多个数据库或多个应用程序之间的事务处理,这些数据库或应用程序可能分布在不同的物理节点上,甚至可能位于不同的地理位置。在分布式事务中,需要确保所有参与者的事务操作都能够保持一致性…

SNMPv3-原理浅谈+报文示例+简易配置

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。 因此本文将在 SNMPv3 协议报文的基础上进行介绍。 SNMPv3 相关 RFC 文档。 关于 SNMPv3 的基本内容介绍,可参考RFC3410-Intro…

vue3中如何更优雅的使用echarts?

echarts在vue或者react中使用存在的问题 每个图表需要从头到尾写地一遍完整的option配置,这样一来的话就会显得十分的冗余在同一个项目中,其实不难发现各类图表设计十分相似,甚至是相同,因此我们没必要一直做重复的工作&#xff…

2.2、Gitea忘记密码重置密码

忘记密码后,管理员可以使用gitea的主程序输入命令重置密码。 gitea admin user change-password --username myname --password asecurepassword

Python多线程与互斥锁模拟抢购余票的示例

一、示例代码: from threading import Thread from threading import Lock import timen 100 # 共100张票def task():global nmutex.acquire() # 上锁temp ntime.sleep(0.1)n temp - 1print(购票成…

树的基本介绍

引入 定义 表示 相关概念 结点:数据元素与指向分支的指针两部分组成 树的深度:树中结点的最大层次 将树A结点(根结点)去掉,树A就变成了森林 区别 实现

vuex核心概念-actions

目录 一、概述 二、应用场景 三、使用步骤 三、注意 四、辅助函数-mapActions 一、概述 目标:明确actions的基本语法,处理异步操作。 需求:一秒钟之后,修改state的count成666。 说明:mutations必须是同步的(便于…

Softing工业推出的edgeConnector将Allen-Bradley控制器集成到工业边缘应用中

2024年4月17日(哈尔),Softing宣布扩展其基于Docker的edgeConnector产品系列,推出了新软件模块edgeConnector Allen Bradley PLC,可方便用户访问来自ControlLogix和CompactLogix控制器数据。 (edgeConnector…

【小红书采集工具】根据搜索关键词批量采集小红书笔记,含笔记正文、笔记链接、发布时间、转评赞藏等

一、背景介绍 1.1 爬取目标 熟悉我的小伙伴都了解,我之前开发过2款软件: 【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取! 【GUI软件】小红书详情数据批量采集,含笔记内容、转评赞藏等,支持…