Swagger入门教程
[译]5.41 Swagger tutorial
单击此处查看原文
关于 Swagger
Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因:
- Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API。
- Swagger 可以生成客户端SDK代码用于各种不同的平台上的实现。
- Swagger 文件可以在许多不同的平台上从代码注释中自动生成。
- Swagger 有一个强大的社区,里面有许多强悍的贡献者。
Swagger 文档提供了一个方法,使我们可以用指定的 JSON 或者 YAML 摘要来描述你的 API,包括了比如 names、order 等 API 信息。
你可以通过一个文本编辑器来编辑 Swagger 文件,或者你也可以从你的代码注释中自动生成。各种工具都可以使用 Swagger 文件来生成互动的 API 文档。
注意:用 Swagger 文件生成互动的 API 文档是最精简的,它展示了资源、参数、请求、响应。但是它不会提供你的API如何工作的其他任何一个细节。
Petstore 的 Swagger 例子
为了更好的理解 Swagger ,我们现在来探索一下 Petsotre 项目的例子。记住:以下出现的 UI 都是指Swagger UI。Swagger 可以被展示成不同的视觉样式,这取决于你所使用到的视觉框架。
有三个资源:pet,store,user。
创建一个 pet
1、展开 pet 的 post 方法
2、然后单击 Model Schema 中的黄色字体的 JSON。
这里用 JSON 填充了 body value。这里的 JSON 是你必须上传的,用于创建 pet 资源。
3、将第一个 id 标签的值修改一下(你必须保证 id 值都是唯一的,并且不能从 0 开始)。
4、将 name 标签的值修改一下(最好也要唯一,方便对比结果),以下是示例代码:
{
"id": 37987,
"category": {
"id": 0,
"name": "string"
},
"name": "Mr. Fluffernutter",
"photoUrls": [
"string"
],
"tags": [
{
"id": 0,
"name": "string"
}
],
"status": "available"
}
5、单击 Try it out! 按钮,查看响应:
通过 ID 查询 pet
展开 Get 方法:pet/{petId},输入你的 petId,单击 Try it out!,你创建的 pet 就会显示在 response 中。
默认情况下,api 响应都是 xml。可以把 Response Content Type 修改为 application/json 再试一次。
返回的值将会是 JSON 格式
注意:值得强调的是 Swagger 文档一定要通过着手尝试来学习。你要通过实实在在的发送请求和查看响应来更好的理解 Petstore API 是如何工作的。但是还要注意现在你已经在你的真实Petstore数据库中创建了一个新的pet。从学习尝试 API 过渡到在生产环境中使用 API 的时候,那些测试数据你可能都需要将它们删除。
整理 Swagger 组件
Swagger 分成一些不同的块。
Swagger spec:这一块对元素的嵌套、命令等采用官方模式。如果你想要对 Swagger 文件手动编码,你必须非常熟悉 Swagger spec。
Swagger editor:这是在线编辑器,用于验证你的 YML 格式的内容是否违反 Swagger spec 。YML 是一种句法,依赖于空格和嵌套。你需要对 YML 句法很熟悉才能很好的遵守 Swagger spec 规范。Swagger 编辑器会标出错误并且给你格式提醒(Swagger spec 文件可以使用 JSON 或者 YAML 中的任意一种格式)。
Swagger-UI:这是一套 HTML/CSS/JS 框架用于解析遵守 Swagger spec 的 JSON 或 YML 文件,并且生成API文档的UI导航。它可以将你的规格文档转换成Swagger Petsotre-like UI。
Swagger-codegen:这个工具可以为不同的平台生成客户端 SDK(比如 Java、JavaScript、Python 等)。这些客户端代码帮助开发者在一个规范平台中整合 API ,并且提供了更多健壮的实现,可能包含了多尺度、线程,和其他重要的代码。SDK 是用于支持开发者使用 REST API 的工具。
一些 Swagger 的实现例子
它们大多看起来一样。你会注意到 Swagger 实现的文档都很精简。这是因为 Swagger 的展示都是互动的体验,你可以尝试请求和查看响应,使用你自己的 API 密钥来查看你自己的数据。它是边看边做边学的形式。
它也有一些缺陷:
- 没有太多的空间来描述后端详细的工作
- 每个 Swagger UI 的输出看起来都差不多
- Swagger UI 会从你其他的文档中分离成独立的一个站点
创建 Swagger UI 展示
本节我们将为使用Mashape Weather API的 weatherdata 后台来创建一个 Swagger UI (weatherdata是之前的课程中创建的一个项目)。你可以在这里查看demo。
a.创建一个 Swagger spec 文件
1、去Swagger online editor
2、选择 File > Open Example 然后选择 PetStore Simple 。单击 Open。
你可以使用 weatherdata 后台文档来自定义这个示例 YML 文件。但如果你是新手, 它会带你认识spec。方便起见,只需要用到下面的文件,然后复制一份到 Swagger editor: swagger.yaml。
swagger: "2.0"
info:
version: "1.0.0"
title: "Weather API"
description: "A sample API that uses a Mashape weather API as an example to demonstrate features in the swagger-2.0 specification"
termsOfService: "http://helloreverb.com/terms/"
contact:
name: "Tom Johnson"
email: "tomjohnson1492@gmail.com"
url: "http://swagger.io"
license:
name: "MIT"
url: "http://opensource.org/licenses/MIT"
host: "simple-weather.p.mashape.com"
schemes:
- "https"
consumes:
- "application/json"
produces:
- "application/text"
paths:
/aqi:
get:
tags:
- "Air Quality"
description: "gets air quality index"
operationId: "getAqi"
produces:
- "text"
parameters:
-
name: "lat"
in: "query"
description: "latitude"
required: false
type: "string"
-
name: "lng"
in: "query"
description: "longitude"
required: false
type: "string"
responses:
200:
description: "aqi response"
default:
description: "unexpected error"
/weather:
get:
tags:
- "Weather Forecast"
description: "gets weather forecast in short label"
operationId: "getWeather"
produces:
- "text"
parameters:
-
name: "lat"
in: "query"
description: "latitude"
required: false
type: "string"
-
name: "lng"
in: "query"
description: "longitude"
required: false
type: "string"
responses:
200:
description: "weather response"
default:
description: "unexpected error"
/weatherdata:
get:
tags:
- "Full Weather Data"
description: "Get weather forecast by Latitude and Longitude"
operationId: "getWeatherData"
produces:
- "application/json"
parameters:
-
name: "lat"
in: "query"
description: "latitude"
required: false
type: "string"
-
name: "lng"
in: "query"
description: "longitude"
required: false
type: "string"
responses:
200:
description: "weatherdata response"
default:
description: "unexpected error"
securityDefinitions:
internalApiKey:
type: apiKey
in: header
name: X-Mashape-Key
注意:使用 YML 替换JSON。 YML 句法比 JSON 可读性高。使用 YML ,空格很重要。新段落需要缩进两个空格。冒号表示个对象。连字符代表一个 sequence 或者 list (像一个 array)。如果你下载这个文件而不是复制粘贴,你基本不会碰到空格问题。
Swagger editor 告诉你文件如何被输出,你也可以看到验证出来的错误。没有这个在线编辑器,你只能在运行代码的时候才能知道 YML 句法是否有效 (并且看到错误提示, YAML 文件也不能被正确解析)。
3、保证 Swagger edirot 中的 YAML 文件有效。如果有错误必须要修正。
4、选择 File > Download YAML 并且保存为 swagger.yaml 到本地(你可以只复制代码然后粘贴到空白文件中,命名为 swagger.yaml)。
你也可以选择 JSON 格式,不过 YAML 可读性更高。
b.设置 Swagger UI
1、Github: Swagger UI。下载、解压。只需要用到 dist 文件夹。除非你想重新生成 dist 中的文件,才会用到别的。
2、打开 dist > index.html
3、找到:url = "http://petstore.swagger.io/v2/swagger.json";
4、值改成 swagger.yaml 的路径
5、保存打开index.html
c.上传文件到 web 主机
除了本地浏览 Swagger 文件,你也可以使用 XAMPP 在本地运行一个 web 服务器
1、下载安装XAMPP
2、在你的应用程序文件夹中打开 XAMPP 文件夹,启动 manager-osx 控制台
3、单击 Manage Servers tab
4、选择 Apache Web Server 单击 Start
5、打开 XAMPP 中的 htdocs 文件夹。如果是Mac,通常在 /Applications/XAMPP/xamppfiles/htdocs。
6、将 dist 文件夹拖到此处
7、在你的浏览器中浏览 localhost/dist
就可以看到 Swagger UI的展示。
体验 Swagger UI
1、用浏览器浏览 Swagger UI。
2、在右上角,单击 Authorize 并且输入你的 Mashape API Key。如果你没有 Mashape API Key,你可以3、使用 EF3g83pKnzmshgoksF83V6JB6QyTp1cGrrdjsnczTkkYgYrp8p
。
4、去 Google Maps 搜索一个地址。
5、从 URL 中去获取经纬度,将其插入到你的 Swagger UI中(比如:1.3319164 for lat, 103.7231246 for lng)
6、单击 Try it out。
如果成功,你应该可以看到 response body 的响应: 9 c, Mostly Cloudy at South West, Singapore
如果你看到了Not supported
,尝试调整经纬度。
如果你刷新了界面,你要重新输入 API Key。
从注释中自动生成 Swagger 文件
为了代替 Swagger file 的手动编码,你也可以从你的程序代码注释中自动生成。有许多的 Swagger 库可以用来整合不同的代码库。这些 Swagger 库可以解析注释并且生成跟之前手动生成相同的 Swagger 文件。
要整合 Swagger 到自己的代码中,要允许开发者便捷的撰写文档,保证新特性都会被记录,并且保持文档的更新。这里是一个教程,使用 Swagger 为 Scalatra 从注释中自动生成文档.这些注释方法根据不同的语言分成不同的 Swagger 文档块。
其他工具参见 Swagger services and tools
Swagger入门教程的更多相关文章
- Swagger入门教程(转)
[译]5.41 Swagger tutorial 单击此处查看原文 更多概念参见:Implementing Swagger with your API docs 关于 Swagger Swagger能 ...
- RESTful API & Swagger入门
什么是RESTful API? 原文地址:https://blog.csdn.net/hjc1984117/article/details/77334616 Swagger入门教程 https://w ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Redis使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-从零开始启动Osharp
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- Spring Boot:快速入门教程
什么是Spring Boot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...
- ABP入门教程4 - 初始化运行
点这里进入ABP入门教程目录 编译解决方案 重新生成解决方案,确保生成成功. 连接数据库 打开JD.CRS.Web.Host / appsettings.json,修改数据库连接设置Connectio ...
随机推荐
- attr设置checked,disabled等属性失效的问题,jquery的attr和prop的区别
最近做项目遇到一个问题,radio设置了默认checked值,attr("checked",true)切换checked值失效 最后发现是jquery1.6版本之后,attr和pr ...
- 分布式系统的消息&服务模式简单总结
分布式系统的消息&服务模式简单总结 在一个分布式系统中,有各种消息的处理,有各种服务模式,有同步异步,有高并发问题甚至应对高并发问题的Actor编程模型,本文尝试对这些问题做一个简单思考和总结 ...
- IP地址简介
IP地址 IP地址,Internet Protocol Address,网络协议地址: IP地址与网络接口绑定,并不是指向一台主机,一个主机可能有多个IP地址,如果其连接多个网络,有多个网络接口: I ...
- JavaScript 中 apply 、call 的详解
apply 和 call 的区别 ECMAScript 规范给所有函数都定义了 call 与 apply 两个方法,它们的应用非常广泛,它们的作用也是一模一样,只是传参的形式有区别而已. 原文作者:林 ...
- Mac中Eclipse安装和使用svn
Eclipse版本为Neon Release (4.6.0) 安装svn 安装HomeBrew 在终端中输入 ruby -e "$(curl -fsSL https://raw.github ...
- 一个两年java程序猿的2017个人总结
前言 又到了一年中最后的日子了,相信有不少公司要求员工写年度总结了,我也不例外.不过个人感觉在公司的写个年度总结来说,过于模板化了.其实很多没有必要.总之,本篇的个人总结,是按照个人的想法写的.简而言 ...
- 框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解)
框架原理第二讲,RTTI,运行时类型识别.(以MFC框架讲解) 一丶什么是RTTI,以及RTTI怎么设计 通过第一讲,我们知道了怎么样升成一个窗口了,以及简单的消息循环. 第二讲则是主要讲解RTTI ...
- MAMP升级mysql5.6到5.7
RT 1.先把mamp环境停掉 sudo sh /Applications/MAMP/bin/stop.sh 2.然后使用brew安装mysql5.7 brew install mysql 3.默认安 ...
- 7、树莓派编程;gpio编程;led闪烁
本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ12226981 1.树莓派接口对照,一定要找到对应的引脚,不要接错了.我画上箭头. 2.安装 下载地址,https://git.drogon.n ...
- vue 和 react 学习 异同点
vue 和 react 学习 异同点 本文不做两个框架比较,只对比了两个框架的语法对比,不代表任何观点,盗版必究,本人唯一qq:421217189 欢迎大家一起来学习探讨,壮我大前端(本文markdo ...