Swagger升级指南:Swagger2与Swagger3注解差异揭秘

在API开发的世界里,Swagger已经成为了一个不可或缺的工具,它让API的文档化和前后端的协作变得前所未有地简单。随着Swagger的进化,我们迎来了Swagger3,也被称为OpenAPI Specification 3.0。本篇博客将带大家深入了解Swagger2和Swagger3(OpenAPI 3)之间的主要区别,特别是在注解上的变化,并且提供一些实用的Java示例,帮助大家平滑过渡到Swagger的新时代。

引言

随着RESTful API的普及,API文档成为了开发过程中的一个重要组成部分。Swagger作为API文档的领先工具,提供了一种标准化的方法来设计、构建、文档化以及使用REST API。Swagger2长期以来一直是开发者的首选,但随着Swagger3的出现,很多开发者面临着升级的选择。本文旨在帮助你理解两个版本之间的差异,并通过示例指导如何迁移。

Swagger简介

Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体来说,Swagger提供了一套标准的注解,开发者可以通过这些注解来描述他们的API,然后Swagger可以根据这些注解生成可交互的API文档。

Swagger2与Swagger3的核心区别

Swagger3是在Swagger2的基础上进行了改进和扩展,它实现了OpenAPI Specification 3.0,这个最新版本的规范带来了许多新特性和改进,如对回调、链式操作、组件重用等支持。

注解对比

通用注解变化

在Swagger3中,一些基本注解发生了变化。例如,@Api注解在Swagger3中被弃用,因为Swagger3鼓励使用更自然的方式来组织API文档。

API信息配置

在Swagger2中,你可能习惯了使用@Api注解和Docket配置API的基本信息。而在Swagger3中,这些信息通常在OpenAPI配置类中通过构建OpenAPI实例来设置。

路径和操作注解

Swagger2的@ApiOperation@ApiImplicitParam@ApiImplicitParams注解在Swagger3中被@Operation@Parameter注解替代,提供了更多的配置选项和更好的可读性。

参数注解

Swagger3引入了@Parameter注解来描述参数,它提供了更多的属性来定义参数的元数据,如schemaexamplecontent等。

模型注解

Swagger3通过使用@Schema注解来描述数据模型,这是一个强大的注解,它提供了对模型定义的完全控制。

实践:从Swagger2迁移到Swagger3

迁移过程中,你需要注意替换过时的注解,并且调整配置类以适应新的OpenAPI 3.0结构。这通常涉及到替换Docket配置以及重构现有的注解。

代码示例

让我们看一下在Swagger2和Swagger3中如何配置API信息和使用注解。

Swagger2配置示例

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("com.example")).build().apiInfo(new ApiInfoBuilder().title("My API").description("API Description").version("1.0").build());}
}

Swagger3配置示例

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SwaggerConfig {@Beanpublic GroupedOpenApi publicApi() {return GroupedOpenApi.builder().group("spring").packagesToScan("com.example").build();}@Beanpublic OpenAPI springShopOpenAPI() {return new OpenAPI().info(new Info().title("My API").description("API Description").version("v2.0"));}
}

在上面的Swagger3配置中,我们使用了GroupedOpenApi来创建API组,并且使用了OpenAPI类来构建API的元信息。

Swagger2与Swagger3注解的主要区别

Swagger3基于OpenAPI Specification 3.0,这个新版本的规范带来了更多的灵活性和表达力。以下是Swagger2和Swagger3注解的一些主要区别:

通用注解

  • Swagger2: 使用@Api来注解控制器类,表明该类的路径应该被Swagger文档化。
  • Swagger3: 不再需要@Api注解。Swagger3使用更自然的方式来扫描类路径,自动包含所有的控制器。

API信息和描述

  • Swagger2: 通过@ApiInfo@ApiOperation注解来提供API的信息和操作描述。
  • Swagger3: 使用@Tag注解来替代@Api,并且通过@Operation注解来提供操作的描述。

路径和操作注解

  • Swagger2: 使用@ApiOperation来描述一个HTTP操作,@ApiImplicitParam@ApiImplicitParams用于描述参数。
  • Swagger3: 引入了@Operation注解来描述HTTP操作,@Parameter注解用于描述参数。

参数注解

  • Swagger2: 参数注解是通过@ApiParam@ApiImplicitParam来描述。
  • Swagger3: 使用@Parameter注解来描述参数,它提供了更丰富的属性,如schemaexamplecontent

请求体和响应体注解

  • Swagger2: 使用@ApiModel@ApiModelProperty注解来描述请求和响应的数据模型。
  • Swagger3: 引入了@Schema注解来描述数据模型,提供了更多的细节和配置选项。

安全和授权注解

  • Swagger2: 使用@ApiResponses@ApiResponse@ApiOperation等注解来描述响应和错误码。
  • Swagger3: @ApiResponse注解仍然存在,但是现在可以包含更多的信息,如媒体类型和例子。

详细注解对比

下面我们将详细比较这些注解在Swagger2和Swagger3中的具体使用和区别。

API信息配置

Swagger2
// Swagger2 使用Docket进行配置
@Bean
public Docket api() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("My API").description("API Description").version("1.0").build();
}
Swagger3
// Swagger3 使用OpenAPI进行配置
@Bean
public OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("My API").version("2.0").description("API Description").termsOfService("http://swagger.io/terms/").license(new License().name("Apache 2.0").url("http://springdoc.org")));
}

路径和操作注解

Swagger2
@Api(value = "User Management", description = "Operations pertaining to users")
@RestController
@RequestMapping("/users")
public class UserController {@ApiOperation(value = "Get a user by ID")@RequestMapping(value = "/{userId}", method = RequestMethod.GET)public User getUserById(@PathVariable Long userId) {// ...}
}
Swagger3
@Tag(name = "User Management", description = "Operations pertaining to users")
@RestController
@RequestMapping("/users")
public class UserController {@Operation(summary = "Get a user by ID")@GetMapping("/{userId}")public User getUserById(@PathVariable Long userId) {// ...}
}

参数注解

Swagger2
public User getUserById(@ApiParam(value = "ID of the user to return", required = true) @PathVariable Long userId) {// ...
}
Swagger3
public User getUserById(@Parameter(description = "ID of the user to return", required = true) @PathVariable Long userId) {// ...
}

请求体和响应体注解

Swagger2
@ApiModel(description = "User object")
public class User {@ApiModelProperty(notes = "The database generated user ID")private Long id;// ...
}
Swagger3
@Schema(description = "User object")
public class User {@Schema(description = "The database generated user ID")private Long id;// ...
}

安全和授权注解

Swagger2
@ApiOperation(value = "Add a new user", authorizations = {@Authorization(value = "apiKey")
})
Swagger3
@Operation(summary = "Add a new user", security = {@SecurityRequirement(name = "apiKey")
})

总结

Swagger3(OpenAPI 3)是对Swagger2的一个重大升级,它不仅提供了更多的新特性,也带来了注解的变化。虽然迁移可能需要一些工作,但新的规范和特性是值得的。本文提供了一个基础的迁移指南和注解对比,帮助大家理解如何从Swagger2迁移到Swagger3,并利用它来更好地文档化API。

👉 💐🌸 CSDN请关注 "一叶飘零_sweeeet", 一起学习,一起进步! 🌸💐


 

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

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

相关文章

美国联邦机动车安全标准-FMVSS

FMVSS标准介绍: FMVSS是美国《联邦机动车安全标准》,由美国运输部下属的国家公路交通安全管理局(简称NHTSA)具体负责制定并实施。是美国联邦政府针对机动车制定的安全标准,旨在提高机动车的安全性能,减少交通事故中的人员伤亡。F…

计算机提示vcruntime140.dll丢失的解决方法,多种修复教程分享

vcruntime140.dll是一个非常重要的动态链接库文件,它包含了许多运行时的函数和类。然而,有时候我们可能会遇到vcruntime140.dll无法继续执行代码的问题,这会给我们带来很大的困扰。那么,这个问题是什么原因导致的呢?又…

打破枯燥工作日,用Python统计键盘和鼠标点击次数,钉钉告诉你今天摸鱼了多少次!

1 前言 是否曾想过,在一天的工作中,你到底点击了键盘多少次,或者鼠标点击了多少下? 是否好奇每天工作的时候,自己究竟有多努力? 本文将带你使用 Python,利用 pynput 监听键盘和鼠标事件&…

有载分接开关测试仪

产品概述 KDKC-2020变压器有载分接开关测试仪是用于测量和分析电力系统中电力变压器及特种变压器有载分接开关电气性能指标的综合测量仪器。它采用计算机控制,通过特殊设计的测量电路,可实现对有载分接开关的过渡时间、过渡波形、过渡电阻、三相同期性、…

node版本与npm版本不对应的解决方案

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 错误情况 今天遇到了个问题,原来用的node的版本是v14.16.0的,后来升级到了最新版20多的时候,以前的项目启动不了。 于是我手动将node卸载了&#xff0c…

新能源车企年底冲刺KPI,只能抓住“价格战”做文章?

新能源汽车行业的价格战似乎看不到尽头。 自特斯拉吹响号角后,今年以来,业内已然开启了几轮颇具规模的价格战。 如今进入年底,价格战不仅没有消停,还愈打愈烈。据不完全统计,12月,已有20多家车企先后开启…

如何在公网环境下使用Potplayer访问本地群晖webdav中的影视资源

文章目录 本教程解决的问题是:按照本教程方法操作后,达到的效果是:1 使用环境要求:2 配置webdav3 测试局域网使用potplayer访问webdav3 内网穿透,映射至公网4 使用固定地址在potplayer访问webdav ​ 国内流媒体平台的内…

C++ Qt开发:TabWidget实现多窗体功能

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TabWidget标签组件的常用方法及灵活运用。 Q…

TSINGSEE青犀边缘AI计算基于车辆结构化数据的车辆监控方案

随着人工智能技术的不断发展,边缘AI技术逐渐成为智能交通领域的研究热点。其中,基于边缘AI的车辆结构化数据技术与车辆监控系统是实现智能交通系统的重要手段之一。为了满足市场需求,TSINGSEE青犀边缘AI智能分析网关/视频智能分析平台推出了一…

对Ubuntu20.04.2 mate 桌面 Brisk menu 组件的配置

Brisk Menu 让菜单在 mate 桌面上灵活布局, 那个会跳动的精灵还是挺不错的,适当处理后就得到了下面干净利索的桌面。 Ubuntu 安装时,在控制中心留有 plank reference 设置功能,让屏幕中底部的这些组件在不同位置摆放。当进行配置时…

SpringBoot代码混淆与反混淆加密工具详解

目录 反编译 混淆 正文 一共就两步,无需源码,直接对ipa文件进行混淆加密 打开要处理的IPA文件 设置签名使用的证书和描述文件 开始ios ipa重签名 简单就是把代码跑一哈,然后我们的代码 .java文件 就被编译成了 .class 文件 反编译 就是…

从传统型数据库到非关系型数据库

一 什么是数据库 数据库顾名思义保存数据的仓库,其本质是一个具有数据存储功能的复杂系统软件,数据库最终把数据保存在计算机硬盘,但数据库并不是直接读写数据在硬盘,而是中间隔了一层操作系统,通过文件系统把数据保存…