swagger的简介及使用方法

Swagger 是一个用于描述、生成、文档化和测试 RESTful API 的开源工具集。它可以自动生成 API 文档,帮助开发者理解和使用 API。Swagger 由 Swagger.io 提供,并已经发展成了一套广泛应用于 API 设计和文档的标准。

Swagger 项目的历史可以追溯到 2010 年,它最初由 Tony Tam 创建。当时,API 开发者通常需要花费大量时间手动编写和维护文档,并且手动维护文档容易与实际 API 的实现不一致,导致文档和实际接口的差异。Swagger 的设计目标就是通过自动生成文档,减少这些手动工作,提高开发效率。

发展历程

  1. 2011年

    • Swagger 在 GitHub 上开源发布,迅速吸引了开发者的关注。它提供了一个简单的注解系统,开发者通过在代码中添加注解即可自动生成 API 文档。Swagger 可以帮助开发者和团队更好地理解和使用 API。
  2. 2015年

    • Swagger 被纳入 OpenAPI Initiative (OAI),一个由多个技术公司和开源社区组成的组织,旨在制定开放的 API 规范。OpenAPI 规范(OAS,OpenAPI Specification)取代了原有的 Swagger 规范,成为更加标准化的 API 描述格式。
    • Swagger 工具集的名字也被保持了下来,仍然用于描述和生成 API 文档,而 OpenAPI 则成为技术规范。
  3. 2016年

    • Swagger 发布了 Swagger 2.0,并继续进行更新与完善。Swagger 2.0 是 Swagger 生态系统的基础,至今仍被广泛使用。
  4. 2017年以后

    • OpenAPI 3.0 规范发布,它包含了对 Swagger 2.0 的改进和扩展,提供了更强大的功能。Swagger 的工具链也开始支持 OpenAPI 3.0 规范,并向兼容性过渡。

Swagger 的主要组件

Swagger 的工具集包括多个组成部分,使得开发者可以更好地设计和管理 API:

  1. Swagger Editor

    • 一个基于 Web 的编辑器,可以帮助开发者编写和编辑 OpenAPI 规范文件(通常为 swagger.yaml 或 swagger.json 文件)。它支持实时预览和验证 API 规范。
  2. Swagger UI

    • Swagger UI 是一个基于浏览器的界面,提供交互式文档界面,允许开发者和用户查看 API 文档,并直接在文档界面上测试 API 的各个端点。
  3. Swagger Codegen

    • Swagger Codegen 允许开发者从 OpenAPI 规范中自动生成客户端 SDK、服务器端代码和 API 文档。这些代码生成器支持多种编程语言和框架。
  4. Swagger Hub

    • Swagger Hub 是一个商业化平台,用于协作设计、构建和管理 API 文档。它提供了基于云的 API 管理、版本控制和协作功能,适用于企业级应用。

Swagger 的优点

  • 自动化文档生成:通过注解,Swagger 可以自动生成 API 的文档,避免手动编写文档,减少出错概率。
  • 易于使用:开发者可以通过简单的注解和配置文件来定义 API,Swagger UI 提供了交互式的界面,方便开发者和用户查看和测试 API。
  • 开源和广泛支持:Swagger 是开源的,得到了广泛的社区支持,并且能够与许多开发框架(如 Spring、Node.js、Java、Python 等)兼容。

Swagger 的使用

1. @Api

  • 作用:用于标记一个类是一个 Swagger 资源(通常是一个 Controller 类)。
  • 常见用法
  • @Api(tags = "用户管理", description = "管理用户的 API")
    public class UserController {// 控制器代码
    }
    

2. @ApiOperation

  • 作用:描述单个 API 操作(通常是一个方法),提供接口的详细信息,如功能说明、HTTP 方法、响应类型等。
  • 常见用法
    @ApiOperation(value = "获取用户列表", notes = "获取所有用户的列表", response = User.class)
    @GetMapping("/users")
    public List<User> getUsers() {// 代码
    }
    

3. @ApiParam

  • 作用:用于描述方法参数的详细信息(例如:是否必需、默认值等)。
  • 常见用法
    @ApiOperation("获取指定用户")
    @GetMapping("/user/{id}")
    public User getUser(@ApiParam(value = "用户ID", required = true) @PathVariable Long id) {// 代码
    }
    

4. @ApiResponse

  • 作用:描述 API 操作的响应信息,例如状态码和响应类型。
  • 常见用法
    @ApiOperation(value = "删除用户", notes = "删除指定用户")
    @ApiResponses({@ApiResponse(code = 200, message = "删除成功"),@ApiResponse(code = 404, message = "用户未找到")
    })
    @DeleteMapping("/user/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {// 代码
    }
    

5. @ApiModel

  • 作用:用于定义 API 中的复杂对象模型(即请求体或响应体),例如对象参数或返回的复杂数据类型
  • 常见用法
  • @ApiModel(description = "用户对象")
    public class User {@ApiModelProperty(value = "用户ID", required = true)private Long id;@ApiModelProperty(value = "用户姓名", example = "张三")private String name;
    }
    

6. @ApiModelProperty

  • 作用:用于为模型属性提供详细描述,包括字段说明、是否必填、默认值等。
  • 常见用法
  • public class User {@ApiModelProperty(value = "用户ID", required = true)private Long id;@ApiModelProperty(value = "用户姓名", example = "张三")private String name;
    }
    

7. @PathParam@QueryParam@HeaderParam@FormParam

  • 作用:用于绑定 HTTP 请求的路径、查询参数、请求头和表单参数。它们分别对应不同类型的参数提取。
  • 常见用法
  • @GetMapping("/user")
    public User getUser(@QueryParam("id") Long id) {// 代码
    }
    

8. @RequestBody

  • 作用:用于标注方法参数接收请求体的数据,通常用来处理 JSON 或 XML 格式的请求。
  • 常见用法
  • @PostMapping("/user")
    public User createUser(@RequestBody User user) {// 代码
    }
    

9. @RequestMapping@GetMapping@PostMapping@PutMapping@DeleteMapping

  • 作用:用于定义 API 的 HTTP 请求类型和 URL 路径。
  • 常见用法
  • @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) {// 代码
    }

10. @Consumes@Produces

  • 作用:用于标注接口支持的内容类型,通常用于描述请求和响应的格式(如 JSON、XML 等)。
  • 常见用法
  • @Consumes("application/json")
    @Produces("application/json")
    @PostMapping("/user")
    public ResponseEntity<User> createUser(@RequestBody User user) {// 代码
    }
    

11. @SwaggerDefinition

  • 作用:用来描述 Swagger 配置的元数据,如 API 的标题、版本、描述等。
  • 常见用法
  • @SwaggerDefinition(info = @Info(title = "用户管理 API", version = "1.0", description = "提供用户管理相关的操作")
    )
    public class UserController {// 控制器代码
    }
    

12. @ResponseStatus

  • 作用:用于指定 HTTP 响应的状态码,通常与 @ExceptionHandler 配合使用,定义异常的响应状态。
  • 常见用法
  • @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "用户未找到")
    public class UserNotFoundException extends RuntimeException {// 代码
    }
    

OpenAPI 和 Swagger 的关系

随着 OpenAPI Initiative 的出现,Swagger 成为了 OpenAPI 规范的工具之一。虽然 OpenAPI 规范变成了行业标准,但 Swagger 依然是最常用的工具集之一,并且支持 OpenAPI 3.0 规范。可以将 Swagger 理解为 OpenAPI 规范的工具实现,它包括了多种工具和框架来帮助开发者设计、文档化和测试 API。

总结

Swagger 从最初的一个 API 文档工具,逐渐发展成为一个完整的工具链,帮助开发者更高效地设计和管理 API。随着 OpenAPI 规范的推行,Swagger 成为这一规范的核心工具,继续服务于全球的开发者社区。


天不老,情难绝,信似双丝网,中有千千结

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

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

相关文章

解决Flutter 2.10.5在升级Xcode 16后的各种报错

Flutter 环境 Flutter version 2.10.5Dart version 2.16.2DevTools version 2.9.2CocoaPods version 1.16.2Xcode 16.3 问题一&#xff1a;XCResult parsing error: Error: This command is deprecated and will be removed in a future release, --legacy flag is required t…

Vue + Spring Boot 整合全解析

一、引言 在当今的Web开发领域&#xff0c;前后端分离架构已成为主流。Vue.js作为一款流行的前端框架&#xff0c;以其简洁易用和高效的特点深受开发者喜爱&#xff1b;Spring Boot则是Java后端开发中快速构建应用的利器。将Vue和Spring Boot整合&#xff0c;能够充分发挥两者…

PDF.js 生态中如何处理“添加注释\添加批注”以及 annotations.contents 属性

我们来详细解释一下在 PDF.js 生态中如何处理“添加注释”以及 annotations.contents 属性。 核心要点&#xff1a;PDF.js 本身主要是阅读器&#xff0c;不是编辑器 首先&#xff0c;最重要的一点是&#xff1a;PDF.js 的核心库 (pdfjs-dist) 主要设计用于解析和渲染&#xf…

当HTTP遇到SQL注入:Java开发者的攻防实战手册

一、从HTTP请求到数据库查询:漏洞如何产生? 危险的参数拼接:Servlet中的经典错误 漏洞代码重现: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String category = request.getParameter("…

【grafana原生告警中心配置飞书机器人告警】

在grafana中的connect point中使用webhook的方式推送到飞书&#xff0c;始终无法触发告警&#xff0c;原因是grafana推送的格式飞书不识别&#xff0c;现有两种方式 1.使用中转服务 使用flask搭建一个服务&#xff0c;grafana告警先通过webhook发送到web服务中&#xff0c;格…

kafka集群认证

1、安装Kerberos(10.10.10.168) yum install krb5-server krb5-workstation krb5-libs -y ​ 查看版本 klist -V ​ Kerberos 5 version 1.20.1 ​ 编辑/etc/hosts 10.10.10.168 ms1 10.10.10.150 ms2 10.10.10.110 ms3 vim /etc/krb5.conf # Configuration snippets ma…

前端工程化之自动化测试

自动化测试 自动化测试为什么需要测试&#xff1f;什么时候需要考虑测试测试类型前端测试框架单元测试Jest 重点掌握项目示例package.jsonsrc/utils/math.tssrc/utils/math.test.ts进行测试jest.config.js覆盖率直观看覆盖率coverage/lcov-report/index.html src/main.test.tst…

分布式系统核心原理

CAP定理与权衡实践 CAP定理 一致性&#xff08;Consistency&#xff09; 强一致性&#xff1a;所有读写操作均基于最新数据&#xff08;如银行转账&#xff09;。 最终一致性&#xff1a;数据副本经过一段时间后达到一致&#xff08;如社交媒体的点赞数&#xff09;。 技术实现…

Step文件无法编辑怎么办?

Step文件无法编辑怎么办&#xff1f; 这里介绍两种方法&#xff0c; 1、 直接导入 准备step文件&#xff0c;solidworks导入后是这样&#xff0c;不能在上面直接编辑 图 1 点击右键&#xff0c;选择解除特征&#xff08;不同版本的可能不太一样&#xff0c;这里是solidworks2…

TIM_ITConfig() 和 TIM_Cmd()

在STM32的定时器中断配置中&#xff0c;TIM_ITConfig() 和 TIM_Cmd() 是两个关键函数&#xff0c;它们分别控制中断使能和定时器计数器的启停&#xff0c;作用层级不同。以下是详细解释&#xff1a; 1. TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE) 作用 启用定时器的特定中断…

TensorFlow 实现 Mixture Density Network (MDN) 的完整说明

本文档详细解释了一段使用 TensorFlow 构建和训练混合密度网络&#xff08;Mixture Density Network, MDN&#xff09;的代码&#xff0c;涵盖数据生成、模型构建、自定义损失函数与预测可视化等各个环节。 1. 导入库与设置超参数 import numpy as np import tensorflow as t…

数据结构实验7.2:二叉树的基本运算

文章目录 一&#xff0c;实验目的二&#xff0c;问题描述三&#xff0c;基本要求四&#xff0c;实验操作五&#xff0c;示例代码六&#xff0c;运行效果 一&#xff0c;实验目的 深入理解树与二叉树的基本概念&#xff0c;包括节点、度、层次、深度等&#xff0c;清晰区分二叉…

直线轴承常规分类知多少?

直线轴承的分类方式多样&#xff0c;以下是从材质、结构形状和常规系列三个维度进行的具体分类&#xff1a; 按主要材质分类 外壳材质&#xff1a;常见的有不锈钢&#xff0c;具有良好的耐腐蚀性&#xff0c;适用于一些对环境要求较高、易受腐蚀的工作场景&#xff1b;轴承…

websocket和SSE学习记录

websocket学习记录 websocket使用场景 即时聊天在线文档协同编辑实施地图位置 从开发角度来学习websocket开发 即使通信项目 通过node建立简单的后端接口,利用fs&#xff0c; path&#xff0c; express app.get(*, (req, res) > {const assetsType req.url.split(/)[…

CUDA编程中影响性能的小细节总结

一、内存访问优化 合并内存访问&#xff1a;确保相邻线程访问连续内存地址&#xff08;全局内存对齐访问&#xff09;。优先使用共享内存&#xff08;Shared Memory&#xff09;减少全局内存访问。避免共享内存的Bank Conflict&#xff08;例如&#xff0c;使用padding或调整访…

【双指针】对撞指针 快慢指针 移动零

文章目录 双指针介绍对撞指针快慢指针283. 移动零解题思路算法思路算法流程双指针介绍 ​ 算法中的双指针,并不一定是指我们平常在 c/c++ 使用的指针类型,更多时候其实是数组的下标等,因为它们也是有标识某个元素的功能,通常我们也就顺其自然地称其为 “指针” ! ​ 常见…

数据结构0基础学习堆

文章目录 简介公式建立堆函数解释 堆排序O(n logn)topk问题 简介 堆是一种重要的数据结构&#xff0c;是一种完全二叉树&#xff0c;&#xff08;二叉树的内容后面会出&#xff09;&#xff0c; 堆分为大小堆&#xff0c;大堆&#xff0c;左右结点都小于根节点&#xff0c;&am…

4.17--4.19刷题记录(贪心)

第一部分&#xff1a;准备工作 代码随想录中解释为&#xff1a;贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 而我的理解为&#xff1a;贪心实质上是具有最优子结构的一种算法。所有的解都能由当前最优的解组成。 第二部分&#xff1a;开始刷题 &…

学习笔记十七——Rust 支持面向对象编程吗?

&#x1f9e0; Rust 支持面向对象编程吗&#xff1f; Rust 是一门多范式语言&#xff0c;主要以 安全、并发、函数式、系统级编程为核心目标&#xff0c;但它同时也支持面向对象的一些关键特性&#xff0c;比如&#xff1a; 特性传统 OOP&#xff08;如 Java/C&#xff09;Ru…

【Linux】43.网络基础(2.5)

文章目录 2.4 TCP/UDP对比2.4.1 用UDP实现可靠传输(经典面试题) 2.5 TCP 相关实验2.5.1 理解 listen 的第二个参数 2.4 TCP/UDP对比 我们说了TCP是可靠连接, 那么是不是TCP一定就优于UDP呢? TCP和UDP之间的优点和缺点, 不能简单, 绝对的进行比较TCP用于可靠传输的情况, 应用于…