什么是swagger?
Swagger是一个简单但功能强大的API表达工具。它具有地球上最大的API工具生态系统,数以千计的开发人员,使用几乎所有的现代编程语言,都在支持和使用Swagger。使用Swagger生成API,我们可以得到交互式文档,自动生成代码的SDK以及API的发现特性等。
swagger文档长啥样?
一个最简单的swagger文档示例:
1 | swagger: "2.0" |
Tips:阅读本文前提是假设你已经了解了如何编写swagger文档,当然,如果还不了解也没关系,可以去swagger官网查看文档进行学习,并且这里还有一套《Swagger从入门到精通》附上.
本文背景介绍
写作本文的原因是因为公司要求api文档都使用 swagger格式,项目是用golang编写的,作为一个懒癌程序员,怎么能够忍受去编写这么复杂的swagger文档呢?有没有一键生成的工具呢?google一下,还真有,那就是go-swagger项目。go-swagger众多特色功能之一就是Generate a spec from source,即通过源码生成文档,很符合我的需求。
下面就简单介绍下如何为项目加上swagger注释,然后一键生成API文档
开始之前需要安装两个工具:
- swagger-editor:用于编写swagger文档,UI展示,生成代码等…
- go-swagger:用于一键生成API文档
安装swagger-editor,我这里使用docker运行,其他安装方式,请查看官方文档:
1 | docker pull swaggerapi/swagger-editor |
安装go-swagger,我这边使用brew安装,其他安装方式,请查看官方文档
1 | brew tap go-swagger/go-swagger |
好了,现在终于开始正题:start coding!!!
开始编写注释
1.假设有一个user.server,提供一些REST API,用于对用户数据的增删改查。
比如这里有一个getOneUser
接口,是查询用户信息的:
1 | package service |
根据swagger文档规范,一个swagger文档首先要有swagger的版本和info信息。利用go-swagger只需要在声明package之前加上如下注释即可:
1 | // Package classification User API. |
然后在项目根目录下使用swagger generate spec -o ./swagger.json
命令生成swagger.json
文件:
此命令会找到main.go入口文件,然后遍历所有源码文件,解析然后生成swagger.json文件
1 | { |
2.基本信息有了,然后就要有路由,请求,响应等,下面针对getOneUser接口编写swagger注释:
1 | // swagger:parameters getSingleUser |
可以看到在GetUserParam
结构体上面加了一行swagger:parameters getSingleUser
的注释信息,这是声明接口的入参注释,结构体内部的几行注释指明了id这个参数必填,并且查询参数id是在url path中。详细用法,参考: swagger:params
在GetOneUser
函数中:
swagger:route
指明使用的http method,路由,以及标签和operation id,详细用法,参考: swagger:routeResponses
指明了返回值的code以及类型
然后再声明响应:
1 | // User Info |
使用swagger:response
语法声明返回值,其上两行是返回值的描述(我也不清楚,为啥描述信息要写在上面,欢迎解惑),详细用法,参考; swagger:response
然后浏览器访问localhost
,查看swagger-editor界面,点击工具栏中的File->Impoprt File
上传刚才生成的 swagger.json
文件,就可以看到界面:
这样一个简单的api文档就生成了
3.怎么样?是不是很简单?可是又感觉那里不对,嗯,注释都写在代码里了,很不美观,而且不易维护。想一下go-swagger的原理是扫描目录下的所有go文件,解析注释信息。那么是不是可以把api注释都集中写在单个文件内,统一管理,免得分散在各个源码文件内。
新建一个doc.go
文件,这里还有一个接口是UpdateUser
,那么我们在doc.go文件中声明此接口的api注释。先看一下UpdateUser
接口的代码:
1 | func UpdateUser(w http.ResponseWriter, r *http.Request) { |
然后再doc.go文件中编写如下声明:
1 | package service |
这样就把api声明注释给抽离出来了,然后使用命令swagger generate spec -o ./swagger.json
生成json文件,就可以看到这样的结果:
很简单吧,参照文档编写几行注释,然后一个命令生成API文档。懒癌程序员福音~
本文所有示例代码托管在这里
参考: