swagger2.0 swagger UI
Swager使用手册
[TOC]
前言
如何编写基于OpenAPI规范的API文档
编写目的
本文介绍如何使用Swagger编写API文档。通过阅读本文,你可以:
- 了解swagger是什么
- 掌握使用swagger编写API文档的基本方法
第一章 简介
Swagger
- Swagger是一个简单但功能强大的API表达工具。
- 使用Swagger生成的API,我们可以得到交互式文档
OpenAPI规范
OpenAPI规范是Linux基金会的一个项目,试图通过定义一种用来描述API格式或
API定义的语言,来规范RESTful服务开发过程。OpenAPI规范帮助我们描述一个
API的基本信息,比如:
- 有关该API的一般性描述
- 可用路径(/资源)
- 在每个路径上的可用操作(获取/提交…)
- 每个操作的输入/输出格式
目前V2.0版本的OpenAPI规范(也就是SwaggerV2.0规范)已经发布并开源在
github上。该文档写的非常好,结构清晰,方便随时查阅。关于规范的学习和理解
为啥要使用OpenAPI规范
OpenAPI规范这类API定义语言能够帮助你更简单、快速的表述API,尤其是在API的设计阶段作用特别突出
一旦编写完成,API文档可以作为
- 需求和系统特性描述的根据
- 前后台查询、讨论、自测的基础
- 部分或者全部代码自动生成的根据
第二章 swagger 本地环境搭建 基于node
下载Swagger UI(也可以直接下载 zip 文件)
1
git clone https://github.com/swagger-api/swagger-ui.git
安装 express
创建一个空文件作为你swagger的本地的文件夹
1
mkdir swagger-app
初始化node, 创建package.json
1
2cd swagger_app
npm init -y安装express
1
npm i express --save
创建 index.js
1
2
3
4
5
6
7
8
9var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello Swagger!');
});
// 端口号随意
app.listen(3333, function () {
console.log('Swagger_app listening on port 3333!');
});在 node_app 中创建空目录 public
1
2mkdir public
cd public修改路由 在index.js 第三行插入下面代码
1
app.use('/static', express.static('public'));
把下载好的Swagger UI 文件中的 dist 目录下的文件全部复制到 public 文件夹中
- 开启node
1
node index.js
- 浏览器输入 http://localhost:3333/static/index.html
这样就配置好了官方的例子 可以初步了解看一下
第三章 如何编写 API文档
好了,我们在本地已经搭建好了swagger2.0的ui
接下来我们就开始了解如何编写api文档
3.1 语言: JSON vs YAML
我们可以选择使用JSON或者YAML的语言格式来编写API文档。但是很多人都建议使用YAML来写,原因是它更简单
YAML语法简介 传送门
3.2 编辑器
可以用 Swagger Editor 在线编辑器
左边编辑API文档,右边实时预览 实时显示报错信息(很赞,超喜欢)
3.3 从简单的yaml的例子开始一步一步开了解swagger2.0如何用yaml编写api文档
1 | swagger: "2.0" |
上面👆内容分为4个部分
OpenAPI规范的版本号
首先我们要通过一个叫swagger 的属性来声明OpenAPI规范的版本
1 | swagger:"2.0" |
所以我们了解了OpenApi规范是基于Swagger的
API描述信息
版本、标题、具体描述信息
1 | info: |
API的URL
协议、主机名、根路径
拼接一起就是 https://api.d.qiyukid.com/user,如果有根路径可以加上根路径
1 | schemes: |
API的操作(operation)
这个例子中,我们没有写API的操作,用一个YAML的空对象 {} 占了一个位置。
3.4 定义一个API操作
1 | # 添加路径,访问/persons |
3.5 定义 请求参数 (query parameters)
用户太多,我们不想一股脑全部输出出来。这个时候,分页输出是个不错的选择,
我们可以通过添加请求参数来实现
1 | paths: |
这样我们就可以通过 get/persons?pageSize=20&pageNumber=2来访问第二页的用户信息了(20条)
3.6 定义 路径参数 (path parameter)
有时候我们想要根据用户名来查找用户信息,这时我们需要增加一个接口操作,比如可以添加一个类似 /persons/{username} 的操作来获取用户信息。
注意,{username} 是在请求路径中的参数。
1 | # 与/persons: 同级继续添加一个 persons/{username}:路径 (操作) |
3.7 定义 消息体参数 (body parameter)
当我们需要添加一个用户信息时,我们需要一个能够提供 post /persons 的API操
作
1 | # 在/persons 路径下添加了一个post操作 |
好了,这一章的内容借宿了,总结一下这一章的内容,
基本上我们从零开始用yaml语法建立了一个基础的API文档,
这个文档内容包括:
1、OpenAPI的版本号
2、API文档的信息
2.1 版本、标题、具体描述信息
2.2 协议、主机名、根路径
3、定义一个API操作
4、定义 请求参数 (Query Parameters)
5、定义 路径参数 (Path Parameter)
6、定义 消息体参数 (Body Parameter)
第四章 瘦身API文档
上面基本上已经写出了API的一个完整案例,但是我们需要优化一下,因为上面的案例中存在一些重复的内容,我们这一章将把一些重复的内容抽离出来,放到我们学习的新属性:(definitions)中,来简化API文档
4.1 简化数据模型
我们观察后得出 Person的定义出现了几次
在请求参数、路径参数、body参数中都有定义
下面的数据模型,这也是重要很关键的部分
1 | required: |
可以通过definition属性重新构建一下
1 | # 新增(定义)属性 【文档的最末尾】此属性定义的Person可以通过 |
一旦定义好了 Person ,我们可以把原来在响应消息中相应的定义字段替换掉。
get/persons
修改前:
1 | responses: |
修改后:
1 | responses: |
其他重复的以此类推
post /persons 也是如此
4.2 简化响应消息
我们看到了 引用 ($ref)的作用,接下来我们再把它用到响应消息的定义中
原来:1
2
3
4
5
6
7
8
9
10
11
12
13responses:
200:
description: A Person
schema:
required:
- username
properties:
firstName:
type: string
lastName:
type: string
username:
type: string
现在:
1 | responses: |
其他的以此类推
500:
$ref: “#/responses/Standard500ErrorResponse”4.3 定义可重用的HTTP 500 响应
发生HTTP 500 错误时, 加入我们希望每一个API操作都返回一个带有错误码(error code) 和 描述信息(data或message)的响应,我们可以添加
1 | 500: |
增加一个Error定义
在definitions:下的 Person 同级定义 Error
1 | Error: |
修改所有的HTTP 500 状态码的返回状态为
1 | 500: |
4.4 定义一个可重用的响应消息
上面的文档中,还是有一些重复的内容。我们可以根据OpenAPI规范中的
responses章节的描述,通过定义一个可重用的响应消息,来进一步简化文档。
1 | # 注意这里是在 definitions 同级下 新增了 |
注意:响应👆消息中引用了 Error 的定义
4.5 使用定义的响应消息
我们还是通过 引用 ($ref)来使用一个已经定义好的响应消息,比如:
1 | responses: |
简化参数定义 通过ref引入
类似数据模型、响应消息的简化,参数定义的简化也很容易
1 | #START########################################################## |
在有 parameters 属性的地方引用
1 | parameters: |
自此我们的API基本已经学习完毕
更多高级的swagger2.0 的OpenAPI规范可以去OpenAPI 随时查阅
第五章 以齐语为例,编写第一个API接口
1 | swagger: '2.0' |
copy 以上yaml 代码 到 swagger.editor
可以在线调试,
也可以用
swagger editor
在线编辑好yaml
的api
文档。然后以json
文件倒入到本地
- 将导出本地的json文件放到 swagger_app 的 public 目录下
- 修改swagger的 url 为
/static/qiyu.json
- 重启 node 服务 , 浏览器中打开
http://localhost:3333/static/index.html
就是刚刚写入的API文档了
第六章 总结
yaml、swaggerUI、swagger editor、OpenAPI
需要有基本的认识。