还在手写接口文档?看Swagger如何助你解放双手去吃鸡

news2024/11/29 8:49:54

近期又有小伙伴私信辉哥,问辉哥现在的接口文档都是怎么编写的?今天辉哥就给大家聊聊,项目中怎么接入Swagger,实现在线接口文档。来,咱们这就开怼!

一. 前言

现在的项目开发很多都会采用前后端分离的模式,前端负责调用接口,进行渲染,前端和后端的唯一联系,就得是依靠API接口来完成。因此API接口文档就变得越来越重要。Swagger就是一个方便我们更好地编写API文档的框架,并且Swagger还可以模拟http请求调用。

二. Swagger使用步骤

废话少说,我们直接上使用教程。

1. 导入jar

<dependency>
  <groupId>com.github.xiaoymin</groupId>
  <artifactId>knife4j-spring-boot-starter</artifactId>
  <version>3.0.3</version>
</dependency>

2. 相关配置类

2.1 application.yml中增加配置

# Swagger配置
swagger:
# 是否开启swagger
  enabled: true

注意:一般在生产环境中不需要swagger,该值可以设置为false。

2.2 Swagger的配置类

配置类中需要使用@EnableOpenApi注解进行修饰。

/**
 * Swagger3的接口配置
 * <p>
 * http://localhost:8080/swagger-ui/index.html#/
 */
@Configuration
@EnableOpenApi
public class SwaggerConfig {

    /**
     * 是否开启swagger
     */
    @Value("${swagger.enabled}")
    private boolean enabled;

    /**
     * 创建API
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                // 是否启用Swagger
                .enable(enabled)
                // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
                .apiInfo(apiInfo())
                // 设置哪些接口暴露给Swagger展示
                .select()
                // 扫描所有有注解的api,用这种方式更灵活
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                // 扫描指定包中的swagger注解
                //.apis(RequestHandlerSelectors.basePackage("com.qfedu"))
                // 扫描所有
                .paths(PathSelectors.any())
                .build()
                /* 设置安全模式,swagger可以设置访问token */
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts())
                .pathMapping("/");
    }

    /**
     * 安全模式,这里指定token通过Authorization头请求头传递
     */
    private List<SecurityScheme> securitySchemes() {
        List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
        apiKeyList.add(new ApiKey("token", "token", In.HEADER.toValue()));
        return apiKeyList;
    }

    /**
     * 安全上下文
     */
    private List<SecurityContext> securityContexts() {
        List<SecurityContext> securityContexts = new ArrayList<>();
        securityContexts.add(
                SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
                        .build());
        return securityContexts;
    }

    /**
     * 默认的安全上引用
     */
    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> securityReferences = new ArrayList<>();
        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
        return securityReferences;
    }

    /**
     * 添加摘要信息
     */
    private ApiInfo apiInfo() {
        // 用ApiInfoBuilder进行定制
        return new ApiInfoBuilder()
                // 设置标题
                .title("app接口文档")
                // 描述
                .description("具体包括XXX,XXX模块...")
                // 作者信息
                .contact(new Contact("qfedu", null, null))
                // 版本
                .version("1.0.0")
                .build();
    }
}

2.3 swagger相关静态资源的映射处理

@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {

    /**
     * 继承了WebMvcConfigurationSupport,重新指定静态资源
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations(
                "classpath:/static/");
        registry.addResourceHandler("swagger-ui.html", "doc.html").addResourceLocations(
                "classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }
}

3. 接口调用

我们可以打开如下地址进行接口调用。

http://localhost:8010/doc.html

注意,http://localhost:8010/swagger-ui/index.html 无法使用,是由于knife4j-spring-boot-starter中排除了springfox-swagger-ui的jar包。如果我们想使用 http://localhost:8010/swagger-ui/index.html ,还需要额外导入一个jar包。

<dependency>
  <groupId>io.springfox</groupId>
  <artifactId>springfox-swagger-ui</artifactId>
  <version>3.0.0</version>
</dependency>

三. 设置接口文档的用户名和密码

出于安全考虑,我们在application.yml中,设置访问swagger时的用户名和密码。

knife4j:
  enable: true
  basic:
    enable: true
    username: admin
    password: dic13579

四. 总结

好了,今天的文章就到这里,你学会怎么使用swagger在线文档了吗?

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

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

相关文章

Linux程序包管理工具

Linux程序包管理工具 1. 程序包 我已经使用 Linux 已经有很长一段时间了&#xff0c;日常中经常会安装或者卸载一些应用&#xff0c;久而久之很多的命令已经让我的记忆能力不容乐观了&#xff0c;所以今天在这里写一点管理程序包管理的博客。一方面&#xff0c;之后可以帮助我…

我在阿里做测试,入职5个月的回顾与总结

初来阿里实习的时候&#xff0c;我对测试人员的职责知之甚少&#xff0c;在校时更是从未接触过测试工作。一头雾水之际&#xff0c;主管说&#xff1a;“做项目吧&#xff0c;在实战中快速成长”。从学生到校招生&#xff0c;我在思维和心态完成了一次真正意义上的转变&#xf…

众享比特董事长严挺出席2022中国计算机大会“元宇宙、Web3.0、NFT:机遇还是泡沫?”技术论坛

12月10日晚&#xff0c;为期三天的2022中国计算机大会&#xff08;2022CNCC&#xff09;成功落下帷幕。众享比特董事长严挺出席“元宇宙、Web3.0、NFT&#xff1a;机遇还是泡沫&#xff1f;”技术论坛并参与专题研讨。 第三行左一为众享比特董事长严挺 中国计算机大会&#xf…

一文教你集成通知系统的多种HMS Core服务,实现数据安全和真实用户验证

1、介绍 Overview 云数据库是AppGallery Connect提供的服务之一&#xff0c;实现云端数据的同步&#xff0c;提供统一的数据模型和丰富的数据管理接口。在保证数据的可用性、可靠性、一致性&#xff0c;以及安全等特性基础上&#xff0c;能够实现数据在客户端和云端之间的无缝…

SpringBoot扩展SpringMVC配置

SpringBoot扩展SpringMVC配置1.继承WebMvcConfigurer接口2.实现一个自己的视图解析器3.其他自定义配置视图跳转Spring Boot通过WebMvcAutoConfiguration来提供一些默认配置&#xff1b;大多数时候使用默认的配置即可满足要求。但有时可能需要做一些个性化定制&#xff0c;此时就…

Nginx 可视化!配置监控一条龙!

nginx-gui这个东西真的要吹一波&#xff0c;太好用了&#xff0c;而且源码公开。对于我这样一个作为Linux菜鸟的Java开发来说&#xff0c;这个可视化配置工具简直是福音&#xff01; 需求 nginx 可视化管理&#xff0c;例如 配置管理 性能监控 日志监控 其他配置 目前已实现…

CIDR格式网络策略值设置方式

CIDR的格式是IP网段/网络ID&#xff0c;斜杠左面的是网络IP段&#xff0c;斜杠右面是网络ID。如果网络用的是IPV4&#xff0c;它最大有效值是32&#xff0c;它的作用本质上是用来表示网络策略所用的子网掩码二进制里的1有多少个&#xff0c;也就是网络ID的位数。 传统的IPV4-t…

策略模式

文章目录策略模板模式1.策略模式的本质2.何时选用策略模式3.优缺点4.策略模式的结构5.实现支付案例支付案例参数不一致问题策略模板模式 1.策略模式的本质 策略模式的本质:分离算法&#xff0c;选择实现。 纵观整个策略模式实现的功能和设计&#xff0c;它的本质还是“分离算法…

会议学习笔记

目录1.标注高效的核心思路&#xff1a;1.部分监督PSL2.自监督SSL魔方复原3.单一标注无标注2.深度通用学习DUL1.通用特征点检测2.通用MRI重建3.学习与知识融合如何把大数据小任务转换成小数据大任务 1.标注高效的核心思路&#xff1a; 以一变二&#xff1a;数据增广无中生有&am…

[附源码]Node.js计算机毕业设计电影院订票管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

腾讯云年终:云服务器CVM、轻量应用服务器、GPU服务器价格表出炉!

腾讯云年终&#xff1a;云服务器CVM、轻量应用服务器、GPU服务器价格表出炉&#xff01;小编来详细说下腾讯云年末限时回馈优惠活动云服务器配置及精准报价。 一、轻量应用服务器配置及优惠价格表 先说轻量应用服务器吧&#xff0c;因为轻量服务器太便宜了&#xff0c;轻量应用…

2022年山东最新交安安全员考试模拟题及答案

百分百题库提供交安安全员考试试题、交安安全员考试真题、交安安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 1.根据《建筑工程安全生产管理条例》&#xff0c;意外伤害保险费由施工单位支付。实行施工总承包的&…

C++四种强制类型转换

四种强制类型转换&#x1f3de;️1. C语言中的类型转换&#x1f341;2. 为什么C需要四种类型转换&#x1f320;3. C强制类型转换&#x1f4d6;3.1 static_cast&#x1f4d6;3.2 reinterpret_cast&#x1f4d6;3.3 const_cast&#x1f4d6;3.4 dynamic_cast&#x1f301;4. RTTI…

JAVA毕业设计——基于Springboot+vue的疫情物资管理系统(源代码+数据库)

github代码地址 https://github.com/ynwynw/yiqingMaterial-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于Springbootvue的疫情物资管理系统(源代码数据库)047 一、系统介绍 本项目分为管理员与普通用户两种角色 管理员角色包含以下功能&#xf…

安全智能分析 技术背景

安全数据资产 统一管理DataOps&#xff0c;即 Data 和 Operations 的集成&#xff0c;于 2014 年首次提出。Gartner 将 DataOps 定义为“一种协作性的数据管理 实践&#xff0c;专注于改进组织内数据管道的通信、集成和自动化”[7]。DataOps 是一种面向流程的自动化方法&#x…

Linux安装多版本jdk(jdk8和jdk11)并可随意选择版本

一、官网下载不同版本的压缩包 官网下载地址 我这里下载的是jdk8和jdk11 二、将压缩包上传至服务器自定义的文件夹中 三、安装jdk8 1、解压压缩包 tar zxvf /install/java/jdk-8u202-linux-x64.tar.gz2、修改配置 vi /etc/profile在配置文件中添加以下配置(需修改成自己的…

购物车系统设计

1 主要功能 在用户选购商品时&#xff0c;下单前&#xff0c;暂存用户想购买的商品。 购物车对数据可靠性要求不高&#xff0c;性能也无特别要求&#xff0c;在整个电商系统是相对容易设计和实现的一个子系统。 购物车系统的主要功能&#xff1a; 把商品加入购物车&#xf…

3个月前被裁员了,心情跌落谷底,直到学姐给了我这份面试文档…

3个月前的某一天&#xff0c;正在愉快的打工&#xff0c;突然被喊去谈话&#xff0c;然后就被辞退了。。 加入了找工作的大军 然而&#xff0c;因为疫情&#xff0c;因为大专学历的我&#xff0c;找工作比以往都艰难了许多 很多&#xff0c;纯粹就是因为学历&#xff0c;都不…

如何在SpringBoot中异步请求和异步调用

一、SpringBoot中异步请求的使用 1、异步请求与同步请求 特点&#xff1a; 可以先释放容器分配给请求的线程与相关资源&#xff0c;减轻系统负担&#xff0c;释放了容器所分配线程的请求&#xff0c;其响应将被延后&#xff0c;可以在耗时处理完成&#xff08;例如长时间的运…

Python运维之远程登录paramiko(VsCode)

Python运维之远程登录----paramiko paramiko是一个用于做远程控制的模块&#xff0c;使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块&#xff0c;遵循SSH2协议&#xff0c;支持以加密和认证的方式&#xff0c;进行远程服务器的连接。 par…