Swagger UI简介-程序员宅基地

技术标签: SwaggerAPI  

Swagger UI 简介


Swagger UI允许任何人(无论您是开发团队还是最终用户)都可以可视化API资源并与之交互,而无需任何实现逻辑。它是根据您的OpenAPI(以前称为Swagger)规范自动生成的,具有可视化文档,可简化后端实现和客户端使用。

在这里插入图片描述

SwaggerUI 特点


  • 无依赖 UI可以在任何开发环境中使用,无论是本地还是在Web端中。
  • 人性化 允许最终开发人员轻松地进行交互,并尝试API公开的每个操作,以方便使用。
  • 易于浏览 归类整齐的文档可快速查找并使用资源和端点。
  • 所有浏览器支持 Swagger UI 在所有主要浏览器中均可使用,以适应各种可能的情况。
  • 完全可定制 通过完整的源代码访问方式以所需方式设置和调整Swagger UI。
  • 完整的OAS支持 可视化Swagger 2.0或OAS 3.0中定义的API。

前后端分离

Vue + SpringBoot
后端时代:前端只用管理静态页面; html==》后端。 模版引擎 JSP=>后端是主力

前后端分离时代:

  • 后端:后端控制层、服务层、数据访问层 【后端团队】
  • 前端:前端控制层、视图层 【前端团队】
    • 伪造后端数据,json。在后端开发前数据以及存在,不需要后端,前端工程师依旧能将项目跑起来。
  • 前后端如何交互? ==>API
  • 前后端相对独立,松耦合;
  • 前后端甚至可以部署在不同的服务器上。

产生一个问题

  • 前后端集成联调,前端人员和后端人员无法做到 “及时协商,尽早解决”,最终导致问题集中爆发;

解决方案:

  • 首先指定schema[计划的提纲],实时更新最新的API,降低集成的风险。
  • 早些年,制定Word计划文档
  • 前后端分离:
    • 前端测试后端接口使用:Postman工具。
    • 后端提供接口:需要实时更新最新改动和消息。

Swagger登场

  • 号称世界上最流行的API框架。
  • Restful API文档在线自动生成工具 API文档与API定义同步更新
  • 直接运行,可以在线测试API接口。
  • 支持多种语言 如:Java 、PHP…

官网

https://swagger.io/

在项目只能使用SwaggerUI

需要使用Springfox,配置的组件有

  • Swagger 2
  • UI 显示页面

springboot集成Swagger

1.idea新建SpringBoot-Web工程
2.POM文件中导入springfox-swagger2和springfox-swagger-ui

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

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
在这里插入代码片

3.编写一个测试Controller 测试SpringBoot工程搭建是否成功。
4.配置Swagger 编写Config文件

  • 新建一个名为config的Package包
  • 创建SwaggerConfig配置类
  • @Configuration 表明这是一个配置类
  • @EnableSwagger2 开启Swagger2
 @Configuration 
@EnableSwagger2  //开启swagger2
public class SwaggerConfig {
    
 
}

5 、测试运行
浏览器打开 http://localhost:8080/swagger-ui.html
SwaggerUI 首页

Swagger配置扫描接口

  • 配置接口扫描与作者信息
    使用Dokcet对象中的 .select()方法
/**
     * 配置了Swagger 的Docket的bean实例,扫描接口的位置
     * .apis
     *   RequestHandlerSelectors 配置swagger扫描接口的方式
     *      basePackage() 指定要扫描哪些包
     *      any() 全部都扫描
     *      none() 全部不扫描
     *      withClassAnnotation() 扫描类上的注解 参数是一个注解的反射对象
     *      withMethodAnnotation() 扫描包上的注解
     * .paths
     *   PathSelectors 路径扫描接口
     *      ant 配置以xxx 开头的路径
     * @return
     */
    @Bean
    public Docket docket( ){
    
    
        return  new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("James")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.study.swagger.controller"))
                //.paths(PathSelectors.ant("/hello/**"))
                .build();//构建者模式
    }
    /**
     * 配置Swagger信息 apiinfo
     * @return
     */
    private ApiInfo apiInfo(){
    
        //配置作者信息
        Contact DEFAULT_CONTACT = new Contact("James", "https://blog.csdn.net/zhanshixiang/", "[email protected]");
        return  new ApiInfo(
                "James 的Swagger API文档",
                "码出高效",
                "v1.0",
                "https://blog.csdn.net/zhanshixiang/",
                DEFAULT_CONTACT,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList());
    }

配置是否自动启动Swagger

在开发环境开启SwaggerUI ,生产环境关闭SwaggerUI 是因为开发环境是内部人员,生产环境是客户。为了程序的安全性需要关闭SwagggerUI

/**
     * 配置了Swagger 的Docket的bean实例,扫描接口的位置
     * .apis
     *   RequestHandlerSelectors 配置swagger扫描接口的方式
     *      basePackage() 指定要扫描哪些包
     *      any() 全部都扫描
     *      none() 全部不扫描
     *      withClassAnnotation() 扫描类上的注解 参数是一个注解的反射对象
     *      withMethodAnnotation() 扫描包上的注解
     * .paths
     *   PathSelectors 路径扫描接口
     *      ant 配置以xxx 开头的路径
     * @return
     */
    @Bean
    public Docket docket(Environment environment){
    

        //设置要显示的Swagger 环境
        Profiles profiles =Profiles.of("dev","test");
        /**
         * 通过 environment.acceptsProfiles 返回的boolean值判断是否处在自己所设定的环境中
         */
        boolean flag = environment.acceptsProfiles(profiles);
        System.out.println(flag);
        return  new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("James")
                //.enable(flag) //enable配置是否自动启动swagger 如果为False则为不启动,浏览器中不能访问Swagger
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.study.swagger.controller"))
                //.paths(PathSelectors.ant("/hello/**"))
                .build();//构建者模式
    }

    /**
     * 配置Swagger信息 apiinfo
     * @return
     */
    private ApiInfo apiInfo(){
    

        //配置作者信息
        Contact DEFAULT_CONTACT = new Contact("James", "https://blog.csdn.net/zhanshixiang/", "[email protected]");
        return  new ApiInfo(
                "James 的Swagger API文档",
                "码出高效",
                "v1.0",
                "https://blog.csdn.net/zhanshixiang/",
                DEFAULT_CONTACT,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList());

    }
  • 创建三个properties文件
    application.properties
# 激活开发环境
spring.profiles.active=dev

application-dev.properties 开发环境

server.port=8082

application-properties 生产环境

server.port=8083

配置API分组

在协同开发时,每个开发人员都拥有一个属于自己的API组

.groupName("test")

问题:如何配置多个分组?

编写多个Docket 设置不同Docket方法名

/**
     * 开发A组的接口
     * @return
     */
    @Bean
    public Docket docketA(){
    
        return  new Docket(DocumentationType.SWAGGER_2)
                .groupName("A");
    }

    /**
     * 开发B组的接口
     * @return
     */
    @Bean
    public Docket docketB(){
    
        return  new Docket(DocumentationType.SWAGGER_2)
                .groupName("B");
    }

    /**
     * 开发C组的接口
     * @return
     */
    @Bean
    public Docket docketC(){
    
        return  new Docket(DocumentationType.SWAGGER_2)
                .groupName("C");
    }

访问http://localhost:8080/swagger-ui.html

可以看到分组上有新的组了
在这里插入图片描述

配置实体类信息

@ApiModel("用户实体类")
public class User implements Serializable {
    

    @ApiModelProperty("用户名")
    private String username;
    @ApiModelProperty("密码")
    private String password;

在这里插入图片描述

配置接口方法

@Api("Hello控制类")
@RestController
@RequestMapping("hello")
public class HelloController {
    


    @GetMapping(value = "say")
    public String hello() {
    
        return "hello ";
    }


    /**
     * 只要接口中,返回值中存在实体类,他就会被扫描到Swagger中
     * @return
     */
    @PostMapping(value = "/user")
    public User user(){
    
        return new User();
    }

    /**
     * ApiOperation接口,不是放在类上的,是方法
     * @return
     */
    @ApiOperation("hello控制类")
    @GetMapping(value = "/hello2")
    public String hello2(@ApiParam("用户名") String username){
    
        return "hello"+username;
    }

    @ApiOperation("Post测试类")
    @PostMapping(value = "/post")
    public User post(@ApiParam("用户") User user){
    
        return user;
    }
    
}

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhanshixiang/article/details/104605292

智能推荐

进制之间的相互转换(超详细)_进制转换-程序员宅基地

本篇文章介绍了十进制与其他进制之间的相互转换方法,包括十进制转换为二进制、八进制、十六进制,以及其他进制转换为十进制的方法。同时还提供了一些具体的转换示例。

课后习题1-数据结构_简述逻辑结构的四种基本关系并画出它们的关系图-程序员宅基地

文章浏览阅读4k次,点赞11次,收藏26次。1.概念:数据:Data,是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素:Data Element,是数据的基本单位,在计算机中常作为一个整体进行考虑和处理,用于完整的描述一个对象。数据项:Data Item,是组成数据元素的、有独立含义的、不可分割的最小单位。数据对象:Data Object,是性质相同的数据元素的集合,是数据的一个子集。数据结构:Data Structure,是相互之间存在一种或多种特定关系的数据元素的集合。逻辑结构:从具体问题抽象出来的_简述逻辑结构的四种基本关系并画出它们的关系图

Compute Shader 语法及函数 Reference for HLSL_hlsl compute shader-程序员宅基地

文章浏览阅读887次。///////////////////////////////////////变量语法使用以下语法规则声明 HLSL 变量。[Storage_Class] [Type_Modifier]Type Name[Index] [: Semantic] [: Packoffset] [: Register]; [Annotations] [= Initial_Value]参数存储 _班级可选的存储类修饰符,它们为编译器提示指定变量范围和生存期;可以按任意顺序指定修饰符。值 说明._hlsl compute shader

一文彻底搞懂 Alertmanager 的告警抑制与静默_alertmanager告警-程序员宅基地

文章浏览阅读4.3k次,点赞4次,收藏16次。一文彻底搞懂 Alertmanager 的告警抑制与静默。_alertmanager告警

如何进行性能优化?这篇360°全方面性能调优(含一线大厂Android端性能优化方案),帮您分分钟解决APP卡顿_论软件的性能优化设计-程序员宅基地

文章浏览阅读5.2k次,点赞8次,收藏8次。什么是性能调优?性能调优就是对计算机硬件、操作系统和应用有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用)的性能最大化,并能不断的满足现有的业务需求。性能优化的目的流畅(解决:卡顿)稳定(解决:内存溢出、崩溃)低耗损(解决:耗电快、流量大、网络慢)小安装包(解决:APK过大)性能优化原则:先优化瓶颈问题;方案简单,尽量不引入更多复杂性,尽量不降低业务体验;满足系统性能要求即可,不引入新的bug。为什么需要性能调优?为了获得更好的系统性能(就是你现_论软件的性能优化设计

实战BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer_bulk collect into 写表-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏26次。例1: 批量 查询部门号为 "10" 号的并把它们打印出来 . DECLARE TYPE emp_table_type IS TABLE OF my_emp%ROWTYPE INDEX BY BINARY_INTEGER; v_emp_table emp_table_type; BEGIN SELECT * BULK COLLECT INTO v_emp__bulk collect into 写表

随便推点

H5(html5)入门教程_html5教程-程序员宅基地

文章浏览阅读9.9k次,点赞14次,收藏94次。html零基础01_html5教程

layui--layer.open参数传递问题_layer.open data-程序员宅基地

文章浏览阅读2.1w次,点赞5次,收藏6次。1、第一种方式/**function layer_show(title,url,data,w,h){if (title == null || title == ‘’) {title=false;};if (url == null || url == ‘’) {url=“404.html”;};if (w == null || w == ‘’) {w=800;};if (h ..._layer.open data

华为实习面试(二)_华为实习业务主管面试-程序员宅基地

文章浏览阅读2.1w次,点赞9次,收藏7次。这是来自一位学长的 (业务主管综合面)4.29下午2:10分,全程20min学长的视角:主管也是真的很nice!我每次回答问题后都给我说谢谢,搞得我都不好意思了,整个过程非常随和,完全没有架子,很耐心的给我解释问题,最后退出还说非常感谢面试华为,体验超好,面完五分钟官网刷新通过,十分钟短信通过。总结一下吧,总的来说,我这次华子的面试准备了很多东西,但是基本没问…整个过程体验非常好,不会让你尴尬的,面试官都大赞!给大家分享面筋,希望对还没面试的小伙伴提供参考,不过目前进了池子,得等很久才能出结果,许愿offe_华为实习业务主管面试

word2vec & 相关系数_word2vec文本相关性-程序员宅基地

文章浏览阅读674次。对文本进行提取,利用结巴分词进行分词,然后进行word2vec训练(维度设置为100),得到每个词的词向量.对于每一个用户,通过其发表的内容,得到用户所使用的词汇,然后求得用户的平均词向量.(词向量和除以词的数量)通过训练集,分别对用户地区,年龄,性别进行建模2017CSDN用户画像竞赛用户内容主题词生成:给定若干用户文档(博客或帖子),为每一篇文档生成3个最合适的主题词。要求生成的主题..._word2vec文本相关性

ubuntu kylin优麒麟中开发c/c++程序-程序员宅基地

文章浏览阅读1.5k次。开发工具:visual studio code(vs code) 一、从官网下载app https://code.visualstudio.com/ 执行安装。 sudo dpkg -i code*.deb 从开始菜单启动程序。 二、设置界面为中文 同时按下ctrl ..._麒麟系统c++编辑器中文版

windows Elasticsearch启动报此处不应有Files\elascsearch-7.8.0\jdk解决办法一_启动elasticsearch报错usage 0f java_home-程序员宅基地

文章浏览阅读779次。这个问题是因为没有配置JAVA_HOME系统变量1、在环境变量里面新建系统变量一般最新的elk里面带有java在jdk或者也可以使用自己安装的,配置完成重启命令行就行了_启动elasticsearch报错usage 0f java_home

推荐文章

热门文章

相关标签