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-Clause

  • Sub 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 info
  • app.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 文档也能互动啦的更多相关文章

  1. Swagger文档转Word 文档

    GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 原创作品,转载请注明出处:http://www.cnblogs.co ...

  2. 利用typescript生成Swagger文档

    项目地址:https://github.com/wz2cool/swagger-ts-doc demo代码地址:https://github.com/wz2cool/swagger-ts-doc-de ...

  3. 使用 Swagger 文档化和定义 RESTful API

    大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Services Descript ...

  4. springboot成神之——swagger文档自动生成工具

    本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...

  5. asp.net core 2.1 生成swagger文档

    新建asp.netcore2.1 api项目 “WebApplication1” 在nuget管理器中添加对Swashbuckle.AspNetCore 3.0.0.Microsoft.AspNetC ...

  6. Swagger文档转Word

    Swagger文档转Word 文档   GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 原创作品,转载请注明出处:h ...

  7. Spring Boot:整合Swagger文档

    综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...

  8. asp.net core web api 生成 swagger 文档

    asp.net core web api 生成 swagger 文档 Intro 在前后端分离的开发模式下,文档就显得比较重要,哪个接口要传哪些参数,如果一两个接口还好,口头上直接沟通好就可以了,如果 ...

  9. 【Swagger2】解决swagger文档地址请求404的问题

    一.出现的问题背景 某个项目,本地启动后,访问swagger文档地址可以访问到, http://localhost:8203/doc.html.但是部署到开发环境就访问不到,报404资源找不到的问题 ...

随机推荐

  1. css3 前缀

  2. OC:通讯录实战

    实战(使用OC的知识制作一个简易通讯录) //语法糖.笑笑语法 // NSString * string = [NSString stringWithFormat:@"string" ...

  3. C++的辅助工具介绍 [转]

    C++的辅助工具介绍 1 文档类  (1) Doxygen  参考站点:http://www.doxygen.org  Doxygen是一种适合C风格语言(如C++.C.IDL.Java甚至包括C#和 ...

  4. 题外话(简识UML语言)

    PS:“不积小流无以成为江河,不积跬步无以至千里”,学习也好,吃饭也罢,做任何事情都需要一步一个脚印,逐步积累过程,最后才会知识越来越丰富,吃的越饱… 在学习过程中用到了一些框图,用于绘画框图的语言数 ...

  5. JavaScript设计模式 -- 读书笔记

    JavaScript设计模式 一. 设计模式 一个模式就是一个可重用的方案: 有效的解决方法.易重用.善于表达该解决方案: 未通过"模式特性"测试的模式称为模式原型: 三规则:适用 ...

  6. Python常用网页字符串处理技巧

    首先一些Python字符串处理的简易常用的用法.其他的以后用到再补充. 1.去掉重复空格 s = "hello hello hello" s = ' '.join(s.split( ...

  7. 分布式文件系统FastDFS设计原理

    原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ...

  8. iOS 本地企业发布流程

    今天和后台弄了一下本地企业ipa发布, 准备工具:要发布的ipa文件一个,一个plist plist文件格式内容: <?xml version="1.0" encoding= ...

  9. 【转】浅析linux内存模型

    转自:http://pengpeng.iteye.com/blog/875521 0. 内存基本知识 我们通常称 linux的内存子系统为:虚拟内存子系统(virtual memory system) ...

  10. 兼容,原来在这里就已经開始--------Day34

    看了两天,算是将w3cschool的javascript部分浏览了一遍.在脑海中大约有了一点概念,也才真切体会到:一入江湖深似海.欲穷此路难上难啊,至少如今看起来是遥遥无期.太多不懂, 太多茫然,只是 ...