首页 > 其他分享 >Swagger-学习

Swagger-学习

时间:2022-11-14 18:33:44浏览次数:63  
标签:Swagger String 学习 Api new swagger public

Swagger

说明:学自狂神视频,只做学习记录之用。
目标:

  • 了解Swagger的作用和概念
  • SpringBoot集成Swagger

Swagger简介

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。

总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法、参数和模型紧密集成到服务器端的代码,允许 API 来始终保持同步。Swagger 让部

署管理和使用功能强大的 API 从未如此简单。

Swagger

  • 号称世界上最流行的Api框架
  • RestFul Api文档在线自动生成工具 => Api 文档玉 Api 定义同步更新
  • 直接运行,可以在线测试 Api 接口
  • 支持多种语言(Java、Php)

官网:https://swagger.io/

项目使用 Swagger 需要 SpringBox

  • Swagger2
  • UI

SpringBoot 集成 Swagger

1、新建 SpringBoot Web 项目,

2、导入相关依赖,Swagger 集成依赖的是 springfox 下面的依赖包

3、编写一个 Hello 工程

4、配置 Swagger -- config

Swagger2 和 Swagger3 区别

1、依赖不同

swagger2:
        <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>
            
swagger3:
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

2、开启方式不同

swagger2:
@EnableSwagger2 // 开启Swagger
@SpringBootApplication
public class SwaggerDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SwaggerDemoApplication.class, args);
    }
}

swagger3:
引入swagger3的依赖会自动开启,无需注解开启
@SpringBootApplication
public class SwaggerDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SwaggerDemoApplication.class, args);
    }
}

3、访问方式不同,界面不同

swagger2-ui:http://localhost:8082/swagger-ui.html

swagger3-ui:http://localhost:8082/swagger-ui/index.html

4、规范标准不同,配置不同

swagger2使用swagger2规范,swagger3使用的是opeanApi3规范。使用起来区别不大。

public static final DocumentationType SWAGGER_2 = new DocumentationType("swagger", "2.0");
public static final DocumentationType OAS_30 = new DocumentationType("openApi", "3.0");

swagger2:new Docket(DocumentationType.SWAGGER_2)
swagger3:new Docket(DocumentationType.OAS_30)

Swagger 配置说明

访问 swagger-ui 页面:

3部分组成--主要配置这三部分:

  • groupName:不同使用人配置的标识
  • apiInfo:包含使用人信息、项目信息和 swagger 文档生成接口
  • select:扫描的内容--方法、实体类

image

如果不配置 Docket 配置类,会使用默认的 Docket 配置类,默认的

public Docket(DocumentationType documentationType) {
        this.apiInfo = ApiInfo.DEFAULT;  // apiInfo:会使用默认的
        this.groupName = "default";		// groupName:配置标识
        this.enabled = true;	// enabled:是否开启swagger,默认开启,不过swagger2必须得先注解
        this.genericsNamingStrategy = new DefaultGenericTypeNamingStrategy();
        this.applyDefaultResponseMessages = true;
        this.host = "";
        this.pathMapping = Optional.empty();
        this.apiSelector = ApiSelector.DEFAULT;
        this.enableUrlTemplating = false;
        this.vendorExtensions = new ArrayList();
        this.globalRequestParameters = new ArrayList();
        this.documentationType = documentationType;
    }

public ApiInfo(String title, String description, String version, String termsOfServiceUrl, Contact contact, String license, String licenseUrl, Collection<VendorExtension> vendorExtensions) {
        this.title = title;		// 标题
        this.description = description;		// 描述
        this.version = version;		// 版本号
        this.termsOfServiceUrl = termsOfServiceUrl;	// 使用的网址url--使用项目的url
        this.contact = contact;	// 作者信息
        this.license = license;	// 许可证,使用默认的 apache 许可证
        this.licenseUrl = licenseUrl;	// 许可证网址,使用默认的 apache 网址
        this.vendorExtensions = new ArrayList(vendorExtensions);
    }
// 默认的apiInfo构造
static {
        DEFAULT = new ApiInfo("Api Documentation", "Api Documentation", "1.0", "urn:tos", DEFAULT_CONTACT, "Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList());
}

案例:

@Configuration
public class SwaggerConfig {
    //配置Swagger的Docker实例
    @Bean
    public Docket docket(Environment environment) {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //设置实例分组名,对象标识
                .groupName("zengzx")
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                //basepackage 指定扫描包
                //any 扫描全部
                //none 不扫描
                //withclassannotation 扫描类上注解
                //withMethodAnnotation 扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.example.swaggerdemo"))
                //paths() 过滤路径
                //.paths(PathSelectors.ant("/example/**"))
                .build();
    }
    //配置Swagger信息
    public ApiInfo apiInfo() {
        //作者信息
        Contact contact = new Contact("zengzx", "https://www.cnblogs.com/", "[email protected]");
        return new ApiInfo("Api Documentation-zengzx",
                "Api-信息",
                "v1.0",
                "https://www.cnblogs.com/",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>());
    }
}

问题:如何保证只在生产环境使用 swagger,在正式环境不启用。可以为正式环境减少不必要的资源浪费。

解决:springboot 可以设置多个环境,只要在 application.yaml 配置下说明使用的是 dev 还是 pro 即可,然后可以判断现在使用的环境配置文件时 dev 还是 pro,然后根据需要设置是否打开。

image

spring:
  profiles:
    active: dev

// 只要环境配置文件是以 application-dev 规则命名形式,会自动切换识别
@Bean
    public Docket docket(Environment environment) {
        //设置要显示的swagger环境
        Profiles profiles = Profiles.of("dev", "test");
        //获取项目的环境,判断是否是需要开启swagger的环境
        boolean enable = environment.acceptsProfiles(profiles);
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("zengzx")
                .enable(enable)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.swaggerdemo"))
                .build();
    }

Swagger实战

swagger 主要注解说明:

@Target(ElementType.TYPE) //可以看注解源码是使用在什么类上面的

Api:使用在类上面

ApiOperation:使用在方法上面

ApiModel:使用在实体类上面

ApiModelProperty:使用在实体类属性上面

注解里面属性可以看文档,一般只使用描述就行。

@Api(tags = {"swagger-tags","swagger-tags2"})
public class SwaggerController{
    //方法注释
    @ApiOperation(value = "user",notes = "swagger")
    @GetMapping("/user")
    public User user(){
        return new User();
    }
}

@ApiModel(description = "用户实体类" )
public class User {
    @ApiModelProperty(value = "用户名")
    public String username;
    @ApiModelProperty("实名")
    public String realName;
}

Swagger-ui

显示功能:

配置了扫描配置的会扫描出方法类,如果方法类中方法使用了实体类,那么也会将实体类扫描出来,而注解的作用不是说注解了就会扫描,注解只是信息的一个补充或说明,在需要扫描的时候将信息替换或者补充,所有主要是需要配置需要扫描控制类所在的包。

image

测试功能:

swagger-ui 可以在页面进行接口测试。打开方法点击try it out,按照页面操作即可。比较强大的是后端出错状态什么都能返回。自己去玩。

image

文档查看和导出功能:

此功能比较重要,可以使用文档查看和导出之外,可以和其他 api 协作管理软件进行协同合作。将扫描的接口和实体类信息导入支持 swagger 或 opeanapi 协议的软件里面。减少开发文档编写工作量。

此处使用--apifox:

image

image

标签:Swagger,String,学习,Api,new,swagger,public
From: https://www.cnblogs.com/zzxbkblog/p/16889935.html

相关文章

  • 强化学习代码实战-06 Dueling DQN 算法
    引入优势函数A,优势函数A=状态动作价值函数Q-状态价值函数V。在同一状态下,所有动作的优势值为零。因为,所有的动作的状态动作价值的期望就是状态价值。实现代码:impor......
  • Java:String、StringBuilder、StringJoiner学习笔记
    String创建的俩种方式1.直接赋值Stringstr="HelloWorld!";        当使用直接赋值的方式去创建字符串的时候,虚拟机会去串池里去检查字符串是否存在,如果......
  • Java学习——11.14
    将近4天没更新啊,为什么呢,主要是面向过程太难太抽象了,不过好在我用四天还是将他理解了。1.封装(关键字:private)保护私有的方法和属性。set直接修改private  ......
  • 密码学C/C++语言实现学习笔记——基本运算函数
    密码学C/C++语言实现学习笔记——基本运算函数基础数据结构:typedefunsignedshortclint;typedefunsignedlongclintd;书中所使用环境unsignedshort是16位(2......
  • AI基础:走进深度学习
    0.导语深度学习是机器学习的一个子集,自从AlexNet出现后,深度学习越来越热门。我最近在编写AI基础系列,第一部分已经完成并提供下载(​​下载说明​​)。现在开始更新深度学习部......
  • Android Service学习之AIDL, Parcelable和远程服务
    AIDL的作用由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另......
  • synchronized学习笔记
    Synchronized1.synchronized的作用能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。2.不使用并发会有什么后果?两个线程同时a++,最后结果......
  • 36、Pytorch之小土堆学习记录
    基本思想:花了两天时间把bilibil上小土堆的视频刷完了,简单记录一下,主要目的是想学习如何转模型,陆陆续续结合ncnn源码,如何实现onnx--->ncnn或者其它学习框架的模型转化,先来......
  • 10、 ARM 内联汇编学习笔记
    基本思想:随手记录一下ARM的内联汇编的基础语法,以便更深入的学习NCNN源码~​​ARMGCCInlineAssemblerCookbook​​ 参考官网(1)、基本的汇编语法结构为asmvolatile(co......
  • 如何提高孩子的学习兴趣?裸眼互动ar儿童沙盘,让孩子边玩边学!
    如何提高孩子的学习兴趣,是每个家长都关心的话题。裸眼互动ar儿童沙盘就是一种新型的儿童教学模式,利用ar虚拟现实技术,结合真实沙子,将各种大自然景象呈现出来为3D沙盘的形式,......