【Go】Go Swagger 生成和转 openapi 3.0.3

本文档主要描述在 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.hqwc.cn/news/690463.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java orm 框架比较】十一 新增 原生jdbc对比

迁移到(https://gitee.com/wujiawei1207537021/spring-orm-integration-compare) orm框架使用性能比较 比较mybatis-plus、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_orm、wood、hammer_sql_db、原生jdbc…

Python图形界面(GUI)Tkinter笔记(四):控件的定位(2)

Tkinter(GUI)设计图形界面时有三种控件的包装方法去定位各控件在窗口(父容器、根窗口)上的位置。 【1】pack()方法:用方位来定位位置,类似于Word文档中的文字对齐方式。 【2】grid()方法:用二…

计算机网络技术主要学什么内容,有哪些课程

计算机网络技术专业是一个涉及理论与实践紧密结合的学科,主要学习内容有计算机网络基础、网络设备技术、网络编程等内容,以下是上大学网(www.sdaxue.com)整理的计算机网络技术主要学什么内容,供大家参考! 基…

JVM 类加载机制

JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.class 对…

QX----mini51单片机学习---(7)矩阵键盘

目录 1矩阵键盘的识别 2相关c语言 3实践编程 1矩阵键盘的识别 假设按列扫描按下S6P30:0P34:1然后高流向低,P34:0,刚开始是0xf0:1111 0000 后面是0xe0:1110 0000 ,当是0xe0能确…

了解 Swagger 中 allOf 的最佳实践

Swagger 提供了一个名为 allOf 的特性,它是通过扩展已有的数据模型来构造更为复杂的数据结构的有效手段。这一特性主要用于数据模型的继承及属性的组合,有效减少了代码重复,同时增强了代码的可维护性与清晰度。访问 Swagger 官方网站可以获得…

合专家模型 (MoE) 详解

本文转载自:混合专家模型 (MoE) 详解 https://huggingface.co/blog/zh/moe 英文版:https://huggingface.co/blog/moe 文章目录 一、简短总结二、什么是混合专家模型?三、混合专家模型简史四、什么是稀疏性?五、混合专家模型中令牌的负载均衡…

简洁大气APP下载单页源码

源码介绍 简洁大气APP下载单页源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面 效果截图 源码下载 简洁大气APP下载单页源码

Hive Transaction事务表(含实现原理)

Hive Transaction事务表 在Hive中,事务表(Transactional Tables)允许用户执行事务性操作,包括ACID(原子性、一致性、隔离性、持久性)特性。事务表是在Hive 0.14版本引入的,并且在后续版本中不断…

【本地部署及云化部署】

文章目录 本地部署及云化部署介绍 文章目录 文章目录一、本地部署模式二、云化部署模式总结 一、本地部署模式 需建设专业化机房,系统应用、前端软件全部安装到本地服务器上。需要专业的IT、网络安全、DBA、电气化工程师进行维护。近些年勒索病毒安全事件频发&am…

Q1季度破壁机家电线上市场现状分析:静音降噪仍是主要购买需求

随着生活水平的提高和居民收入提升,破壁机作为日常食品加工的厨卫小家电逐渐受到关注。 而今年Q1季度,线上破壁机市场发展不如预期。根据鲸参谋数据显示,在线上电商平台(京东天猫淘宝)销量累计超过211万元&#xff0c…

Baidu Comate:释放编码潜能,革新软件开发

Baidu Comate Baidu Comate,智能代码助手,凭借着文心大模型的强大支撑,结合了百度多年的编程实战数据和丰富的开源资源,形成了一款崭新的编码辅助利器。它不仅具备着高智能、多场景、价值创造的特质,更可广泛应用于各…