Swagger 教程:从零开始学习Swagger

Swagger 是一个开源的 API 设计和文档工具,可以帮助全栈工程师更快、更简单地设计、构建、文档化和测试 RESTful API。本篇文章将为全栈工程师介绍 Swagger 的基础知识和使用方法,以及如何使用 Swagger 设计、文档化和测试 RESTful API。

一、Swagger 简介

Swagger 是一个开源的 API 设计和文档工具,由 Tony Tam 创建于 2010 年。Swagger 提供了一种简单、易于使用的方式来设计、构建、文档化和测试 RESTful API。Swagger 可以自动生成交互式 API 文档、客户端 SDK、服务器 stub 代码等,从而使开发人员更容易地开发、测试和部署 API。

Swagger 的主要组成部分包括:

  • OpenAPI 规范:Swagger 采用 OpenAPI 规范(前身是 Swagger 规范),用于定义和描述 RESTful API。OpenAPI 规范使用 JSON 或 YAML 格式编写,包含 API 的基本信息、端点、参数、请求和响应等信息。
  • Swagger Codegen:Swagger Codegen 是一个代码生成器,可以从 OpenAPI 规范自动生成客户端 SDK 和服务器 stub 代码。
  • Swagger UI:Swagger UI 是一个基于 HTML、CSS 和 JavaScript 的可交互的 API 文档界面。Swagger UI 可以自动生成 API 文档,让用户可以轻松地浏览、理解和测试 API。

二、Swagger 的使用

  1. 安装和配置 Swagger

Swagger 可以在许多编程语言和框架中使用,例如 Java、Python、Node.js、Ruby、PHP 等。不同的编程语言和框架需要使用不同的 Swagger 工具。在本文中,我们将使用 Swagger 的 Node.js 版本,即 Swagger Express。

首先,需要在全局安装 Swagger:

npm install -g swagger

然后,在项目目录下创建一个 Swagger 项目:

swagger project create my-api

接下来,进入 my-api 目录,并启动 Swagger:

cd my-api
swagger project start

此时,Swagger 就已经成功安装和配置好了。我们可以在浏览器中访问 http://localhost:10010/docs 来查看 Swagger UI。

  1. 设计和文档化 API

Swagger 使用 OpenAPI 规范来定义和描述 RESTful API。OpenAPI 规范使用 JSON 或 YAML 格式编写,包含 API 的基本信息、端点、参数、请求和响应等信息。

以下是一个简单的 OpenAPI 规范示例:

swagger: "2.0"
info:title: "My API"version: "1.0.0"
paths:/hello:get:summary: "Say hello"description: "Returns a greeting message"produces:- "text/plain"responses:200:description: "Successful operation"schema:type: "string

在上面的示例中,我们定义了一个 API,它有一个 /hello 端点,并使用 GET 请求方法。在 /hello 端点上,我们定义了一个摘要、描述、生产的响应格式、响应代码和返回的数据类型等信息。

在实际的开发中,我们需要根据具体的需求来设计和文档化 API。可以使用 Swagger Editor 来创建和编辑 OpenAPI 规范,然后使用 Swagger UI 生成交互式 API 文档。

以下是一个使用 Swagger Editor 创建 OpenAPI 规范的示例:

swagger: "2.0"
info:title: "Pet Store API"version: "1.0.0"
paths:/pets:get:summary: "List all pets"responses:200:description: "Successful operation"schema:type: "array"items:$ref: "#/definitions/Pet"post:summary: "Create a new pet"parameters:- name: "pet"in: "body"required: trueschema:$ref: "#/definitions/NewPet"responses:200:description: "Successful operation"schema:$ref: "#/definitions/Pet"
definitions:Pet:type: "object"properties:id:type: "integer"format: "int64"name:type: "string"NewPet:type: "object"properties:name:type: "string"

在上面的示例中,我们定义了一个 Pet Store API,它有一个 /pets 端点,使用 GET 和 POST 请求方法。在 GET 方法中,我们定义了一个摘要、响应信息和返回的数据类型等信息。在 POST 方法中,我们定义了一个摘要、参数、响应信息和返回的数据类型等信息。我们还定义了两个数据模型:Pet 和 NewPet。

  1. 自动生成代码

Swagger Codegen 可以根据 OpenAPI 规范自动生成客户端 SDK 和服务器 stub 代码。Swagger Codegen 支持多种编程语言和框架,例如 Java、Python、Node.js、Ruby、PHP 等。Swagger Codegen 可以使用命令行工具或者 API 来生成代码。

以下是使用 Swagger Codegen 生成 Node.js 服务器 stub 代码的示例:

swagger-codegen generate \-i petstore.yaml \-l nodejs-server \-o my-server

在上面的示例中,我们指定了输入的 OpenAPI 规范文件、代码生成器的语言和框架、以及输出的目录。Swagger Codegen 将会自动生成 Node.js 服务器 stub 代码,并且可以根据需要进行修改和调整。

  1. 测试 API

Swagger UI 提供了一个集成的测试工具,可以帮助开发人员测试 API 的功能、性能和可靠性。Swagger UI 中提供了一个测试页面,允许开发人员使用各种 HTTP 请求方法来测试 API 的不同端点。

以下是一个使用 Swagger UI 测试 API 的示例:

首先,在浏览器打开 Swagger UI,找到要测试的 API 端点,例如 /pets。然后,选择一个 HTTP 请求方法,例如 GET 方法。在 Swagger UI 中,我们可以看到该 API 的摘要、参数、响应和返回的数据等信息。

接下来,我们可以在 Swagger UI 中输入参数值,并点击“Try it out”按钮来测试 API。Swagger UI 将会向该 API 端点发送请求,并显示响应结果和状态码。开发人员可以使用 Swagger UI 来测试 API 的不同端点和不同参数,以确保 API 的功能、性能和可靠性。

  1. 集成和部署

Swagger 可以与许多流行的开发和部署工具(如 Git、Jenkins、Docker 等)集成,以便更容易地部署和管理 API。Swagger 可以自动生成 Swagger UI,使开发人员可以直接从浏览器访问 API 文档和测试页面。

例如,我们可以将 Swagger UI 集成到 Node.js 服务器中:

const express = require('express');
const app = express();const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('./swagger.json');app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));

在上面的示例中,我们使用 Express 框架来创建一个 Node.js 服务器,并将 Swagger UI 集成到 /api-docs 端点。我们还加载了一个 swagger.json 文件,该文件包含了我们创建的 OpenAPI 规范。使用 Swagger UI,我们可以从浏览器访问 /api-docs 端点,并查看 API 文档和测试页面。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/229808.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关键字:new关键字

在 Java 中,new关键字用于创建对象实例。它是对象创建的语法糖,用于分配内存空间并调用构造函数来初始化对象。 以下是new关键字的基本语法: 在上述语法中,ObjectType是要创建对象的类名,objectName是对象的引用变量…

Allins 官网上线,标志铭文赛道正式进入 AMM 交易时代

“Allins 正在通过全新的 AMM 方案为BRC20及多链铭文资产拓展 DeFi 场景,官网的全新上线意味着铭文资产的交易正式进入 AMM 时代。”

HW06 GAN来生成卡通人物头像- simple

simple -GAN 理论 生成对抗网络(GAN)是最近十年来比较火爆的技术之一,被誉为21世纪最有趣的创想。GAN作为生成网络,自然是可以生成诸多形式的数据,这些数据甚至是现实世界中不曾存在的。例如,最近非常火爆的换脸技术,或者是称为DeepFake,就是GAN的杰作(当然不可能是…

Bert-vits2最终版Bert-vits2-2.3云端训练和推理(Colab免费GPU算力平台)

对于深度学习初学者来说,JupyterNoteBook的脚本运行形式显然更加友好,依托Python语言的跨平台特性,JupyterNoteBook既可以在本地线下环境运行,也可以在线上服务器上运行。GoogleColab作为免费GPU算力平台的执牛耳者,更…

ExecutorCompletionService详解

本文已收录至Github,推荐阅读 👉 Java随想录 微信公众号:Java随想录 文章目录 摘要ExecutorCompletionService适用场景ExecutorCompletionService使用ExecutorCompletionService原理解析注意事项总结 摘要 ExecutorCompletionService 是Jav…

Java原生启动Tomcat

文章目录 引入依赖启动Tomcat代码示例将嵌入式 Tomcat 服务器用于已有的 WAR 文件为现有的 Java Web 应用程序嵌入 Tomcat 服务器 相关APITomcat APIContonxt API 启动错误springboot底层Tomcat的实现学习博客 引入依赖 maven: <dependency><groupId>org.apache.…

如何在无公网IP环境使用Windows远程桌面Ubuntu

文章目录 一、 同个局域网内远程桌面Ubuntu二、使用Windows远程桌面连接三、公网环境系统远程桌面Ubuntu1. 注册cpolar账号并安装2. 创建隧道&#xff0c;映射3389端口3. Windows远程桌面Ubuntu 四、 配置固定公网地址远程Ubuntu1. 保留固定TCP地址2. 配置固定的TCP地址3. 使用…

48道Linux面试题

本博客将汇总 Linux 面试中常见的题目&#xff0c;并提供详细的解答。 文章目录 1、绝对路径用什么[符号表](https://so.csdn.net/so/search?q符号表&spm1001.2101.3001.7020)示&#xff1f;当前目录、上层目录用什么表示&#xff1f;主目录用什么表示? 切换目录用什么命…

DolphinScheduler实际应用

前言 最近公司新启动了一个项目&#xff0c;然后领导想用一下新技术&#xff0c;并且为公司提供多个大数据调度解决方案&#xff0c;我呢就根据领导要求调研了下当前的开源调度工具&#xff0c;最终决定采用DolphinScheduler&#xff0c; 因此研究了一下DolphinScheduler &…

php安装扩展event 提示 No package ‘openssl‘ found 解决方法

在使用pecl编译安装最新版event模块的时候提示 No package openssl found , 可是本机是安装了openssl的, 编译时找不到, 大概率就是环境配置的问题了, 增加 OPENSSL_CFLAGS OPENSSL_LIBS环境变量即可解决. 异常提示信息: checking for openssl > 1.0.2... no configure: …

阿里云服务器端口PPTP 1723放行教程

阿里云服务器安装PPTP VPN需要先开通1723端口&#xff0c;阿里云服务器端口是在安全组中操作的&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说明阿里云服务器安全组开放PPTP VPN专用1723端口教程&#xff1a; 阿里云服务器放行1723端口教程 PPTP是点对点隧道协议&#…

C++ 多态向下转型详解

文章目录 1 . 前言2 . 多态3 . 向下转型3.1 子类没有改进父类的方法下&#xff0c;去调用该方法3.2 子类有改进父类的方法下&#xff0c;去调用该方法3.3 子类没有改进父类虚函数的方法下&#xff0c;去调用改方法3.4 子类有改进父类虚函数的方法下&#xff0c;去调用改方法3.5…

接口测试场景:怎么实现登录之后,需要进行昵称修改?

在接口测试中有一个这样的场景&#xff1a;登录之后&#xff0c;需要进行昵称修改&#xff0c;怎么实现&#xff1f; 首先我们分别看下登录、昵称修改的接口说明&#xff1a; 以上业务中补充一点&#xff0c;昵称修改&#xff0c;还需要添加请求头Authorization传登录获取的to…

智慧监控平台/AI智能视频EasyCVR接口调用编辑通道详细步骤

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;GB28181视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c…

AI:106-基于卷积神经网络的遥感图像地物分类

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

解决Redis序列化乱码问题

如果我们使用原生的JDK序列化&#xff0c;那么当我们将数据存储到Redis中就会出现乱码的情况 为了解决这个问题我们需要重写RedisTemplate从而解决序列化乱码问题 首先在Maven中引入相应的依赖 <dependency> <groupId>com.fasterxml.jackson.core</group…

面向对象综合训练综合练习(文字版格斗游戏,对象数组,复杂的对象数组操作)

文章目录 练习一&#xff1a;文字版格斗游戏练习二&#xff1a;文字版格斗游戏进阶练习三&#xff1a;对象数组&#xff08;商品&#xff09;练习四&#xff1a;对象数组&#xff08;汽车&#xff09;练习五&#xff1a;对象数组&#xff08;手机&#xff09;练习六&#xff1a…

【Linux】深度解剖环境变量

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟悉并掌握Linux的环境变量。 > 毒鸡汤&#x…

探索 3D 图形处理的奥秘

最近一年多来&#xff0c;在 3Dfx、Intel 们的狂轰滥炸中&#xff0c;在 Quake、古墓丽影们的推波助澜下&#xff0c;三维图形已经成为计算机迷眼中的又一个热点。3D 世界到底是怎样的神奇&#xff0c;我们又是怎样享受它的乐趣呢&#xff1f;就让我们来一探究竟吧。 图形基础…

流媒体学习之路(WebRTC)——GCC分析(4)

流媒体学习之路(WebRTC)——GCC分析&#xff08;4&#xff09; —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标&#xff1a;可以让大家熟悉各类Qos能力、带宽估计能力&#xff0c;提供每个环节关键参数调节接口并实现一个json全配置…