swag可以集成在多个web框架中,一键生成api文档,可以让你更加专注于业务逻辑,更加专注于开发。另外通过swagger插件可以使文档在线运行并调用接口,兼顾部分测试api接口的功能。
本文主要介绍如何在hertx中使用swagger,并以案例的形式阐述各个api注释的作用,并实现远程调用访问swagger。
效果图:
## 安装到gopath中,其它项目也可以使用swag插件
go install github.com/swaggo/swag/cmd/swag@latest
# 仅在本项目安装
go get github.com/swaggo/swag/cmd/swag
通用注释就是介绍swagger信息,项目信息,协议,外连接等。如下所示:
注释如下:
// @title Hertz-swag
// @version 1.0
// @description This is a demo using Hertz-swag.
// @contact.name hertz-contrib
// @contact.url https://github.com/hertz-contrib
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host localhost:8888
// @BasePath /
// @schemes http
那么从上到下依次是:
注释 | 说明 |
---|---|
@title | 项目名称 |
@version | 项目版本 |
@description | 项目描述 |
@contact.name | 联系人名称 |
@contact.url | 联系人地址 |
@license.name | 协议名称 |
@license.url | 协议地址 |
@host | 主机地址 |
@BasePath | 基础路径 |
@schemes | 协议 |
上面只是一部分,实际还有很多,具体可以参考官方文档:API General Info 一般情况下,只要一个title,version,lisence.name && url,schemes就可以了,如下:
路由注释就是介绍接口信息,请求方式,请求路径,请求参数,响应参数,响应状态码等。如下图所示:
实际上并不需要这么多,通过实践来看一般需要
Summary
,Description
,Tags
,Param
,Success
,Failure
,Router
即可。
注释 | 说明 |
---|---|
@Summary | 接口名称(接口后的注释) |
@Description | 接口描述 |
@Tags | 接口标签(路由分组,重要) |
@Param | 请求参数(后面单独解析,重要) |
@Success | 响应状态码(成功返回参数) |
@Failure | 响应状态码(失败返回参数) |
@Router | 路由(定义了接口和请求方法) |
上面只是一部分,实际还有很多,具体可以参考官方文档:swagger
如下所示的注释和生成的在线文档:
// Showregister godoc
// @Id 1
// @Summary get a new account
// @Description register user
// @Tags user
// @Accept json
// @Produce json
// @Param user body user.User true "user info"
// @Success 200 {object} user.User
// @Failure 400 {object} utool.HTTPError
// @Router /user/register [POST]
func RegisterUser(ctx context.Context, c *app.RequestContext) {
var err error
var req user.User
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
return
}
resp := new(user.User)
c.JSON(consts.StatusOK, resp)
}
展开如下:
显然@Param
,@Success
,@Failure
,@Router
是最重要的注释,其他的都是辅助注释。
注意:
@Param
注释中,type
字段是必填项,name
字段是必填项,description
字段是必填项,required
字段是可选项,default
字段是可选项。@Success
和@Failure
注释中,code
字段是必填项,其后都是{object} 响应参数
的json格式,后面跟着响应参数的类型,如{object} user.User
,这个user.User
是我们定义的结构体。@Router
注释中,path
字段是必填项,method
字段是必填项`,path填理由,method填请求方法。
@Param [请求变量名] [HTTP请求类型] [请求参数类型] [是否必填 true false] [请求参数说明]
请求变量名自定义,一般要求和方法参数一样
请求参数类型
类型 | 说明 |
---|---|
query | 查询参数,请求行中,格式:xxx?key=value&key2=value2
|
path | 路径参数,请求行中,格式:xxx/:value/:value2
|
header | 请求头,请求头中,格式:xxx:value ,如Authorization
|
formData | 表单 |
body | 请求体,一般为json |
file | 文件 |
cookie | cookie |
是否必填,true表示必填,false表示非必填,默认是false。
请求参数说明,一般是参数的作用,如@Param user body user.User true "user info"
,表示请求参数为user
类型,参数为user.User
结构体,必填,参数说明为user info
。
注意:
- 一般情况下,
@Param
注释中,type
字段是必填项,也就是HTTP请求必填`- 更多请看官网swag
类型 | 说明 |
---|---|
object | 对象 |
array | 数组 |
string | 字符串 |
int | 整型 |
状态码 | 说明 |
---|---|
200 | 成功 |
400 | 请求错误 |
401 | 未授权 |
403 | 禁止访问 |
404 | 未找到 |
500 | 服务器错误 |
注意:
- 一般情况下,
@Success
和@Failure
注释中,code
字段是必填项,也就是HTTP响应状态码
与响应参数类型对应即可
略
确保已经安装了swag插件,编写完注释后,执行如下命令即可生成api文档:
swag init
注意:
- 确保在更目录下,项目中需要有main函数。
执行完命令后,会在当前目录下生成docs
目录,如下文件:
docs
目录结构如下:
)
├── docs
│ ├── docs.go
│ ├── swagger.yaml
│ ├── swagger.json
docs.go是自动生成的,主要是用于生成swagger文档的,可以忽略。
hertz-swagger
go get github.com/hertz-contrib/swagger
go get github.com/swaggo/files
hertz-swagger
和docs
import "github.com/hertz-contrib/swagger" // hertz-swagger middleware
import "github.com/swaggo/files" // swagger embed files
import _ "userservice/docs" //docs没有实际引用但是需要使用json文件
url := swagger.URL("http://192.168.5.167:8081/swagger/doc.json") // The url pointing to API definition
h.GET("/swagger/*any",swagger.WrapHandler(swaggerFiles.Handler, url))
注意:
- swagger.URL("http://192.168.5.167:8081/swagger/doc.json") 中swagger.URL是
"github.com/hertz-contrib/swagger"
库的方法,swagger.WrapHandler(swaggerFiles.Handler, url)
不用改动h
是*Hertz
对象。
访问http://localhost:8080/swagger/index.html
即可看到api文档。
注意:
- localhost是本地极大值,局域网中需要换为ip地址。
- 如果在局域网被其他人访问,hertx服务器需要启动在
0.0.0.0
地址上,如:h := server.New(server.WithHostPorts("0.0.0.0:8081"))
- 访问
http://localhost:8080/swagger/doc.json
可以看到json格式的文档。
通过swag
插件,可以自动生成api文档,并且可以访问api文档。
注意:
- 注意
@Param
注释中,type
字段是必填项,name
字段是必填项,description
字段是必填项,required
字段是可选项,
0.0.0.0
地址,如:h := server.New(server.WithHostPorts("0.0.0.0:8081"))
。swagger.URL()
需要指定为本地ip,不能是localhost和127.0.0.1Access-Control-Allow-Origin: *
,或者添加放行的ip地址,不然会有cors跨域问题。cors
库加,使用第一种是中间件要在swagger.WrapHandler()
之前不然无效。)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。