热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Go添加文档

简介swagger 起步编写文档运行总结当前部分的代码简介对于 API

  • 简介

  • swagger 起步

  • 编写文档

  • 运行

  • 总结

  • 当前部分的代码

简介

对于 API 服务来说, 文档是必不可少的.

然而文档却挺烦人的, 尤其是同步更新的问题. 如果选择手写文档, 经常会忘了更新文档;
或者处于高速开发的前期, 来不及更新文档.

现在更推崇的方式是文档即注释, 就是将文档作为注释, 和代码同步更新,
使用自动生成文档的方式实时更新.

另一种概念是文档即测试, 让文档不但能看, 也能用, 这对于 API 文档来说,
是一个巨大的便利. 有了它, 再也不用一边看文档, 一边开着 Postman 实验了.

这就是 swagger.

swagger 起步

swagger 提供了很多工具用于创建 API 文档, 尤其是创建了 RESTful APIs 标准.

这个 RESTful APIs 标准又称为 OpenAPI Specification, 目前有两个规范,
2.03.0. 大部分的实现都是基于 2.0 的.

这个项目使用的也是 2.0 规范.

安装 swag 工具, 也可以直接下载预编译的二进制文件.

go get -u github.com/swaggo/swag/cmd/swag

在项目根目录下运行 swag init, 应该会创建 docs 目录.

swag init

安装 swag-gin.

go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files

到这里, 依赖已经安装完成了, 剩下的就是编写文档了.

编写文档

毕竟是一种规范, 还是要学习它的使用方式的, 如果有兴趣, 可以看
原始的规范.

这里看 swag 库的文档就行了,
Declarative Comments Format.

使用的是声明式的符号记法, 主要格式是 @key value, 即键值对,
最后解析后生成的其实是一整个 json 文件.

编写 main 函数的注释, 定义了 API 的通用信息.

// @title Apiserver API
// @version 1.0
// @description This is a simple api server.
// @contact.name coolcat
// @contact.url http://coolcat.io/support
// @contact.email help@coolcat.io
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host 127.0.0.1:8081
// @BasePath /v1
// @securityDefinitions.apikey ApiKeyAuth
// @in header
// @name Authorization
func main() {
cmd.Execute()
}

在上面的注释里, 主要有四部分, 分别定义了:

  • 标题, 版本号, 描述

  • 联系信息

  • license

  • 安全定义

更新 router.go, 将 swagger 和 gin 结合:

import {
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
// docs is generated by Swag CLI, you have to import it.
_ "tzh.com/web/docs"
}
func Load(g *gin.Engine, mw ...gin.HandlerFunc) *gin.Engine {
...
// swagger 文档
// The url pointing to API definition
// /swagger/index.html
url := ginSwagger.URL("/swagger/doc.json")
g.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))
...
}

剩下的就是编写每个接口的文档了, 举个例子, login 接口的文档如下:

// @Summary 登录
// @Description 登录账户, 获取 token
// @Tags login
// @Accept json
// @Produce json
// @Param body body model.UserModel true "User login""
// @Success 200 {object} model.Token "{"code":0,"message":"OK","data":{"token":"name"}}"
// @Router /login [post]
func Login(ctx *gin.Context) {

这里定义了接口的基本属性, 包括路径, 请求类型, 成功时的输出, 输出格式等.

// @Summary 获取用户
// @Description 从数据库中获取用户信息
// @Tags user
// @Accept json
// @Produce json
// @Security ApiKeyAuth
// @Param id path uint64 true "user id in database"
// @Success 200 {object} model.UserModel "{"code":0,"message":"OK","data": {}}"
// @Router /user/{id} [get]
func Get(ctx *gin.Context) {

get 接口比上面的 login 接口多了一个参数 @Security ApiKeyAuth, 用于定义认证方式.
已经在 main 函数的注释中定义了认证方式 ApiKeyAuth 了, 这里就可以直接指定了.

每次更新完文档之后, 都需要运行 swag init 更新 docs 目录.

启动服务器之后, 就可以在 /swagger/index.html 上访问 API 文档了.

更多的文档注释, 可以在源代码中查看.

运行

文档编写完成之后, 都需要运行 swag init 更新, 可以将这个步骤定义在 Makefile 文件中.

build: updoc
go build -ldflags ${ldflags} ./
run: updoc
go run -ldflags ${ldflags} ./
docker: updoc
go run -ldflags ${ldflags} ./ -c ./conf/config_docker.yaml
updoc:
go mod download
go get -u github.com/swaggo/swag/cmd/swag
swag init

运行 make run, 然后就可以在浏览器中打开 http://localhost:8081/swagger/index.html 并查看文档了.
打开 http://localhost:8081/swagger/doc.json 可以查看生成的 json 文件,
使用这个 json 文件, 可以在其他的 swagger gui 中查看 API 文档.

总结

swagger 为文档的编写提供了极大的便利, 工具虽好, 更重要的是坚持.

当前部分的代码

作为版本 v0.16.0


推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
author-avatar
晞沂_364
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有