目录
5、在swagger中设置Authorization实现jwt校验
1、引言
1.1、什么是swagger
Swagger 是一个强大的测试工具,用于设计、构建、记录和使用 RESTful Web 服务。它提供了一种标准化的方式来描述和文档化 API,使得开发人员可以更轻松地理解和使用这些 API。
1.2、为什么要用swagger
swagger可以根据API的定义自动生成交互性的文档,这些文档是动态生成的,能够实时反应api的现状。节省时间,开发人员无需手动编写和维护 API 文档。减少错误,自动生成的文档减少了因手动编写而导致的错误。快速测试,开发人员和测试人员可以快速测试 API 的功能,而无需编写额外的测试代码。
2、在go语言中安装swagger
1、安装swagger
go get -u github.com/swaggo/swag/cmd/swag
2、检验安装是否成功
swag -v
swag version v1.7.0
3、安装go-swagger的扩展
go get -u -v github.com/swaggo/gin-swagger
go get -u -v github.com/swaggo/files
go get -u -v github.com/alecthomas/template
4、使用 swag CLI 生成文档,运行下列命令生成swagger文档(默认生成 docs.go、swagger.json 和 swagger.yaml 文件)。
swag init
3、编写带有swagger注释的代码
1、在main.go中导包
import(
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
_ "yoloblog1.0/docs" //之前使用swag init 生成的swagger文档的路径
)
2、在具体的路由处理函数上方添加注释,定义该接口的行为。
// Register
// @Summary 用户注册//@Tags User
// @Produce json
// @Param user body system.SysUser true "用户信息"
// @Success 200 {object} system.SysUser
// @Failure 400 {string} string "注册失败"
// @Router /user/register [post]
func (m *UserApi) Register(c *gin.Context) {
var user system.SysUser
c.ShouldBindJSON(&user)
err := userService.Register(&user)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"status": global.FAIL,
"msg": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"status": global.SUCCESS,
"msg": "success",
})
return
}
-
@Summary:接口简述 -
@Produce:返回的 MIME 类型 -
@Param:参数定义(格式:名称 位置 类型 是否必填 描述) -
@Success:成功响应(格式:状态码 {类型} 数据结构 描述) -
@Failure:失败响应 -
@Router:路由路径和方法 -
@Tags:给swagger进行分组
3、在gin路由中声明swagger的接口
func main() {
global.Router = gin.Default()
global.Router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
global.Router.Run(":8080")
}
4、重新初始化swagger
swag init
4、实现结果
访问swagger链接
http://127.0.0.1:8080/swagger/index.html

5、在swagger中设置Authorization实现jwt校验
1、在Swagger配置前面添加上一段安全定义
// @title Your API Title
// @version 1.0
// @description Your API description
// @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// @securityDefinitions.apikey ApiKeyAuth
// @in header
// @name Authorizationfunc main() {
global.Router = gin.Default()utils.Connmysql()
initialize.RunServer()
//程序结束之前,关闭服务器链接
db, _ := global.Db.DB()
defer db.Close()
global.Router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
global.Router.Run(":8080")
}
2、在API处理函数的注释中,使用@Security标签来指定需要使用JWT校验
// @Summary 获取用户信息
// @Description 获取用户详细信息
// @Tags user
// @Accept json
// @Produce json
// @Success 200 {object} User
// @Router /user [get]
// @Security ApiKeyAuth
func GetUser(c *gin.Context) {
// 实现获取用户信息的逻辑
}
6、项目正式部署之后如何处理swagger的api
在正式部署项目时,出于安全和性能考虑,通常需要禁用Swagger UI。以下是几种控制Swagger开启关闭的方式。
1、通过配置文件的方式,在配置文件中添加一个用来控制swagger启闭的字段,通过修改该字段来实现项目的开启、关闭。
2、在项目中定义一个环境变量,来区分是生产环境还是开发环境,用该环境变量来进行判断,开发环境则启用swagger,生产环境则关闭swagger
3、在Nginx中禁止对swagger路径的访问
7、总结
swagger是一个比较简单实用的接口文档工具,希望能够对你的开发学习有所帮助。
8、参考链接
https://juejin.cn/post/7126802030944878600

4016

被折叠的 条评论
为什么被折叠?



