revel + swagger 文档也能互动啦
beego 从 1.3 后开始支持自动化API文档,不过,目测比较复杂,一直期望 revel 能有官方支持。
revel 确实已经有了官方支持的计划,有可能将在 0.14 版本支持,现在才 0.11.1 版本,只好自己手工撸一个出来,半自动化,但能满足基本需求了。
1. 准备
1.1 swagger-ui
swagger 是一个开源项目,swagger-ui 将符合 swagger 定义的描述规则的 Json 数据以网页形式呈现。
swagger 有在线的实例可以直接看到 swagger-ui 文档效果,如下:

swagger-ui 本身是不需要依赖任何第三方代码的,而使用 swagger-ui 实现 revel 的 API 文档仅需 swagger-ui 源码 dist 文件夹中的文件,可以如下获取:
git clone https://github.com/swagger-api/swagger-ui
然后,将 dist 路径下文件拷贝到工程目录(目录结构见下文)。
1.2 代码生成
swagger 有专门的代码生成项目 swagger-codegen,但别着急,revel 需要的不是它,是在 swagger-spec 发现的 Swagger spec generator,golang 实现、自带 swagger-ui。
go get github.com/yvasiyarov/swagger
直接命令行输入swagger 回车

支持三个级别注释:
General API info, API 通用信息,在项目入口函数所在文件写一份即可,例如 init.go
// @APIVersion 1.0.0
// @Title My Cool API
// @Description My API usually works as expected. But sometimes its not true
// @Contact api@contact.me
// @TermsOfServiceUrl http://google.com/
// @License BSD
// @LicenseUrl http://opensource.org/licenses/BSD-2-ClauseSub API Definitions, 子模块定义,每个资源定义一次
// @SubApi Order management API [/order]
// @SubApi Statistic gathering API [/cache-stats]API Operation, API 定义,需要文档化的接口函数
// @Title getOrdersByCustomer
// @Description retrieves orders for given customer defined by customer ID
// @Accept json
// @Param customer_id path int true "Customer ID"
// @Param order_id query int false "Retrieve order with given ID only"
// @Param order_nr query string false "Retrieve order with given number only"
// @Param created_from query string false "Date-time string, MySQL format. If specified, API will retrieve orders that were created starting from created_from"
// @Param created_to query string false "Date-time string, MySQL format. If specified, API will retrieve orders that were created before created_to"
// @Success 200 {array} my_api.model.OrderRow
// @Failure 400 {object} my_api.ErrorResponse Customer ID must be specified
// @Resource /order
// @Router /orders/by-customer/{customer_id} [get]
1.3 revel module
revel 支持模块,每个模块可以有独立的路由和配置文件,即 routes.go 和 app.conf,revel 负责将其与其他模块及主应用对应文件合并,详细规则可参考 revel 文档相关章节 Modules。
swagger-ui 将以 revel module 方式插入主应用,需要设计独立的路由。
1.4 目录结构
revel new revel-swagger
新建 modules 文件夹,并在其中建立 swagger-ui 文件夹,如下:

2 实现
2.1 Step 1
复制
yvasiyarov/swagger/swagger-ui/路径下文件至revel-swagger/modules/swagger/swagger-ui在
revel-swagger/modules/swagger/conf新建routes文件,放入如下路由GET /docs Docs.GetApiDocs
GET /docs/api/*filepath Static.ServeModule("swagger","swagger-ui")
GET /docs/:apiKey Docs.GetApiDoc在
revel-swagger/modules/swagger/app/controllers新建apidocs.go并实现routes中定义的路由
2.2 Step 2
- 在主应用 
app.conf文件中添加模块引用module.swagger = you/path/to/revel-swagger/modules/swagger - 在主应用 
routes文件中添加模块路由module:swagger 
2.3 Step 3
- 使用 
github.com/yvasiyarov/swagger生成 swagger 支持的 Json 注释文件docs.go-apiPackage设置为主应用app/controllers路径,路径为相对于$GOPATH/src的相对路径-mainApiFile设置为主应用的某个.go文件路径,作为 swagger 通用 API 信息定义文件,同样路径为相对$GOPATH/src的路径-output输出路径,设置为you/path/to/revel-swagger/modules/swagger/app/controllers,为绝对路径
 
在 you/path/to/revel-swagger/modules/swagger/app/controllers 生成了 docs.go 文件,此时,访问 localhost 就可以看到 swagger-ui 页面了,不过内容还是 swagger 的示例。
2.4 Step 4
init.go添加 General API infoapp.go添加 API 接口及注释- 修改 
swager-ui/index.html第 28 行为url: "http://127.0.0.1:9000/docs" - 重新生成 
docs.go- 设置 
-basePath=127.0.0.1:9000 
 - 设置 
 
访问 http://127.0.0.1:9000 可以看到 API 的 swagger 文档了:

3 其他
yvasiyarov/swagger支持的数据格式需要参考其项目说明- 没有找到 上传文件及参数为数组的描述方法,swagger 本身是支持的
 
- 示例代码放在 github
 
revel + swagger 文档也能互动啦的更多相关文章
- Swagger文档转Word 文档
		
GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 原创作品,转载请注明出处:http://www.cnblogs.co ...
 - 利用typescript生成Swagger文档
		
项目地址:https://github.com/wz2cool/swagger-ts-doc demo代码地址:https://github.com/wz2cool/swagger-ts-doc-de ...
 - 使用 Swagger 文档化和定义 RESTful API
		
大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Services Descript ...
 - springboot成神之——swagger文档自动生成工具
		
本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...
 - asp.net core 2.1 生成swagger文档
		
新建asp.netcore2.1 api项目 “WebApplication1” 在nuget管理器中添加对Swashbuckle.AspNetCore 3.0.0.Microsoft.AspNetC ...
 - Swagger文档转Word
		
Swagger文档转Word 文档 GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 原创作品,转载请注明出处:h ...
 - Spring Boot:整合Swagger文档
		
综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
 - asp.net core web api 生成 swagger 文档
		
asp.net core web api 生成 swagger 文档 Intro 在前后端分离的开发模式下,文档就显得比较重要,哪个接口要传哪些参数,如果一两个接口还好,口头上直接沟通好就可以了,如果 ...
 - 【Swagger2】解决swagger文档地址请求404的问题
		
一.出现的问题背景 某个项目,本地启动后,访问swagger文档地址可以访问到, http://localhost:8203/doc.html.但是部署到开发环境就访问不到,报404资源找不到的问题 ...
 
随机推荐
- 无责任Windows Azure SDK .NET开发入门篇一[Windows Azure开发前准备工作]
			
一.Windows Azure开发前准备工作 首先我们需要了解什么是 Azure SDK for .NET?微软官方告诉我们:Azure SDK for .NET 是一套应用程序,其中包括 Visua ...
 - DeleteDC()  与  ReleaseDC()  的区别 [转]
			
DeleteDC 该函数删除指定的设备上下文环境(DC). 原型: BOOL DeleteDC(HDC hdc): 参数: hdc:设备上下文环境的句柄. 返回值: 成功,返回非零值:失败,返回零.调 ...
 - javaScript return false
			
在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性指定的页. Return False 就相当于终止 ...
 - Oracle用户、权限、角色管理
			
Oracle 权限设置一.权限分类:系统权限:系统规定用户使用数据库的权限.(系统权限是对用户而言). 实体权限:某种权限用户对其它用户的表或视图的存取权限.(是针对表或视图而言的). 二.系统权 ...
 - Ehcache(04)——设置缓存的大小
			
http://haohaoxuexi.iteye.com/blog/2116749 设置缓存的大小 目录 1 CacheManager级别 2 Cache级别 3 大小衡量 4 ...
 - 初步认识pg_control文件之一
			
这个据说是PostgreSQL的control file. 到底如何呢,先看看改名后如何,把pg_control文件改名,然后启动 Postgres,运行时得到信息: [postgres@pg101 ...
 - axTE3DWindowEx双屏对比控件白屏解决方法以及网上方法的校正(CreateControlOveride)
			
环境:vs2012,TE 6.5.1,winfrom C# 要做skyline的双屏显示功能,网上找到方法是用axTE3DWindowEx控件实现,把控件拖进去,运行,发现axTE3DWindow是正 ...
 - 【JavaScript】Javascript中的函数声明和函数表达式
			
Javascript有很多有趣的用法,在Google Code Search里能找到不少,举一个例子: <script> ~function() { alert("hello, ...
 - vsftpd虚拟用户创建实例(转载)
			
vsftpd虚拟用户创建实例 发布:theboy 来源:net [大 中 小] vsftpd虚拟用户创建实例,有需要的朋友可以参考下. vsftpd虚拟用户创建实例,有需要的朋友可以参考 ...
 - 把你的旧笔记本变成 Chromebook
			
导读 Linux 之年就在眼前.根据报道,Google 在 2016 年第一季度卖出了比苹果卖出的 Macbook 更多的 Chromebook.并且,Chromebook 即将变得更加激动人心.在 ...