Beego自动化文档(最新版)

news/2024/12/23 12:38:56 标签: json, 操作系统, golang

之前写过一篇使用Beego自动化api文档的文章:Beego自动化文档,随着Beego的更新,1.7.0之后Beego自动化文档的方法也有了更新,最显著的更新是去掉了docs.go,使用了swagger.json,更加的符合swagger的特点。这篇文章是上一篇文章的修正和补充。

环境要求

需要安装最新的Go语言环境,安装Go可以参考Golang在Mac OS上的环境配置,还需要安装最新的Beego框架。如果是你的Beego框架还是旧版本的就需要升级Beego:

go get -u github.com/astaxie/beego
go get -u github.com/beego/bee

查看bee的最新版本:

bee version

| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v1.5.2

├── Beego     : 1.7.1
├── GoVersion : go1.7.3
├── GOOS      : darwin
├── GOARCH    : amd64
├── NumCPU    : 8
├── GOPATH    : /Users/jjz/Documents/go
├── GOROOT    : /usr/local/Cellar/go/1.7.3/libexec
├── Compiler  : gc
└── Date      : Saturday, 26 Nov 2016

可以从该命令中看到Go的环境配置,Beego的版本等信息。

文档的生成

conf/app.conf中设置EnableDocs=true之后,仍然可以通过命令生成文档:

bee generate docs

只是这里生成的不再是docs.go,而是符合swagger使用的两个文档:

swagger.json
swagger.yml

swagger.yml是swagger的契约文档,根据这份文档,可以描述出api的定义规则。而swagger.json描述的是一份符合swagger规则的api数据,通过这个json数据可以在swagger-ui中列出api文档。
使用bee generate docs命令可以生成对于对于的两个swagger文件,但是bee项目运行的时候是通过监控文件,自动重新编译项目的,自动重新编译项目也能自动生成文档是最好的,因此Beego在运行项目的时候添加了自动生成文档的命令:

bee run -gendoc=true

这样可以在每次项目重新运行的时候更新api文档,不用重新运行命令:bee generate docs

API文档的访问

更新swagger-ui是一件很麻烦的事情,所以在beego的运行命令中加入一个参数-downdoc=true:

bee run -downdoc=true

该命令会监测swagger目录下面是否有swagger-ui的文件,如果没有就从github上面下载,下载的地址是: https://github.com/beego/swagger/archive/v2.zip
另外设置静态文件夹的方法也有了变化,新的函数为:

beego.SetStaticPath("/swagger", "swagger")

设置完静态文件夹之后可以通过url:http://127.0.0.1:8080/swagger/index.html访问swagger文档。打开该文档会自动的请求swagger.json,发现请求的swagger.json文档地址为:http://127.0.0.1:8080/swagger/index.html/swagger.json,需要把swagger/index.html中的swagger.json的地址设置为:

url = "/swagger/swagger.json";

再次访问swagger文档地址就可以看到API文档了:

swagger文档

路由解析与注解

路由解析仍然使用的是namespace+Include

ns := beego.NewNamespace("/v1",
        beego.NSNamespace("/object",
            beego.NSInclude(
                &controllers.ObjectController{},
            ),
        ),
        beego.NSNamespace("/user",
            beego.NSInclude(
                &controllers.UserController{},
            ),
        ),
    )
    beego.AddNamespace(ns)

而注解也是仍然采用以前的注解方式:

// @Title createUser
// @Description create users
// @Param    body        body     models.User    true        "body for user content"
// @Success 200 {int} models.User.Id
// @Failure 403 body is empty
// @router / [post]
func (u *UserController) Post() {
    var user models.User
    json.Unmarshal(u.Ctx.Input.RequestBody, &user)
    uid := models.AddUser(user)
    u.Data["json"] = map[string]string{"uid": uid}
    u.ServeJSON()
}

总结

新版本的beego中对于swagger的支持更加的友好,也更加的swagger化了,采用了swagger.jsonswagger.yml文件,不需要重新生成一个新的router文件了,这样文档部分的代码更加的分离,使用swagger.yml可以更方便的生成访问api的其他语言的代码。

源代码地址:https://github.com/jjz/go/tree/master/autodoc


http://www.niftyadmin.cn/n/1384887.html

相关文章

[hdu4498]离散化,simpson求积分

题意:,求这个函数在[0,100]上的图像的长度。思路:采用离散化的思想,求出所有交点 ,把交点排序,把[0,100]分成若干个小区间,这样原函数在每个小区间上的图像属于某一个二次函数或者是一条直线。如…

编译运行sipdroid笔记

在eclipse安装subclipse 在官网选择下载的连接 打开eclipse->help->install new software->add 更新安装完后重启 使用eclipse从code.google下载sipdroid源码 eclipse->window->open perspective中选择 切换到svn视图 对项目右键检出为,存到自己的workspace(项目…

can总线短距离不用双绞线_CAN/LIN或车载以太网 - 车载以太网技巧

为何现在选择车载以太网?ADAS 和自动驾驶汽车需要通过高带宽和低延迟的网络来连接所有传感器、摄像头、诊断工具、通信系统以及中央人工智能。这些技术会产生、发送、接收、存储和处理海量数据。现在的大部分汽车通过 CAN 或 LIN 联网,但随着数据传输速度…

网站样式

公告 http://www.htmleaf.com/Demo/201707014606.html 左导航 http://www.htmleaf.com/Demo/201605023416.html转载于:https://www.cnblogs.com/RambleLife/p/8417687.html

PHP 面试的超级无敌总结

1、php中字符串可以使用哪三种定义方法以及各自的区别是什么?答:单引号、双引号、heredoc(等同于双引号)和newdoc(等同于单引号)定界符单引号单引号不解析变量,只解析单引号和反斜线本身 双引号…

20145328《信息安全系统设计基础》实验五 网络通信

20145328《信息安全系统设计基础》实验五 网络通信 与20145232韩文浩结对 实验目的 掌握在 ARM 开发板实现一个简单 WEB 服务器的过程 。学习在 ARM 开发板上的 SOCKET 网络编程 。学习 Linux 下的 signal()函数的使用 。 实验内容学习使用 socket 进行通讯编程的过程&#xff…

c:foreach标签使用详解

<c:foreach>用法 <c:foreach>类似于for和foreach循环以下是我目前见过的用法&#xff1a;1、循环遍历&#xff0c;输出所有的元素。<c:foreach items"${list}" var"li"> ${li} </c:foreach>注意&#xff1a;items 用于接收集合对象…

Swift学习笔记三

协议和扩展 在Objective-C中&#xff0c;协议是很常见也非常重要的一个特性&#xff0c;Swift中也保留了协议&#xff0c;语法略有变化。 用protocol关键字声明一个协议&#xff1a; protocol ExampleProtocol {var simpleDescription: String { get }mutating func adjust() }…