后端整合 Swagger + Knife4j 接口文档

news/2024/11/5 16:42:05/文章来源:https://www.cnblogs.com/qimoxuan/p/18528302

什么是接口文档?写接口信息的文档,每条接口包括:

  • 请求参数
  • 响应参数
    • 错误码
  • 接口地址
  • 接口名称
  • 请求类型
  • 请求格式
  • 备注

who 谁用?一般是后端或者负责人来提供,后端和前端都要使用

为什么需要接口文档?

  • 有个书面内容(背书或者归档),便于大家参考和查阅,便于 沉淀和维护 ,拒绝口口相传
  • 接口文档便于前端和后端开发对接,前后端联调的 介质 。后端 => 接口文档 <= 前端
  • 好的接口文档支持在线调试、在线测试,可以作为工具提高我们的开发测试效率

怎么做接口文档?

  • 手写(比如腾讯文档、Markdown 笔记)
  • 自动化接口文档生成:自动根据项目代码生成完整的文档或在线调试的网页。Swagger,Postman(侧重接口管理)(国外);apifox、apipost、eolink(国产)

接口文档有哪些技巧?

Swagger 原理:

  1. 引入依赖(Swagger 或 Knife4j:https://doc.xiaominfo.com/knife4j/documentation/get_start.html
  2. 自定义 Swagger 配置类
  3. 定义需要生成接口文档的代码位置(Controller)
  4. 千万注意:线上环境不要把接口暴露出去!!!可以通过在 SwaggerConfig 配置文件开头加上 @Profile({"dev", "test"}) 限定配置仅在部分环境开启
  5. 启动即可
  6. 可以通过在 controller 方法上添加 @Api、@ApiImplicitParam(name = "name",value = "姓名",required = true) @ApiOperation(value = "向客人问好") 等注解来自定义生成的接口描述信息

如果 springboot version >= 2.6,需要添加如下配置:

spring:mvc:pathmatch:matching-strategy: ant_path_matcher

swagger

1.导入依赖

      <!-- swagger 接口文档 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency>

2.新建config文件

package com.xiao.usercenter.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;/*** @author: lingqi* @date: 2024/11/05* @ClassName: yupao-backend01* @Description: 自定义 Swagger 接口文档的配置*/
@Configuration // 配置类
@EnableSwagger2 // 开启 swagger2 的自动配置
public class SwaggerConfig {@Beanpublic Docket docket() {// 创建一个 swagger 的 bean 实例return new Docket(DocumentationType.SWAGGER_2)// 配置接口信息.select() // 设置扫描接口// 配置如何扫描接口.apis(RequestHandlerSelectors//.any() // 扫描全部的接口,默认//.none() // 全部不扫描.basePackage("com.xiao.usercenter.controller") // 扫描指定包下的接口,最为常用//.withClassAnnotation(RestController.class) // 扫描带有指定注解的类下所有接口//.withMethodAnnotation(PostMapping.class) // 扫描带有只当注解的方法接口).paths(PathSelectors.any() // 满足条件的路径,该断言总为true//.none() // 不满足条件的路径,该断言总为false(可用于生成环境屏蔽 swagger)//.ant("/user/**") // 满足字符串表达式路径//.regex("") // 符合正则的路径).build();}// 基本信息设置private ApiInfo apiInfo() {Contact contact = new Contact("lingqi", // 作者姓名"https://www.cnblogs.com/qimoxuan", // 作者网址"2813930556@qq.com"); // 作者邮箱return new ApiInfoBuilder().title("鱼泡伙伴匹配系统-接口文档") // 标题.description("众里寻他千百度,慕然回首那人却在灯火阑珊处") // 描述.termsOfServiceUrl("https://www.cnblogs.com/qimoxuan") // 跳转连接.version("1.0") // 版本.license("Swagger-的使用(详细教程)").licenseUrl("https://www.cnblogs.com/qimoxuan").contact(contact).build();}}

注意,如果springboot 版本>= 2.6,需要添加yml配置即可

3.直接启动,访问http://localhost:8080/api/swagger-ui.html

Knife4j

1.导入依赖

        <!-- knife4j 接口文档 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.7</version></dependency>

2.新建 SwaggerConfig文件

package com.xiao.usercenter.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;/*** @author: lingqi* @date: 2024/11/05* @ClassName: yupao-backend01* @Description: 自定义 Swagger 接口文档的配置*/
@Configuration
@EnableSwagger2WebMvc
@Profile({"dev", "test"})   //版本控制访问
public class SwaggerConfig {@Bean(value = "defaultApi2")public Docket defaultApi2() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()// 这里一定要标注你控制器的位置.apis(RequestHandlerSelectors.basePackage("com.xiao.usercenter.controller")).paths(PathSelectors.any()).build();}/*** api 信息* @return*/private ApiInfo apiInfo() {return new ApiInfoBuilder().title("零柒用户中心").description("零柒用户中心接口文档").termsOfServiceUrl("https://www.cnblogs.com/qimoxuan").contact(new Contact("lingqi","https://www.cnblogs.com/qimoxuan","2813930556@qq.com")).version("1.0").build();}
}
依然是注意yml文件的配置。
3.直接启动,访问http://localhost:8080/api/doc.html

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

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

相关文章

start-all.sh脚本启动Hadoop的NameNode、DataNode、ResourceManager和NodeManager失败

今天在做大数据实验时,在终端,start-all.sh脚本启动Hadoop的NameNode、DataNode、ResourceManager和NodeManager失败,出现下面的错误信息: [root@node1 hadoop]# ./sbin/start-all.shStarting namenodes on [node1]ERROR: Attempting to operate on hdfs namenode as rootE…

Dash 2.18.2版本更新:模式匹配回调性能大提升

本文示例代码已上传至我的Github仓库:https://github.com/CNFeffery/dash-master Gitee同步仓库地址:https://gitee.com/cnfeffery/dash-master大家好我是费老师,今天Dash发布了2.18.2版本更新,虽然只是一次小版本更新,但其中涉及到的一些内容还是非常重要的,今天的文章中…

华为云:弹性负载均衡健康检查异常

动态负载均衡健康检查异常 健康检查基本配置如下: 其中内网IP和默认业务端口可以在负载均衡服务器→后端服务器组中查看即实际上的监听对象为192.168.0.170:8889。 健康检查异常说明健康检查curl这两个监听未返回200,去网络控制台→访问控制:安全组→default→入方向规则,查…

合规监管新趋势!智能合同审查免费体验,提升法律行业合同管理效率

思通数科 思通数据 思通数科推出的智能合同审查系统为这些痛点提供了解决方案。借助大模型、OCR和信息抽取等先进技术,系统具备高效要素抽取、自动分类、合同比对和合同审查等功能。以下是该系统的主要功能及用户体验案例,展示了在法律行业中的实际应用效果。应用案例:法律行…

UE Slate渲染流程

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、前言本文将深入探讨Slate的渲染流程及其相关细节。将详细讲解Slate如何将UI元素渲染到屏幕上,以及它是如何处理各种渲染细节以实现…

【HT-030-Div.1】核桃NOIP组周赛 赛后总结

总结T2爆零了,核桃oj不能缩放 别人题目(100%)我的题目(125%)

PCIe系列专题之二:2.5 Flow Control缓存架构及信用积分

一、故事前传 之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。较为详细解释请见之前的文章: 1. PCIe技…

PCIe系列专题之二:2.7 Flow Control的实现过程

一、故事前传 之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。较为详细解释请见之前的文章: 1. PCIe技…

cron定时任务报错PAM unable to dlopen(pam_tally2.so): /lib/security/pam_tally2.so

在Ubuntu 22.04中,pam_tally2模块可能已经不再被支持或包含在系统默认的PAM模块中。因此,当系统尝试加载该模块时,无法找到对应的.so文件,需要使用pam_faillock.so来代替 先查找下是否存在pam_faillock.so模块 find /usr -name "pam_*.so"没有 pam_tally2.so ,复…

vue3 如何使用router路由表 创建 Menu 导航菜单

vue3 如何使用router路由表 创建 Menu 导航菜单1. vue3 如何使用router路由表 创建 Menu 导航菜单1.1. 安装 Vue Router1.2. 设置路由1.3. 在主应用中使用路由1.4. 创建导航菜单组件1.5. 在布局中使用导航菜单 1. vue3 如何使用router路由表 创建 Menu 导航菜单 在 Vue 3 中集…

PCIe系列专题之二:2.0 Transaction layer事务层概述

一、故事前传 上回我们对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。较为详细解释请见之前的文章:PCIe技术概述;…

Linux 中sed命令删除文本中第一个指定符号及其之前的内容

001、[root@PC1 test1]# ls a.txt [root@PC1 test1]# cat a.txt ## 测试数据 fasp.sra.ebi.ac.uk:/vol1/fastq/SRR131/072/SRR13178372/SRR13178372.fastq.gz;fasp.sra.ebi.ac.uk:/vol1/fastq/SRR131/072/SRR13178372/SRR13178372_1.fastq.gz;fasp.sra.ebi.ac.uk:/vol1/fa…