swagger,Knife4j和Yapi

news2024/12/24 8:26:02

目录

swagger

swagger的作用

swagger的使用

一.导入依赖

二.创建swagger配置类,交给SpringIoC容器管理

三.使用swagger依赖的注解来给接口层(controller)的各种方法进行注释

@Api

@ApiOperation

@ ApiImplicitParam

 @ApiModel

@ApiModelProperty

四:访问ui页面

Knife4j

 Knife4j的作用

knife4j的使用

一:导入依赖

 二:在swagger配置类中开启knife4j

三:访问knife4j

Yapi

Yapi的下载

一:在虚拟机中docker拉取mongoDB并启动

二:拉取yapi镜像包

三:自定义config.json

四:启动yapi

五:访问yapi

使用yapi同步本地主机的swagger

总结 


swagger

swagger的作用

  •  使得前后端分离开发更加方便,有利于团队协作;
  •  接口文档在线自动生成,降低后端开发人员编写接口文档的负担;
  • 接口功能测试;
  • 使用Swagger只需要按照它的规范去定义接口及接口相关的信息,再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,以及在线接口调试页面等等;

swagger的使用

一.导入依赖

<!--        swagger依赖-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
<!--        swagger ui支持包-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>

二.创建swagger配置类,交给SpringIoC容器管理

package com.hhh.stock.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;


@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    @Bean
    public Docket buildDocket() {
        //构建在线API概要对象
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(buildApiInfo())
                .select()
                // 要扫描的API(Controller)基础包
                .apis(RequestHandlerSelectors.basePackage("com.hhh.stock.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo buildApiInfo() {
        //网站联系方式
        Contact contact = new Contact("hhh程序员","https://www.hhh.com/","153@qq.com");
        return new ApiInfoBuilder()
                .title("这是一个项目接口API文档")//文档标题
                .description("这是一个方便前后端开发人员快速了解开发接口需求的在线接口API文档")//文档描述信息
                .contact(contact)//站点联系人相关信息
                .version("1.0.0")//文档版本
                .build();
    }
}

三.使用swagger依赖的注解来给接口层(controller)的各种方法进行注释

@Api

使用@Api接口的tags属性对该接口进行描述

@RestController
@RequestMapping("/api")
@Api(tags = "用户操作接口")
public class UserController {
}

@ApiOperation

 使用@ApiOPeration注解的value属性对方法进行描述

@ ApiImplicitParam
paramType查询参数类型
path以地址的形式(rest风格)提交数据
query直接跟参数完成自动映射赋值(/add/user?name=zhangsan)
body以流的形式提交 仅支持POST
header参数在request headers 里边提交
form以form表单的形式提交 仅支持POST
 
dataType:方法属性的类型
name:参数名字
value:对该参数的描述
required:true指该参数必须填写 
 @GetMapping("/user/{userName}")
    @ApiOperation(value = "根据用户名来查询用户的基本信息")
    @ApiImplicitParams(
            @ApiImplicitParam(paramType = "path",dataType = "string",name="userName",value = "用户名",required=true)
    )
    public SysUser getUserByUserName(@PathVariable("userName")String username){
        return userService.findByUserName(username);
    }

 @PostMapping("/login")
    @ApiOperation(value = "登录功能")
    public R<LoginRespVo> login(@RequestBody LoginReqVo loginReqVo){//接收前端发送的json数据并封装到LoginReqVo类对象
        return userService.login(loginReqVo);
    }

 @ApiModel

使用description对该类进行描述

@ApiModelProperty

使用value属性对类的成员变量属性进行描述 

@Data
@ApiModel(description = "返回用户的信息")
public class SysUser implements Serializable {
    /**
     * 用户id
     */
    @ApiModelProperty(value = "用户主键id")
    private Long id;

    /**
     * 账户
     */
    @ApiModelProperty(value = "用户名")
    private String username;

    /**
     * 用户密码密文
     */
    @ApiModelProperty(value = "用户的密文密码")
    private String password;
}

四:访问ui页面

http://localhost:8091/swagger-ui.html 

Knife4j

 Knife4j的作用

该UI增强包主要包括两大核心功能:文档说明 和 在线调试

  • 文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。
  • 在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。
  • 个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息
  • 离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件
  • 接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进行接口对接

knife4j的使用

一:导入依赖

 <!--knife4j的依赖-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
        </dependency>
        <!--支持接口参数校验处理-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

 二:在swagger配置类中开启knife4j

@Configuration
@EnableSwagger2
@EnableKnife4j//knife4j对swagger进行增强
@Import(BeanValidatorPluginsConfiguration.class)//导入接口参数校验处理的配置类
public class SwaggerConfiguration {
    @Bean
    public Docket buildDocket() {
        //构建在线API概要对象
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(buildApiInfo())
                .select()
                // 要扫描的API(Controller)基础包
                .apis(RequestHandlerSelectors.basePackage("com.hhh.stock.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo buildApiInfo() {
        //网站联系方式
        Contact contact = new Contact("hhh程序员","https://www.hhh.com/","153@qq.com");
        return new ApiInfoBuilder()
                .title("这是一个项目接口API文档")//文档标题
                .description("这是一个方便前后端开发人员快速了解开发接口需求的在线接口API文档")//文档描述信息
                .contact(contact)//站点联系人相关信息
                .version("1.0.0")//文档版本
                .build();
    }
}

三:访问knife4j

http://lcoalhost:8091/doc.html

Yapi

Yapi的下载

一:在虚拟机中docker拉取mongoDB并启动

# 拉取mongo镜像
docker pull mongo
# 安装mongo数据库服务
# 创建存储卷
docker volume create mongo-data
# 启动 MongoDB
docker run -d \
  --name mongo-yapi \
  -v mongo-data:/data/db \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=anoyi \
  -e MONGO_INITDB_ROOT_PASSWORD=anoyi.com \
  mongo

二:拉取yapi镜像包

docker pull registry.cn-hangzhou.aliyuncs.com/anoyi/yapi

三:自定义config.json

mkdir /usr/local/yapi

touch config.json

config.json内容

{
  "port": "3000",
  "adminAccount": "admin@anoyi.com",
  "timeout":120000,
  "db": {
    "servername": "mongo",
    "DATABASE": "yapi",
    "port": 27017,
    "user": "anoyi",
    "pass": "anoyi.com",
    "authSource": "admin"
  }
}

四:启动yapi

# 初始化管理员账户和密码
docker run -it --rm \
  --link mongo-yapi:mongo \
  --entrypoint npm \
  --workdir /yapi/vendors \
  -v $PWD/config.json:/yapi/config.json \
  registry.cn-hangzhou.aliyuncs.com/anoyi/yapi \
  run install-server

 

docker run -d \
  --name yapi \
  --link mongo-yapi:mongo \
  --workdir /yapi/vendors \
  -p 3000:3000 \
  -v $PWD/config.json:/yapi/config.json \
  registry.cn-hangzhou.aliyuncs.com/anoyi/yapi \
  server/app.js

五:访问yapi

访问: http://192.168.230.100:3000
登录账号:admin@anoyi.com
密码:ymfe.org

 

注意:访问Yapi时必须启动mongoDB

使用yapi同步本地主机的swagger

 

 注意项目swagger.json地址不能写localhost,因为yapi是安装在虚拟机上的,所以要写本地主机的ip地址,使用ipconfig查看,要注意这个地址要让虚拟机可以ping通

总结 

 swagger

特点:生成api文档

缺点:适用于个人,ui界面不好看

knife4j是swagger的增强版(ui好看)

Yapi是公共的接口文档,web个人

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

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

相关文章

【layUI】点击导出按钮,导出excel文件

要实现的功能如下&#xff1a;根据执行状态判断是否可以导出。如果可以导出&#xff0c;点击导出&#xff0c;在浏览器里下载对应的文件。 代码实现 html里&#xff1a; <table class"layui-hide" id"studentTable" lay-filter"studentTable&…

vue2表单校验:添加自定义el-form表单校验规则

前言 在vue2表单校验&#xff1a;el-form表单绑定数组并使用rules进行校验_vue2 rules校验-CSDN博客中&#xff0c;使用form原生的rules对表单中每个控件的必填、格式等做了校验。但是保存时&#xff0c;除了验证每一个控件的输入合乎要求外&#xff0c;还需要验证控件之间的数…

八、DMA直接存储器存取

1、DMA简介 DMA是一个数据转运小助手&#xff0c;用来协助CPU完成转运的工作 2、存储器映像 计算机系统的5大组成部分&#xff1a;运算器、控制器、存储器、输入设备、输出设备 运算器和控制器&#xff0c;合称CPU 计算机的核心关键部分是CPU和存储器 存储器涉及&#xff…

带你深入浅出新面经:十五、十大排序之堆排序

此为面经第十五谈&#xff01;关注我&#xff0c;每日带你深入浅出一个新面经。 我们要了解面经要如何“说”&#xff01; 很重要&#xff01;很重要&#xff01;很重要&#xff01; 我们通常采取总-分-总方式来阐述&#xff01;&#xff08;有些知识点&#xff0c;你可以去…

Linux--find命令-搜索

find 命令 用来在指定目录下查找文件 如果使用该命令时&#xff0c;不设置任何参数&#xff0c;则find命令将在当前目录下查找子目录与文件&#xff0c;并且将查找到的子目录和文件全部进行显示 find <指定目录> <指定条件> <指定动作> 默认是搜索当前目录…

C语言:编程世界的基石

在计算机科学的世界里&#xff0c;C语言就像一座坚固的桥梁&#xff0c;连接着硬件和软件的两端。自从20世纪70年代诞生以来&#xff0c;C语言以其简洁、高效和强大的特性&#xff0c;成为了编程领域的经典之作。本文将探讨C语言在不同工作领域中的应用&#xff0c;以及它为何能…

opensatck上windows云主机上java服务的端口调用问题处理

文章目录 前言一、思路二、解决步骤1.将安全组规则全部放开2.云主机内部防火墙关闭3.尝试telnet4.查看代码&#xff0c;修改IP配置 总结 前言 opensatck上windows云主机上java服务的端口调用问题处理。同事在window10的云主机中用idea起了调试中的服务&#xff0c;端口在8000&…

鸿蒙操作系统为前端开发者带来下一个风口

在科技飞速发展的当下&#xff0c;前端开发领域也在不断寻求新的突破和机遇。而鸿蒙操作系统的崛起&#xff0c;无疑为前端开发者带来了下一个令人瞩目的风口。 一、鸿蒙系统的独特优势 1. 分布式架构 鸿蒙系统的分布式架构打破了传统设备之间的界限&#xff0c;使得不同设备可…

了解如何使用 Google 的 Gemini-1.5-pro 最新模型开发用于卡路里计算的生成式 AI 应用

欢迎来到雲闪世界。 例如&#xff0c;你有没有想过&#xff0c;当你吃晚餐时&#xff0c;你摄入了多少卡路里&#xff1f;我经常这样做。如果你能简单地通过应用程序发送一张你的盘子照片&#xff0c;并在你决定要吃多少之前得到卡路里总量的估计值&#xff0c;那不是很棒吗&am…

springboot依赖之JDBC(二)

要在 IntelliJ IDEA 中创建一个 Spring Boot 项目并实现基于 JdbcTemplate 的增删改查功能&#xff0c;以下是一个详细的步骤和代码示例。这个例子使用一个简单的用户信息表&#xff08;users&#xff09;&#xff0c;并展示如何使用 JdbcTemplate 的各种方法进行操作。 前文有…

【Linux —— 生产者消费者模型】

Linux —— 生产者消费者模型 生产者消费者模型概述生产者消费者模型特点生产者消费者模型优点基于BlockingQueue的生产者消费者模型 生产者消费者模型概述 生产者消费者模型是一种并发编程模型,用于解决多线程或多进程间的数据共享和同步问题。在这个模型中,有两种角色:生产者…

Python 3.11 从入门到实战1(环境准备)

本篇文章是python3.11的学习开篇&#xff0c;我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;获得python基础学习与实例、实践相结合&#xff0c;使我们完全掌握python。并做到独立完成项目开发的能力。 今天的谈论的比较简单&#xff0c;也是后续学习的基础。pyt…

深入MySQL

MySQL逻辑架构 MySQL逻辑架构整体分为三层&#xff0c;顶层客户端并非MySQL独有&#xff0c;如&#xff1a;连接处理、授权认证、安全等功能都在客户端层。 核心服务层&#xff0c;MySQL大多数核心服务都在这一层&#xff0c;包括查询解析、分析、优化、缓存、内置函数等。所有…

Python中csv文件的操作5

在《Python中csv文件的操作1》中提到&#xff0c;可以通过read()和write()方法读取和写入csv文件中的所有内容。除了上述的两个方法外&#xff0c;还可以通过readline()、readlines()、writelines()实现csv文件的读写操作。 1 readline()方法 readline()方法每次只读取文件的…

入行「游戏策划」,该从何处下手?

想知道策划岗位该怎么入行可点击蓝链 相比较起以技术为最重要评判标准的开发岗&#xff0c; 「游戏策划」这一岗位在非业界人士的眼中 一直都是一个风评方差很大的岗位。 有人说策划岗又轻松又威风&#xff0c; 只需要输出想法&#xff0c;落地都交给开发&#xff0c; 干…

xss-labs 11-15关通关攻略

第11关 一.进入11关 二.进行抓包 在抓到的数据包中加入Referer:"οnclick"alert(1)"type"text 第12关 进入第12关发现没有注入点&#xff0c;进入源代码看哪里可以注入发现 二.在ua头注入 Referer:"οnclick"alert(1)"type"text…

【鸿蒙样式初探】多个组件如何共用同一样式

最近开发鸿蒙&#xff0c;刚接触难免二和尚摸不着头脑&#xff0c;尤其是样式...... 背景 在做银行卡显示的一个小需求时&#xff1a; 每个Text都需要设置fontColor:#FFFFFF" 想着是否可以简单点 解决历程 思路一&#xff1a;&#xff08;拒绝) 使用Styles 提取封装公…

matlab仿真 信道编码和交织(下)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第八章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; ​ ​ ​ clear alln3;k2;%A(3,2)循环码N10000;%消息比特的行数msgrandi([0 1],N,k);%消息比特一共N*k行polcyclpoly(n,k);…

C++ TinyWebServer项目总结(12. 高性能I/O框架库Libevent)

Linux服务器程序必须处理三类事件&#xff08;I/O、信号和定时事件&#xff09;&#xff0c;在处理这三类事件时需要考虑以下问题&#xff1a; 统一事件源。统一处理这三类事件既能使代码简单易懂&#xff0c;又能避免一些潜在的逻辑错误。实现统一事件源的一般方法&#xff1…

如何用Java SpringBoot+Vue搭建花开富贵花园管理系统

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…