-
Notifications
You must be signed in to change notification settings - Fork 60
snow_doc
ACoderHIT edited this page Sep 8, 2019
·
3 revisions
日常开发中,文档有着非常重要的地位,客户端和服务端的开发是通过先定义好接口格式,提供接口文档开始的。在项目交接中,接口文档也是让一个新人快速了解业务和代码的重要一环。然而在实际开发中,因为人的惰性和公司的人员变动会导致文档维护的不够完善。snow框架提供这样一个功能,正是为了让大家可以方便快捷的生成接口文档。
app/http/controllers
官方:Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。 我个人认为,swagger的一个优点是实时同步api与文档。另外一个优点在于方便测试和mock数据,在文档中,可以点击"Try it out" -> "Execute"来执行接口验证是否可用,同时也可以根据不同场景自己用多种数据进行边界测试。
- 使用前请先将snow框架升级 snow upgrade (v1.2.0后的version)
- 再创建完项目后,执行snow doc
- 然后对项目进行正常的编译和启动流程
- 浏览器输入http://localhost:8080/swagger/index.html 即可看到文档
目前接入的swagger是通过解析方法注释来生成文档,以test_validator接口为例(app/http/router.go文件中) ,在app/http/controllers/test.go文件中的HandleTestValidator方法上面加入注释
// validator的示例
// HandleTestValidator godoc
// @Summary HandleTestValidator的示例
// @Description HandleTestValidator的示例
// @Tags snow
// @Accept json
// @Produce json
// @Param testValidator body entities.TestValidatorRequest true "example of validator"
// @Success 200 {array} entities.TestValidatorRequest
// @Failure 400 {object} controllers.HTTPError
// @Failure 404 {object} controllers.HTTPError
// @Failure 500 {object} controllers.HTTPError
// @Router /test_validator [post]
在TestValidatorRequest中每个字段加上example,比如:
type TestValidatorRequest struct {
// tips,因为组件required不管是没传值或者传 0 or "" 都通过不了,但是如果用指针类型,那么0就是0,而nil无法通过校验
Id *int64 `json:"id" validate:"required" example:"1"`
Age int `json:"age" validate:"required,gte=0,lte=130" example:"20"`
Name *string `json:"name" validate:"required" example:"snow"`
Email string `json:"email" validate:"required,email" example:"snow@github.com"`
Url string `json:"url" validate:"required" example:"github.com/qit-team/snow"`
Mobile string `json:"mobile" validate:"required" example:"snow"`
RangeNum int `json:"range_num" validate:"max=10,min=1" example:"3"`
TestNum *int `json:"test_num" validate:"required,oneof=5 7 9" example:"7"`
Content *string `json:"content" example:"snow"`
Addresses []*Address `json:"addresses" validate:"required,dive,required"`
}
// Address houses a users address information
type Address struct {
Street string `json:"street" validate:"required" example:"huandaodonglu"`
City string `json:"city" validate:"required" example:"xiamen"`
Planet string `json:"planet" validate:"required" example:"snow"`
Phone string `json:"phone" validate:"required" example:"snow"`
}
解释一下几个关键注释的含义:
- Param对参数的举例,如果"try it out"需要用到
- Router为执行"try it out"时候的路径
- Success和Failure 400等是对接口返回值的距离 注:举例中的success用的数据为entities.TestValidatorRequest,是因为这个接口入参出参形式一样,使用时建议分类request和response
- 其他可以参考:https://github.com/swaggo/swag#general-api-info
- 如果注释更改,请重新执行snow doc,然后再编译运行
- 如果项目端口更改,对应main.go函数上面的@host localhost:8080 注释请同步更改