前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swagger Api工具

Swagger Api工具

作者头像
暴躁的程序猿
发布2022-03-24 15:38:52
5250
发布2022-03-24 15:38:52
举报
文章被收录于专栏:阿飞的学习记录

Swagger简介

Simplify API development for users, teams, and enterprises with the Swagger open source and professional toolset. Find out how Swagger can help you design and document your APIs at scale.

前后端分离时代 后端:后端控制层,服务层 ,数据访问层[后端团队] 前端:前端控制层,视图层[前端团队] 伪造后端数据 ,json。已经存在了 不需要后端,前端工程依旧能跑起来了

前后端如何交互==>API接口 前后端相互独立,松耦合。 前后端甚至可以部署在不同的服务器上

产生一个问题: 前后端集成联调,前端人员和后端人员无法做到及时协商,尽早解决。 解决方案: 首先制定一个计划提纲,实时更新API,降低集成风险; 早些年:制定word文档 前后端分离: Swagger: 号称世界上最流行的API框架; RestFul Api 文档在线自动生成工具=>Api文档与Api定义同步更新 直接运行可以在线测试API接口 支持多种语言 :java PHP。。 官网: https://swagger.io/ 在项目中使用swagger 需要Springbox 两个jar包 1.swagger2 2.ui

在这里插入图片描述
在这里插入图片描述

Springboot集成swagger 1.新建一个springboot-web项目 2.导入相关依赖

代码语言:javascript
复制
  <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

3.编写一个hello工程

代码语言:javascript
复制
	@RestController
	public class HelloController {


 @RequestMapping(value = "/hello")
	    public String hello(){
	       return "hello";
	    }

}

4.配置swagger ==>配一个config

代码语言:javascript
复制
   @Configuration//写了之后会被扫描进去
@EnableSwagger2//  开启swagger2
public class SwaggerConfig {

}

重启测试可以使用了 最基础的使用 访问这个地址 就可以访问swagger的页面 http://localhost:8080/swagger-ui.html

在这里插入图片描述
在这里插入图片描述

配置Swagger

Swagger的bean实例Docket;

代码语言:javascript
复制
@Configuration//写了之后会被扫描进去
@EnableSwagger2//  开启swagger2
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }
    //配置Swagger文档的信息apiInfo
    private ApiInfo  apiInfo(){
        //作者信息
        Contact contact = new Contact("程序猿","https://www.baidu.com","12352352@qq.com");
        return  new ApiInfo(
              "程序猿的第一个Swagger API文档",
              "学无止境!!!",
              "1.0",
              "https://www.baidu.com", contact,
              "Apache 2.0",
              "http://www.apache.org/licenses/LICENSE-2.0",
              new ArrayList());

    }

}

Swagger配置扫描接口 Docket.select()

代码语言:javascript
复制
//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            //RequestHandlerSelectors配置要扫描接口的方式
            //.basePackage()基于哪个包去扫描
            //any():扫描全部
            //none:不扫描
            //withClassAnnotation :扫描类上的注解,参数是一个注解的反射对象
            //withMethodAnnotation :扫描方法上的注解
            .apis(RequestHandlerSelectors.basePackage("com.rpf.swagger.controller"))
            //过滤path() 过滤什么路径
            //ant指定路径   只扫描rpf下的
            .paths(PathSelectors.ant("/rpf/**"))
            .build()  //工厂模式
     ;
}

配置是否启动Swagger

我只希望我的swagger在生产环境中使用,在发布的时候不使用 思路:判断是否是生产环境 flag = false 注入enable()

代码语言:javascript
复制
	 @Configuration//写了之后会被扫描进去
@EnableSwagger2//  开启swagger2
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment){

        //设置要显示的swagger环境   生产环境下使用swagger
        Profiles profiles= Profiles.of("dev","test");
        //获取项目的环境environment.acceptsProfiles判断是否处在自己设定的环境当中
        boolean b = environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(b)//是否启动swagger  如果为false则swagger不能在浏览器中访问
                .select()
                //RequestHandlerSelectors配置要扫描接口的方式
                //.basePackage()基于哪个包去扫描
                //any():扫描全部
                //none:不扫描
                //withClassAnnotation :扫描类上的注解,参数是一个注解的反射对象
                //withMethodAnnotation :扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.rpf.swagger.controller"))
                //过滤path() 过滤什么路径
                //ant指定路径   只扫描rpf下的
//                .paths(PathSelectors.ant("/rpf/**"))
                .build()  //工厂模式
         ;
    }

判断 如果当前不是生产环境无法访问页面 是生产环境时才能访问

porperties文件写法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布端口号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

现在指定了生产环境 只有访问8081端口才能进去

在这里插入图片描述
在这里插入图片描述

设置分组

.groupName(“程序猿”)//配置分组

代码语言:javascript
复制
//配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment){

        //设置要显示的swagger环境   生产环境下使用swagger
        Profiles profiles= Profiles.of("dev","test");
        //获取项目的环境environment.acceptsProfiles判断是否处在自己设定的环境当中
        boolean b = environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(b)//是否启动swagger  如果为false则swagger不能在浏览器中访问
                .groupName("程序猿")//配置分组
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.rpf.swagger.controller"))
//                .paths(PathSelectors.ant("/rpf/**"))
                .build()  //工厂模式
         ;
    }

如何设置多个分组 配置多个Docket

代码语言:javascript
复制
    @Bean
    public Docket dcoket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("A");
    }
  @Bean
    public Docket dcoket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("B");
    }
  @Bean
    public Docket dcoket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("C");
    }

当我们添加一个pojo类时怎么才能被扫描进去呢 pojo类

代码语言:javascript
复制
public class User {
    public String username;
    public String password;
}

我们需要新建一个controller接口 把这个类返回 就可以被自动扫描进去了

代码语言:javascript
复制
 //只要我们的接口中,返回值中存在实体类,他就会被扫描到swagger中
    @PostMapping(value = "/user")
    public User user(){
       return new User();
    }
在这里插入图片描述
在这里插入图片描述

那么怎么在字段等地方加上如上图的注释呢? 使用@Api…注解 写在pojo类上

代码语言:javascript
复制
//@Api(注释)
@ApiModel("用户实体类")//文档注释
public class User {
    @ApiModelProperty("用户名")//给字段加注释
    public String username;
    @ApiModelProperty("密码")//给字段加注释
    public String password;
}

效果

在这里插入图片描述
在这里插入图片描述

给方法@ApiOperation和参数@ApiParam写配置

代码语言:javascript
复制
 @ApiOperation("hello 控制类")//给方法加注释
    @GetMapping(value = "/user")//@ApiParam给方法参数加注释
    public String hello2(@ApiParam("用户名") String username){
        return username;
    }
在这里插入图片描述
在这里插入图片描述

重要的一个功能 在线测试接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完成之后响应的返回值

在这里插入图片描述
在这里插入图片描述

swagger的最终配置 swaggerconfig

代码语言:javascript
复制
@Configuration//写了之后会被扫描进去
@EnableSwagger2//  开启swagger2
public class SwaggerConfig {

    @Bean
    public Docket dcoket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("A");
    }
  @Bean
    public Docket dcoket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("B");
    }
  @Bean
    public Docket dcoket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("C");
    }

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment){

        //设置要显示的swagger环境   生产环境下使用swagger
        Profiles profiles= Profiles.of("dev","test");
        //获取项目的环境environment.acceptsProfiles判断是否处在自己设定的环境当中
        boolean b = environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(b)//是否启动swagger  如果为false则swagger不能在浏览器中访问
                .groupName("程序猿")//配置分组
                .select()
                //RequestHandlerSelectors配置要扫描接口的方式
                //.basePackage()基于哪个包去扫描
                //any():扫描全部
                //none:不扫描
                //withClassAnnotation :扫描类上的注解,参数是一个注解的反射对象
                //withMethodAnnotation :扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.rpf.swagger.controller"))
                //过滤path() 过滤什么路径
                //ant指定路径   只扫描rpf下的
//                .paths(PathSelectors.ant("/rpf/**"))
                .build()  //工厂模式
         ;
    }
    //配置Swagger文档的信息apiInfo
    private ApiInfo  apiInfo(){
        //作者信息
        Contact contact = new Contact("程序猿","https://www.baiduuu.com","12352352@qq.com");
        return  new ApiInfo(
              "程序猿的第一个Swagger API文档",
              "学无止境!!!",
              "1.0",
              "https://www.baiduuu.com", contact,
              "Apache 2.0",
              "http://www.apache.org/licenses/LICENSE-2.0",
              new ArrayList());

    }

}

controller

代码语言:javascript
复制
@RestController
public class HelloController {


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

    @ApiOperation("hello 控制类")//给方法加注释
    @GetMapping(value = "/user")//@ApiParam给方法参数加注释
    public String hello2(@ApiParam("用户名") String username){
        return username;
    }

}

总结: 优点: 我们可以通过swagger给一写比较难理解的属性或接口增加注释信息 可以在线测试 接口文档实时更新 注:正式上线的版本关闭swagger

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档