一、SwaggerUI介绍

SwaggerUI是我们小组在做课程作业,前后端交互需要API文档时,我无意间发现的一个工具。借助SwaggerUI,我们可以便捷的获得类似下方的可视化图形界面:

之后,我们便可以根据此“API文档”进行开发。

“Swagger UI 允许任何人(无论是你的开发团队还是最终用户)在没有任何实现逻辑的情况下对 API 资源进行可视化和交互。它(API文档)通过 Swagger 定义自动生成,可视化文档使得后端实现和客户端消费变得更加容易。” --SmartBear

源码地址在这里。

二、SwaggerUI使用

user服务为例。

安装go-swagger

$ go get github.com/go-swagger/go-swagger/cmd/swagger

swagger:meta

以下内容放在项目程序入口main.go中:

// Copyright 2019 money-hub. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.// money-hub MoneyDodo/personalTasks
//
// This documentation describes example APIs found under https://github.com/ribice/golang-swaggerui-example
//
//     Schemes: http
//     Version: 1.0.0
//     License: MIT http://opensource.org/licenses/MIT
//
//     Consumes:
//     - application/json
//
//     Produces:
//     - application/json
//
//     Security:
//     - bearer
//
//     SecurityDefinitions:
//     bearer:
//          type: apiKey
//          name: Authorization
//          in: header
//
// swagger:meta

1. money-hub MoneyDodo/personalTasks - 项目名称
2. This documentation …… - 第二行为description
3. Schemes - HTTP或HTTPS
4. Version - API版本号
5. License - 许可证
6. Consumes、Produces - 表示request和response的数据类型
7. Security - 授权按钮
8. SecurityDefinitions - 安全类型定义
点击Authorize会弹出如下提示框:其中即为JWT认证的相关信息

swagger:operation

// swagger:operation PUT /api/users/{userid} users swaggPutReq
// ---
// summary: Update the user profile
// description: Update the user profile with the profile. Also, you need to specify the user ID.
// parameters:
// - name: userid
//   in: path
//   description: id of user
//   type: string
//   required: true
// - name: Body
//   in: body
//   schema:
//     "$ref": "#/definitions/User"
//   required: true
// responses:
//   "200":
//     "$ref": "#/responses/swaggNoReturnValue"
//   "400":
//     "$ref": "#/responses/swaggBadReq"

1. swagger:operation - 提示符,表示一个请求操作

2. PUT - HTTP方法

3. /api/users/{userid} - 路径

4. users - 类似于路由分隔标签,将相同的分隔标签的请求归到同一组

5. swaggPutReq - 此参数没有具体意义,单参数是强制性的,但是推荐不同请求使用不同的参数。命名格式可采用swaggXXXReq,若不同请求该参数一样,会出现很多bug。

6. — - 分隔符,下方代码为YAML格式的swagger规范,缩进必须保持一致且正确,推荐使用两格缩进。否则将无法正常解析。

7. summary - 标题,API的概括描述

8. description - 描述,API的详细描述

9. parameters - URL参数,此例子中为{userId},如果需要query的,可使用?name={name}来表示

10. - name - 指定参数,此例子中为URL中的userId

11. in - 表示此参数位于哪个部分,path表示位于URL路径中,body表示位于上传的request body

12. description - 参数说明

13. type - 指定参数类型

14. required - 是否一定需要此参数

15. schema - 当参数位于body中需要此参数,指定参数的数据结构,**"$ref": “#/definitions/XXX”**按照此种格式写即可,XXX为定义的model文件(并非swagger/model.go)中的具体的数据类型,具体原因尚未搞懂。

16. responses - 说明返回类型。

17. “200” - 200表示状态码,我用200表示成功的请求;"$ref": "#/responses/swaggNoReturnValue"按照此格式来书写,其中swaggNoReturnValue定义在swagger/model.go文件中,使用到了swagger:response

// HTTP status code 200 and no return value
// swagger:response swaggNoReturnValue
type swaggNoReturnValue struct {// in:bodyBody struct {// HTTP Status Code 200Status bool `json:"status"`// Detailed error messageErrinfo string `json:"errinfo"`}
}
  • 第一行注释:尽量书写,会体现在swaggerui
  • 第二行注释:swagger:response为提示符,swaggNoReturnValue为下方数据类型的一个tag,这两者共同组成了**"$ref": “#/responses/swaggNoReturnValue”**
  • 数据结构中,有三个属性:StatusErrinfoData,上述结构中没有返回值,所以取消了最后一个参数。

18. “400” - 400表示状态码,我用400来表示失败的请求。返回格式说明与上述过程一致。

swagger:route

// swagger:route POST /api/users users swaggCreateUserReq
// Create a new user with the profile.
// If the user's id is "exists", error will be returned.
// responses:
//   200: swaggNoReturnValue
//   400: swaggBadReq

swagger:route 是简单 API 的短注释,它适用于没有输入参数(路径/查询参数)的 API,如果API存在users/{userid}或者users/search?name={name}类型的参数,则必须使用swagger:operation
1. swagger:route - 提示符,表示一个请求操作
2. POST - HTTP方法
3. /api/users - 路径
4. users - 类似于路由分隔标签,将相同的分隔标签的请求归到同一组
5. swaggCreateUserReq - 用于请求上传的参数
参数定义在swagger/model.go文件中,使用到swagger:parameters

// Create User request
// swagger:parameters swaggCreateUserReq
type swaggCreateUserReq struct {// in:bodyBody model.User
}
  • 第一行注释:描述此参数
  • 第二行注释:swagger:parameters表示请求参数提示符,swaggCreateUserReq为请求的参数ID值。
  • 第三行:结构体名称没有必要和swagger:parameters后的参数ID值保持一致,但推荐命名相同
  • 第四行注释:in:body或者in:query表示包含此参数的位置
  • 第五行为实际的内嵌结构
    6. Create a new user with the profile. - 摘要(标题),在第一个句号.之前的是标题,如果没有句号,则这些注释会被作为描述
    7. If the user’s id is “exists”…… - 描述,在第一个句号后面的为描述
    8. responses - 说明返回类型。
    9. 200: swaggNoReturnValue - 简写,表明200返回值为swaggNoReturnValue
    10. 400: swaggBadReq - 简写,表示400返回值为swaggerBadReq

【说明】swagger:parameters & swagger:response已在上述操作中详细说明,不在叙述。

三、运行SwaggerUI

从Github swagger-ui中克隆项目到本地,然后拷贝其中的dist文件夹到我们的项目文件下。

其中dist文件夹即为克隆的项目中的distmodel.go为我们定义的swagger:parametersswagger:response所在的文件;main.goswaggerui的服务器文件。

  • 修改swagger/swaggerui/dist/index.html中的url
const ui = SwaggerUIBundle({url: "./swagger.user.json",dom_id: '#swagger-ui',……
})
  • 定义main.go
package mainimport "net/http"func main() {fs := http.FileServer(http.Dir("swagger/swaggerui/dist"))http.Handle("/swaggerui/", http.StripPrefix("/swaggerui/", fs))http.ListenAndServe(":8000", nil)
}
  • 启动服务器
    在项目根目录下:go run swagger/swaggerui/main.go

四、效果图

打开浏览器localhost:8000/swaggerui/


swaggerui的动态交互并没有实现,只是将其作为API的展示文档,还需要进一步的学习。

参考链接:
https://www.ribice.ba/serving-swaggerui-golang/
https://www.ribice.ba/swagger-golang/

SwaggerUI初探相关推荐

  1. 2021年大数据Flink(九):Flink原理初探

    Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...

  2. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...

  3. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  4. las格式测井曲线_邹榕,等:顺北和托甫台区块奥陶系断裂结构单元测井响应特征初探...

    引用格式:邹榕,徐中祥,张晓明,等.顺北和托甫台区块奥陶系断裂结构单测井响应特征初探[J].油气藏评价与开发,2020,10(2):18-23.ZOUR, XU Z X, ZHANG X M, et ...

  5. 2018-4-15摘录笔记,《网络表征学习前沿与实践》 崔鹏以及《网络表征学习中的基本问题初探》 王啸 崔鹏 朱文武

    1.来源:<网络表征学习前沿与实践>  崔鹏 (1)随着数据的增加以及计算机计算速度的增加,想当然的以为速度快了,数据再多也是可以自己算的,但是若是数据之间存在着复杂的关系,那么处理一个样 ...

  6. 再见丑陋的 SwaggerUI,这款API文档生成神器界面更炫酷,逼格更高!

    欢迎关注方志朋的博客,回复"666"获面试宝典 一般在使用 Spring Boot 开发前后端分离项目的时候,都会用到 Swagger.Swagger 是一个规范和完整的框架,用于 ...

  7. 颜值绝绝子的swagger-ui

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://www.cnblogs.com/RegicideGod/p/12598278.html think-swagg ...

  8. 一款vue编写的功能强大的swagger-ui,有点秀(附开源地址)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:RegicideGod cnblogs.com/Regici ...

  9. python argparse_Python 命令行之旅:初探 argparse

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 你是否好奇过在命令行中敲入一段命令后,它是如何被解析执行的?是否考虑过由自己实现一个命令行工具,帮你执行和处理任 ...

最新文章

  1. jquery怎么获取radio的值
  2. matplotlib绘制多个子图
  3. python爬虫抓取图片-怎么用爬虫批量抓取网页中的图片?
  4. python编程入门电子书下载-Python编程基础如何快速入门?“附电子书下载”
  5. PostgreSQL 压缩包 在win7上安装
  6. 设计模式——设计模式之禅day1
  7. java 对象重写tostring
  8. python可视化添加文本_python Matplotlib基础--如何添加文本和标注
  9. js 小数自动补0_JavaScript 时分秒时间代码(自动补零)
  10. ASP.NET MVC实践系列11-FCKEditor和CKEditor的使用
  11. 创建 maven maven-archetype-quickstart 项目抱错问题解决方法
  12. IOS开发笔记_5.线程,HTTP请求,定时器
  13. matlab英文词汇,matlab中常见英文词含义
  14. Smart Game Booster v5.2.0.567 FPS游戏优化加速工具
  15. JTree创建、获取和删除节点的方法
  16. OpenNLP 命令行
  17. SpringBoot中怎么访问静态图片
  18. 玩转JDBC打造数据库操作万能工具类JDBCUtil,加入了高效的数据库连接池,利用了参数绑定有效防止SQL注入
  19. 苹果搜索广告ASA“保姆级”开户教程来袭!拿来吧你!
  20. TCP和 UDP的区别

热门文章

  1. Java 的浮点型数据
  2. 优漫动游平面构成方法!就是设计根基
  3. 这些文字翻译软件能让你出国旅游更省心,不再为语言障碍烦恼
  4. Java基础总结【狂神说】
  5. python中注释的作用_python注释是什么意思
  6. 判断当前时间是不是周末
  7. GameFramework教程✨五、界面,即UI
  8. GAMEE平台即将推出移动区块链电子竞技应用——Arc8 Play to earn
  9. thingsboard 学习路线之(六)服务器端RPC远程控制开关
  10. webpack安装教程及webpack-dev-server