swag 生成API文档

1,545 阅读2分钟

步骤

1.下载swag

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

2.在接口上方写注释,这块需要提前了解下具体各字段含义

image.png 参考

// RegisterVerify godoc
// @Summary      注册验证
// @Description  RegisterVerify Description
// @Tags         注册验证
// @Accept       json
// @Produce      json
// @Param        username    query    string   true  "用户名称"  用户名
// @Param        password    query    string   true  "用户密码"  密码
// @Success      200  {object}   JSONResult{data=string}
// @Failure      400  {object}  httputil.HTTPError
// @Failure      404  {object}  httputil.HTTPError
// @Failure      500  {object}  httputil.HTTPError
// @Router       /v1/user/RegisterVerify [post]

3.运行命令swag init

命令在项目根目录下执行,swag init 后面-d 会默认在文件夹中找main.go 文件,所以如果注释不是放在main文件里面,用-g 指定具体文件

swag init -g api/v1/login/handler.go

这个命令会在当前目录下生成docs文件夹,里面三个文件,docs.go,swagger.json,swagger.yaml,里面都是页面需要展示的接口信息

4.浏览器中输入http://localhost:8080/swagger/index.html

image.png

部署过程中遇到几个问题

1.报错 internal server error doc.json

image.png

解决

把生成的docs文件import到main文件

image.png

2.外部结构无法解析 报错

cannot find type definition: httputil.HTTPError

image.png

解决

命令后加

--parseDependency --parseInternal

image.png

3.内部依赖无法解析

报错

cannot find type definition: model.User

image.png

尝试解决直接把结构体放在handler文件里面能够解决问题,说明是找不到其他文件里面的结构体

image.png

但是实际项目里面考虑项目分层,需要把结构体放在一个单独model文件夹

解决

在注释的文件里面引入这个包就可以了

image.png

4.需要注释的接口在不同的包里,swag貌似没有提供可以一个命令指定多路径的功能

解决

swag init 会修改 swag.json 和swag.yaml里面的内容,而不是重置,所以如果有多个文件,把文件路径修改了执行多次即可,这里就执行了三次,四个接口

swag init -g cmd/main.go --parseDependency --parseInternal
swag init -g api/v1/login/handler.go --parseDependency --parseInternal
swag init -g api/v1/register/handler.go --parseDependency --parseInternal

5.http错误码只能写数字,无法识别 变量

image.png 解决:

全都换成对应的数字

image.png

6.都一样的话,只会显示一个

code 都是400的话,发现只会显示1个,解决只能是改变code

image.png

image.png

觉得不合理的地方

两个接口的tags如果一样的话,会混在一起,这是两个接口,一个注册,一个登陆,tags写成一样的看着很乱,这里tags的含义感觉更像是接口名称,需要唯一性 image.png

经测试,路由也具有唯一性,如果两个接口路由一样了,后面一个不会生效,被丢弃

参考文档 www.lixueduan.com/posts/go/sw…