1. Swagger的安装与使用
1.1 Swagger简介(来自ChatGPT)
Swagger是一个开源且流行的api文档生成工具,它可以帮助开发团队在描述和分享api时提供更出色的体验。Swagger为用户提供了集中式的api文档托管器、互动式api文档以及api测试客户端等功能。它支持多种编程语言和框架,并可以根据api定义自动生成客户端库代码。通过Swagger,开发者能够更容易地理解和使用api,在加快应用程序的开发速度的同时也减少了错误率。
1.2 Swagger的安装
首先在参照swag/README.md at master · swaggo/swag · GitHub中的内容,执行相应的go get 操作,但在执行到swag init之前,需要到将swag加入系统环境变量中( 一般swag的bin在Go的bin目录下),否则无法init:
在init完成后,swagger会生成docs文件,主要是用于swagger的api文档配置(包括API的测试配置等):
1.3 Router层的处理
func Router() *gin.Engine {
// 创建默认的gin.Engine对象
r := gin.Default()
docs.SwaggerInfo.BasePath = ""
// 将swagger映射到对应路径
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
// 将相应方法映射到对应路径
r.GET("/index", service.GetIndex)
r.GET("/user/getUserList", service.GetUserList)
r.GET("/product", service.GetProductList)
return r
}
加上了r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)),具体来说,这个语句是在使用gin-swagger
库为gin
应用程序提供swagger ui (rest api文档和测试界面)时所用到的。ginswagger
提供了相应的函数和中间件来实现这个功能。
其中,swaggerfiles.handler
是swaggo
库生成的用于访问swagger规范文件的http处理器。而ginswagger.wraphandler
则可以将这个处理器包装成gin
能够识别的处理器格式。这样一来,只需在gin
应用程序中使用它就可以使用swagger-ui
对rest api进行文档和测试了。
1.4 Service层的处理
依照下列格式注释方法可以将方法的swagger属性注册到swagger(例如@Tags、@Router等),然后在命令行使用swag init来初始化swagger的各项配置文件,将属性注册到swagger:
// GetUserList 使用gin.Context获取JSON数据
// c是context
// @Tags 用户列表
// @Success 200 {string} json{"code", "message"}
// @Router /user/getUserList [get] 路径:/user/getUserList 方法get
func GetUserList(c *gin.Context) {
users := make([]*models.UserBasics, 10)
users = models.GetUserList()
c.JSON(http.StatusOK, gin.H{
"message": users,
})
}
// GetProductList 使用gin.Context获取JSON数据
// c是context
// @Tags 商品列表
// @Success 200 {string} json{"code", "message"}
// @Router /product [get] 路径:/product 方法get
func GetProductList(c *gin.Context) {
products := make([]*models.Product, 10)
products = models.GetProductList()
c.JSON(http.StatusOK, gin.H{
"message": products,
})
}
注意,配置其他属性可以参考:swag/README.md at master · swaggo/swag · GitHub :
1.5 最终效果
可以看到相应接口的测试结果:
2. Mysql的日志记录自定义
2.1 修改InitMysql
添加日志格式如下:
func InitMysql() {
// 打印Mysql日志
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
logger.Config{
SlowThreshold: time.Second, // 慢SQL阈值
LogLevel: logger.Info, // 级别
Colorful: true, // 彩色
},
)
DB, _ = gorm.Open(mysql.Open(viper.GetString("mysql.dsn")), &gorm.Config{Logger: newLogger})
fmt.Println("Mysql init!")
}
2.2 最终效果
3. 总结
今天学习了API测试工具Swagger的配置以及基本使用,除此之外还新增了Mysql日志记录。