Gin使用swagger生成接口文档的代码示例

 更新时间:2024年06月11日 08:25:33   作者:NanYan  
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful Web 服务,它使用 YAML 或 JSON 格式来定义 API 的结构,本文给大家介绍了Gin使用swagger生成接口文档的代码示例,需要的朋友可以参考下

什么是swagger

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful Web 服务。它使用 YAML 或 JSON 格式来定义 API 的结构,包括请求、响应、参数等信息。Swagger 的主要特点包括:

  • 规范性:Swagger 定义了一套 API 描述的标准,使得开发者可以以统一的方式描述 API。
  • 自动生成文档:Swagger 可以自动生成 API 文档,使得开发者和用户可以快速了解 API 的使用方法。
  • 交互式文档:Swagger 提供了一个交互式的用户界面,用户可以直接在文档中尝试 API 调用。
  • 代码生成:Swagger 可以根据 API 描述自动生成服务器和客户端的代码,节省开发时间。
  • 社区支持:Swagger 有广泛的社区支持,许多开发者和公司都在使用它来构建和管理他们的 API。
  • 工具链集成:Swagger 可以与许多开发工具和平台集成,如 Spring Boot、.NET Core、Node.js 等。
  • 版本控制:Swagger 支持 API 的版本控制,使得 API 的迭代更加灵活。

Swagger 现在通常与 OpenAPI Specification (OAS) 结合使用,后者是一个由 Linux 基金会支持的开放标准,用于描述 API。Swagger 的工具和生态系统现在也支持 OAS。

swagger安装

$ go get -u github.com/swaggo/swag/cmd/swag 
# 1.16 及以上版本 
$ go install github.com/swaggo/swag/cmd/swag@latest

gin-swagger

安装

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

使用

想要使用gin-swagger为你的代码自动生成接口文档,一般需要下面三个步骤:

  • 按照swagger要求给接口代码添加声明式注释,具体参照声明式注释格式。
  • 使用swag工具扫描代码自动生成API接口文档数据
  • 使用gin-swagger渲染在线接口文档页面

添加注释

在程序入口main函数上以注释的方式写下项目相关介绍信息。

package main

// @title 这里写标题
// @version 1.0
// @description 这里写描述信息
// @termsOfService http://swagger.io/terms/

// @contact.name 这里写联系人信息
// @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 这里写接口服务的host
// @BasePath 这里写base path
func main() {
	r := gin.New()

	// liwenzhou.com ...

	r.Run()
}

在你代码中处理请求的接口函数(通常位于controller层)按如下方式写上注释:

// GetCommunityHandler 获取社区列表
// @Summary 获取社区列表
// @Description 获取社区列表
// @Tags 社区列表
// @Accept json
// @Produce json
// @Param Authorization header string true "Bearer 用户令牌"
// @Success 200 {object} models.GetCommunityListParams "成功"
// @Router /community [get]
// @Request Body models.GetCommunityListParams "社区列表"
func GetCommunityHandler(c *gin.Context) {
    // 获取社区列表 (Community_id, Community_name) list
    list, err := communityLg.GetCommunityList()
    if err != nil {
       api.ResponseErrorWithMsg(c, 200, "获取社区列表失败")
       return
    }
    api.ResponseSuccess(c, list)
}

生成接口文档数据

在项目根目录中运行命令:swag init,将会解析注解并生成所需的文件(doc文件夹和docs.go,swagger.json,swagger.yaml

swag init

执行完命令后,会生成以下文件

./docs
├── docs.go
├── swagger.json
└── swagger.yaml

然后在项目代码中注册路由的地方按如下方式引入gin-swagger相关内容:

import (

	_ "project/docs"  // 千万不要忘了导入把你上一步生成的docs

	gs "github.com/swaggo/gin-swagger"
	"github.com/swaggo/gin-swagger/swaggerFiles"

	"github.com/gin-gonic/gin"
)

注册swagger api相关路由

r.GET("/swagger/*any", gs.WrapHandler(swaggerFiles.Handler))

项目程序运行起来,打开浏览器访问http://localhost:8080/swagger/index.html就能看到Swagger Api文档了。

gin-swagger同时还提供了DisablingWrapHandler函数,方便我们通过设置某些环境变量来禁用Swagger。例如:

r.GET("/swagger/*any", gs.DisablingWrapHandler(swaggerFiles.Handler, "NAME_OF_ENV_VARIABLE"))

可能遇到的问题

在我使用时发现在执行swag init时,会出现找不到gorm.Model的情况。

解决方案:

在命令行加上 --parseDependency --parseInternal

swag init --parseDependency --parseInternal

到此这篇关于Gin使用swagger生成接口文档的代码示例的文章就介绍到这了,更多相关Gin swagger接口文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言中make和new函数的用法与区别

    Go语言中make和new函数的用法与区别

    这篇文章介绍了Go语言中make和new函数的用法与区别,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 一文详解Golang的函数特性

    一文详解Golang的函数特性

    函数是 Golang 中非常重要的组成部分之一,它们提供了代码的可重用性和组织性。在本文中,我们将深入了解 Golang 函数的多个方面,希望对大家有所帮助
    2023-04-04
  • Go Web编程添加服务器错误和访问日志

    Go Web编程添加服务器错误和访问日志

    这篇文章主要为大家介绍了Go Web编程添加服务器错误日志和访问日志的示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Mac GoLand打不开(闪退)也不报错的解决方案

    Mac GoLand打不开(闪退)也不报错的解决方案

    这篇文章主要介绍了Mac GoLand打不开(闪退)也不报错的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Golang简单实现http的server端和client端

    Golang简单实现http的server端和client端

    Http 服务是基于 Tcp 的应用层的实现,也是最常见的网络协议之一。本文主要介绍了Golang简单实现http的server端和client端,感兴趣的可以了解一下
    2021-06-06
  • golang中判断请求是http还是https获取当前访问地址

    golang中判断请求是http还是https获取当前访问地址

    这篇文章主要为大家介绍了golang中判断请求是http还是https获取当前访问地址示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Go并发之RWMutex的源码解析详解

    Go并发之RWMutex的源码解析详解

    RWMutex是一个支持并行读串行写的读写锁。RWMutex具有写操作优先的特点,写操作发生时,仅允许正在执行的读操作执行,后续的读操作都会被阻塞。本文就来从源码解析一下RWMutex的使用
    2023-03-03
  • PHP与Go语言之间的通信详解

    PHP与Go语言之间的通信详解

    相信大家都知道不同语言之间的通信方式有很多种,这篇文章详细的介绍了PHP与Go语言之间如何通信,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-10-10
  • VS Code安装go插件失败原因分析以及解决方案

    VS Code安装go插件失败原因分析以及解决方案

    vscode安装go插件时,由于各种原因,在安装插件时总是失败,下面这篇文章主要给大家介绍了关于VS Code安装go插件失败原因分析以及解决的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • go micro集成链路跟踪的方法和中间件原理解析

    go micro集成链路跟踪的方法和中间件原理解析

    这篇文章主要介绍了go-micro集成链路跟踪的方法和中间件原理,关于Http或者说是Restful服务的链路跟踪,go-micro的httpClient支持CallWrapper,可以用WrapCall来添加链路跟踪的CallWrapper,本文给大家介绍的非常详细,需要的朋友参考下吧
    2022-05-05

最新评论