Hertz 整合swagger

文章目录

    • Swagger
      • 安装
      • 使用用法
      • 项目demo
      • Swagger注释用法
        • 通用API信息
      • swag命令行参数
      • swagger路由配置

Swagger

安装

go get 安装可执行文件需要配合 GOPATH 模式工作。
go get github.com/swaggo/swag/cmd/swag
因为从 Go 1.17 开始,在 go mod 模式下通过 go get 下载对应库文件将无法自动编译并安装到 $GOPATH/bin 的路径, 所以不再推荐用 go get 来安装可执行文件的方式。可以使用 go install来代替。

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

使用用法

  1. 在你的 API 源代码中添加注释。
  2. 在你的 Go 项目的根目录下运行 Swag (例如 ~/root/go-project-name),Swag 会解析注释并在 ~/root/go-project-name/docs 目录下生成必要的文件 (docs 文件夹和 docs/doc.go)。
    swag init
  3. 通过运行以下命令在工程中下载 hertz-swagger :
go get github.com/hertz-contrib/swagger
go get github.com/swaggo/files

并在你的代码中引用如下代码:

import "github.com/hertz-contrib/swagger" // hertz-swagger middleware
import "github.com/swaggo/files" // swagger embed files

效果
在这里插入图片描述

项目demo

使用过程
使用 hertz-swagger 规则为 api 和主函数添加注释,如下所示:
使用 swag init 命令来生成文档,生成的文档将被存储在docs/目录下。
编译运行你的应用程序,之后在 http://localhost:8888/swagger/index.html,可以看到 Swagger UI 界面。

完整代码

package mainimport ("context""github.com/cloudwego/hertz/pkg/app""github.com/cloudwego/hertz/pkg/app/server""github.com/hertz-contrib/swagger"_ "mystudy/docs" //该项一定要配置,否则会出现访问404swaggerFiles "github.com/swaggo/files"
)// PingHandler 测试 handler
// @Summary 测试 Summary
// @Description 测试 Description
// @Accept application/json
// @Produce application/json
// @Router /ping [get]
func PingHandler(c context.Context, ctx *app.RequestContext) {ctx.JSON(200, map[string]string{"ping": "pong",})
}// @title HertzTest
// @version 1.0
// @description This is a demo using Hertz.// @contact.name hertz-contrib
// @contact.url https://github.com/onewcode// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html// @host localhost:8888
// @BasePath /
// @schemes http
func main() {h := server.Default()h.GET("/ping", PingHandler)url := swagger.URL("http://localhost:8888/swagger/doc.json") // The url pointing to API definitionh.GET("/swagger/*any", swagger.WrapHandler(swaggerFiles.Handler, url))h.Spin()
}

访问http://localhost:8888/swagger/index.html

效果
在这里插入图片描述

Swagger注释用法

通用API信息

示例 celler/main.go

注释说明示例
title必填 应用程序的名称。// @title Swagger Example API
version必填 提供应用程序API的版本。// @version 1.0
description应用程序的简短描述。// @description This is a sample server celler server.
tag.name标签的名称。// @tag.name This is the name of the tag
tag.description标签的描述。// @tag.description Cool Description
tag.docs.url标签的外部文档的URL。// @tag.docs.url https://example.com
tag.docs.description标签的外部文档说明。// @tag.docs.description Best example documentation
termsOfServiceAPI的服务条款。// @termsOfService http://swagger.io/terms/
contact.name公开的API的联系信息。// @contact.name API Support
contact.url联系信息的URL。 必须采用网址格式。// @contact.url http://www.swagger.io/support
contact.email联系人/组织的电子邮件地址。 必须采用电子邮件地址的格式。// @contact.email support@swagger.io
license.name必填 用于API的许可证名称。// @license.name Apache 2.0
license.url用于API的许可证的URL。 必须采用网址格式。// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
host运行API的主机(主机名或IP地址)。// @host localhost:8080
BasePath运行API的基本路径。// @BasePath /api/v1

更多请参考 https://github.com/swaggo/swag/blob/master/README_zh-CN.md

swag命令行参数

用参数运行 Swag (全部参数可以通过运行 swag init -h 查看)。

swag init --parseDependency --parseInternal --parseDepth 5 --instanceName "swagger"
选项默认值描述
parseInternalfalse解析内部依赖包。
parseDependencyfalse解析外部依赖包。
parseDepth100解析依赖包深度,如果你知道解析结构的深度,推荐使用这个参数,swag 命令的执行时间会显著减少。
instanceName“swagger”swagger 文档的实例名称。如果要在一个 Hertz 路由上部署多个不同的 swagger 实例,请确保每个实例有一个唯一的名字。

swagger路由配置

你可以使用不同的配置选项来配置 Swagger。

func main() {h := server.Default()h.GET("/ping", PingHandler)url := swagger.URL("http://localhost:8888/swagger/doc.json") // The url pointing to API definitionh.GET("/swagger/*any", swagger.WrapHandler(swaggerFiles.Handler, url, swagger.DefaultModelsExpandDepth(-1)))h.Spin()
}
选项类型默认值描述
URLstring“doc.json”指向 API 定义的 URL
DocExpansionstring“list”控制操作和标签的默认扩展设置。它可以是 list(只展开标签)、full(展开标签和操作)或 none(不展开)。
DeepLinkingbooltrue如果设置为 true,可以启用标签和操作的深度链接。更多信息请参见深度链接文档。
DefaultModelsExpandDepthint1模型的默认扩展深度(设置为 -1 完全隐藏模型)。
PersistAuthorizationboolfalse如果设置为 true,则会持久化保存授权数据,在浏览器关闭/刷新时不会丢失。
Oauth2DefaultClientIDstring“”如果设置了这个字段,它将用于预填 OAuth2 授权对话框的 client_id 字段。

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

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

相关文章

Go 语言中 sync 包的近距离观察

让我们来看看负责提供同步原语的 Go 包:sync。 sync.Mutex sync.Mutex 可能是 sync 包中被广泛使用的原语。它允许对共享资源进行互斥操作(即不允许同时访问): mutex : &sync.Mutex{}mutex.Lock() // Update shared variab…

Jinja2使用Layui报 “d is not defined“

问题出现场景在使用Jinja2渲染Layui的表格时候,要做自定义templte的传入 Jinja2这块本来就是支持 {{ }} 插值的模板语言,所以这块的第一种渲染方式会冲突 所以只能用函数返回代码块进行填充,不能使用插值,只能拼接字符串 templt…

Gradle windows下配置

1.Gradle下载 打开官网下载界面:https://gradle.org/releases/ 如果你使用的SpringBoot项目,建议使用6.8及以上的版本 2.下载后放到目录下 3.配置环境变量 配置gradle_home 配置Path 4.配置成功 5.配置国内源 新建一个init.gradle文件,配…

MySQL- CRUD-单表查询

一、INSERT 添加 公式 INSERT INTO table_name [(column [, column...])] VALUES (value [, value...]); 示例: CREATE TABLE goods (id INT ,good_name VARCHAR(10),price DOUBLE ); #添加数据 INSERT INTO goods (id,good_name,price ) VALUES (20,华为手机,…

虚假IP地址攻击的溯源方法

随着网络技术的迅速发展,网络攻击行为也日益猖獗。其中,虚假IP地址攻击是一种较为常见的网络攻击方式,它利用虚假的IP地址,通过互联网对目标进行攻击和入侵。这种攻击方式不仅难以追踪,而且往往会给企业和个人带来巨大…

股票要怎么买入卖出?

股票账户终于开好了!恭喜你马上就可以开启刺激的炒股之旅了!不过第一次买股票的你是不是还不知道怎么个买法呢?别担心~贴心的汇小鲸带着教程来了,咱们一起看看吧! 首先一点,大家得知道:开好户还…

JavaFramework JDK Version Test

测试JDK8 JDK17编译包 当前环境JDK8 CASE 1: /*** * author ZengWenFeng* email 117791303QQ.com* mobile 13805029595* date 2023-08-07*/ package zwf;import a.T; import ce.pub.util.GUID;/*** 测试高版本JDK编译JAR,低版本错误** author ZengWenF…

震坤行:数字驱动食品农副行业采购的新兴趋势与实践

震坤行:数字驱动食品农副行业采购的新兴趋势与实践 近年来消费者对于营养价值和健康的追求日益凸显,促使各类有机食品、低糖低脂食品、素食等健康食品受到热烈追捧。同时,以往单一的产品也被各家企业“卷”出了个性化,光是卖水&a…

技术经济与企业管理 救命稻草

明天要考试了,今天开始预习! 此课也叫【化工技术经济】、【工程经济学】 目录 第二章 企业战略分析市场预测方法一元线性回归方法简单移动平均法 第三章 资金的时间价值(考)资金时间价值的衡量利率现金流量图资金等值计算&#x…

四、设置主机名和域名映射

目录 1、配置每台虚拟机主机名 2、配置每台虚拟机域名映射 1、配置每台虚拟机主机名

windows ssh时出现Bad local forwarding specification的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

掌握HarmonyOS框架的ArkTs如何管理和共享状态数据

ARKTS(Ark TypeScript)是HarmonyOS应用框架的一部分,提供了一种灵活而强大的状态管理机制。在ARKTS中,AppStorage和LocalStorage是两个关键的概念,它们分别用于应用级和页面级的状态共享。通过深入了解这两个特性&…

2023年建筑轮廓高度数据技术服务

在之前的文章【数据分享】全国62个城市建筑轮廓数据带层数(2018年)和【数据分享】全国77个城市建筑轮廓数据带高度(2019年)里我们分别分享了2018年和2019年2020年2021年2022年的建筑轮廓数据,数据年份也有些老了&#…

计算机网络——数据链路层-封装成帧(帧定界、透明传输-字节填充,比特填充、MTU)

目录 介绍 帧定界 PPP帧 以太网帧 透明传输 字节填充(字符填充) 比特填充 比特填充习题 MTU 介绍 所谓封装成帧,就是指数据链路层给上层交付下来的协议数据单元添加帧头和帧尾,使之成为帧。 例如下图所示: …

蓝桥杯每日一题2023.12.1

题目描述 蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题目而言思路较为重要&#xff0c;实际可以转化为求两个数字对应的操作&#xff0c;输出最前面的数字即可 #include<bits/stdc.h> using namespace std; int main() {for(int i 1…

图解java.util.concurrent并发包源码系列——深入理解定时任务线程池ScheduledThreadPoolExecutor

深入理解定时任务线程池ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor作用与用法ScheduledThreadPoolExecutor内部执行流程DelayedWorkQueueScheduledFutureTask源码分析任务提交ScheduledFutureTask的属性和方法delayedExecute(t) 任务执行ScheduledFutureTask.su…

基于机器深度学习的交通标志目标识别

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 智能交通系统&#xff08;ITS&#xff09;&#xff0c;包括无人驾驶车辆&#xff0c;尽管在道路…

安装两个WIN10/WIN11系统到两个盘中,第二个系统依赖原系统盘引导的问题

前段时间折腾装一个双系统&#xff0c;主要两个方面考虑&#xff1a; 1. 原来的系统又许多软件&#xff0c;想着先保留&#xff1b; 2. 系统想安装到一个固态硬盘中&#xff1b; 在安装的过程中遇到了一些问题&#xff0c;这里记录分享一下。 问题1&#xff0c;运行系统自动安装…

Langchain-Chatchat学习

参考&#xff1a;Langchain-Chatchat 阿里通义千问Qwen 保姆级教程 | 次世代知识管理解决方案 - 知乎 (zhihu.com) 该文档没有安装成功&#xff0c;安装成功的文档 可见&#xff1a;Langchain-Chatchat的安装过程-CSDN博客 中文LLM生态观察 模型 就开源的部分而言&#xf…

Servlet概念视频笔记

学习地址:121-尚硅谷-Servlet-什么是Servlet_哔哩哔哩_bilibili 目录 1.Servlet技术 a.什么是Servlet b.手动实现Servlet程序 c.url地址如何定位到Servlet程序去访问 d.Servlet的生命周期 e.GET 和 POST 请求的分发处理 f.通过继承 HttpServlet 实现 Servlet程序 g.使用…