使用GoFrame
框架自动化生成接口文档非常简单。
我们首先对前面章节的接口数据结构进行简单的完善,以便生成的接口文档更加优雅。
接口定义完善
type HelloReq struct {
g.Meta `path:"/" method:"get" tags:"Test" summary:"Hello world test case"`
Name string `v:"required" json:"name" dc:"姓名"`
Age int `v:"required" json:"age" dc:"年龄"`
}
type HelloRes struct {
Content string `json:"content" dc:"返回结果"`
}
可以看到,基于前面章节的接口数据结构定义,我们在其g.Meta
中增加了两个标签:
tags
: 该接口属于哪个分类,或者接口模块。summary
: 接口描述。
信息
这些标签都是OpenAPIv3
标准接口协议的规范字段,在开发手册对应章节有关于接口文档生成以及标签的详细讲解,我们这里不作过多介绍。
完整代码示例
main.go
package main
import (
"context"
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
type Response struct {
Message string `json:"message" dc:"消息提示"`
Data interface{} `json:"data" dc:"执行结果"`
}
type HelloReq struct {
g.Meta `path:"/" method:"get" tags:"Test" summary:"Hello world test case"`
Name string `v:"required" json:"name" dc:"姓名"`
Age int `v:"required" json:"age" dc:"年龄"`
}
type HelloRes struct {
Content string `json:"content" dc:"返回结果"`
}
type Hello struct{}
func (Hello) Say(ctx context.Context, req *HelloReq) (res *HelloRes, err error) {
res = &HelloRes{
Content: fmt.Sprintf(
"Hello %s! Your Age is %d",
req.Name,
req.Age,
),
}
return
}
func Middleware(r *ghttp.Request) {
r.Middleware.Next()
var (
msg string
res = r.GetHandlerResponse()
err = r.GetError()
)
if err != nil {
msg = err.Error()
} else {
msg = "OK"
}
r.Response.WriteJson(Response{
Message: msg,
Data: res,
})
}
func main() {
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.Middleware(Middleware)
group.Bind(
new(Hello),
)
})
s.SetOpenApiPath("/api.json")
s.SetSwaggerPath("/swagger")
s.SetPort(8000)
s.Run()
}
在本示例中:
- 通过
s.SetOpenApiPath("/api.json")
启用OpenAPIv3
的接口文档生成,并指定生成的文件路径/api.json
。 - 通过
s.SetSwaggerPath("/swagger")
启用内置的Swagger
接口文档UI,并指定客访问的UI地址为/swagger
。内置的Swagger UI
可自定义修改,具体可参考开发手册相应章节。
关于OpenAPIv3
OpenAPIv3
是目前业内的接口文档标准协议,用于接口文档的定义,通常使用json
格式生成。该接口文档json
文件可以用许多接口UI
展示工具打开,例如Swagger UI/PostMan/ApiFox
等等。
关于Swagger
Swagger
是常用的接口文档UI展示工具,支持多种接口文档格式,最常用的接口文档格式当然是OpenAPIv3
。
在本示例中,如果需要使用内置的Swagger UI
查看接口文档,需要同时启用OpenAPIv3
和Swagger UI
。即调用SetOpenApiPath
和SetSwaggerPath
方法设置对应的访问路径。