Swagger 教程:从零开始学习Swagger

news2024/12/30 1:37:43

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: true
          schema:
            $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.coloradmin.cn/o/1352891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

03-SpringCloud-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1,怎么变成了http://localhost:8081的呢? 1.2.源码跟踪 为什么我们只输入…

关于执行 roslaunch xxxxx yyyy.launch 后,没能进入 RViz 就卡死的问题

Problem 话不多说,先看图。 终端也会提示有报错(可能是这种,但不确定): 这是发现问题所在之后,故意改错,然后尝试的。☝ Solution 总以为是显卡的问题,一直在研究怎么在 Ubuntu2…

pytorch04:网络模型创建

目录 一、模型创建过程1.1 以LeNet网络为例1.2 LeNet结构1.3 nn.Module 二、网络层容器(Containers)2.1 nn.Sequential2.1.1 常规方法实现2.1.2 OrderedDict方法实现 2.2 nn.ModuleList2.3 nn.ModuleDict2.4 三种容器构建总结 三、AlexNet网络构建 一、模型创建过程 1.1 以LeNe…

【力扣题解】P501-二叉搜索树中的众数-Java题解

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P501-二叉搜索树中的众数-Java题解🌏题目描述💡题解&#x1f…

文本表示模型简介

文本是一类非常重要的非结构化数据,如何表示文本数据一直是机器学习领域的一个重要研究方向。那么有哪些文本表示模型?以及它们各有什么优缺点? 1. 常见的文本表示模型 1.1. 词袋模型和N-gram模型 最基础的文本表示模型是词袋模型。顾名思…

Java最新技术介绍和分析 (202305)

说明:本文完成了2023年5月份,当时最新的LTS版本是Java17,本文在撰写时参考了美团技术团队和阿里JDK团队相关的文章,以及本文也引了用文章中的图片。在此表示感谢! Java版本火车 相信老牌的Java开发者和爱好者把Java的…

计算机创新协会冬令营——暴力枚举题目01

首先是欢迎大家参加此次的冬令营,我们协会欢迎所有志同道合的同学们。话不多说,先来看看今天的题目吧。 题目 力扣题号:2351. 第一个出现两次的字母 注:下述题目和示例均来自力扣 题目 给你一个由小写英文字母组成的字符串 s &…

(ros2)控制gazebo移动的话题:

gazebo并不是ros2内自带的,是一个独立的软件,需要安装ros_gz功能被把ros2消息转换为gazebo可以识别的命令,并且把gazebo状态转换为ros2信息,所以可以认为ros_gz_bridge节点就是gazebo, 这个节点只接收2个话题&#xf…

Yarn的安装与使用详细介绍

什么是yarn Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用…

2024年天津仁爱学院专升本专业课考试考场安排及准考证打印的通知

天津仁爱学院2024年高职升本科专业课考试通知 一、考试科目及时间 天津仁爱学院2024年高职升本科专业课考试定于2024年1月9日9:00-14:00举行。考试地点:天津市静海区团泊新城博学苑,天津仁爱学院。具体考试科目时间安排如下表&a…

提高工作效率的Postman环境变量使用方法

在 Postman 中,用 Environments 来管理环境变量。我们在开发的过程中,往往会用到多个环境:开发环境,测试环境,UAT 环境,生产环境等。我们要调用不同环境的 API 时,只需切换 Postman 的 Environm…

ISP 基础知识积累

Amber:现有工作必要的技术补充,认识需要不断深入,这个文档后续还会增加内容进行完善。 镜头成像资料 ——干货满满,看懂了这四篇文章,下面的问题基本都能解答 看完思考 1、ISP 是什么,有什么作用&#xff…

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: …

【数据库原理】(5)关系数据库的关系数据结构

关系及相关概念 在关系模型中,无论是实体还是实体之间的联系均由关系(二维表)来表示。 1.域(Domain) 定义:域是一组具有相同数据类型的值的集合。例子:实数集合、整数集合、英文字母集合等。 2.笛卡儿积(Cartesian…

学习Vue单文件组件总结

今天主要学习了组件实例对象的一个重要内置关系和单文件组件。先说一下实例对象的内置关系,在这里要对JS中的原型链有一定的基础,Vue构造函数的prototype原型指向的是Vue的原型对象,new出来的Vue实例对__proto__同样指向的是Vue的原型对象&am…

Hex 文件类型字段详解

文章目录 地址类型字段详解02(扩展段地址记录):指定后续数据记录的向左移动4位后开始计算地址04(扩展线性地址记录):指定后续数据记录的起始地址的高16位 地址类型字段详解 02(扩展段地址记录&…

18、BLIP

简介 github BLIP提出了一种基于预训练的方法,通过联合训练视觉和语言模型来提升多模态任务的性能。 BLIP(Bootstrapping Language-Image Pretraining)是salesforce在2022年提出的多模态框架,是理解和生成的统一,引入了跨模态的编码器和解码…

RocketMQ5.0延时消息时间轮算法

前言 RocketMQ 相较于其它消息队列产品的一个特性是支持延时消息,也就是说消息发送到 Broker 不会立马投递给消费者,要等待一个指定的延迟时间再投递,适用场景例如:下单后多长时间没付款系统自动关闭订单。 RocketMQ 4.x 版本的延…

【LeetCode-剑指offer】-- 9.乘积小于K的子数组

9.乘积小于K的子数组 方法:滑动窗口 关于为什么子数组数目为j-11。这时候就要理解采用滑动窗口的思路其实是枚举子数组的右端点,然后来找到满足条件的最小左端点。也即当得到满足条件的窗口时,就意味着得到了以 j 作为右端点时满足条件的左端…

框架的灵魂之笔-反射

反射:框架的灵魂 类加载器 概述:当程序要使用某个类的时候,如果该类还未被加载到内存中,则系统会通过以下三个步骤 ①类的加载 ②类的连接 ③类的初始化来对类进行初始化。如果不出现意外情况,JVM将会连续完成这三个步…