Swagger

简介

Swagger的描述就不多说了,用简单一句话概括:Swagger是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。

Swagger 的优势

支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对我们来说非常方便,可以节约写文档的时间。
提供 Web 页面在线测试 API:除了生成相关接口文档外,Swagger 生成的文档还支持在线测试。参数和格式都定好了,直接在界面上输入参数对应的值即可在线测试接口。

使用场景

使用背景是一个旧项目,这个项目缺少接口文档,BS端尚可使用浏览器获取请求接口,如果CS端需要接口文档时还得手动去抓包,这时就体现出项目文档的重要性。Swagger就是一个很好的选择,给定一个统一管理平台去管理整个项目的接口文档,规范之后,方便整个项目组使用。
框架为SSM,所以下面样例为springMvc集成Swagger

使用步骤

导入maven依赖

<!-- swagger -->
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger2</artifactId>
	<version>2.6.1</version>
</dependency>
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger-ui</artifactId>
	<version>2.6.1</version>
</dependency>

配置spring-mvc.xml

在配置文件当中添加
<!--配置swagger-->
<bean class="com.tf.SwaggerConfig" id="swaggerConfig"></bean>

SwaggerConfig配置类

@EnableWebMvc
@EnableSwagger2
@Configuration
public class SwaggerConfig {

    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.tf"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("接口列表 v1.0.0")
                .description("swagger接口列表")
                .termsOfServiceUrl("http://loacalhost:8080/")
                .version("1.0.0")
                .build();
    }

}

配置类和springboot大致一样,只是需要多一个@EnableWebMvc注解。
配置内容包括ui界面的信息、包扫描路径的信息。


编写controller类
@Api(value = "设备管理")
@RestController
@RequestMapping("/testApi")
public class TestSwaggerController {

    @ApiOperation(value = "查询设备", notes = "查询设备列表")
    @GetMapping("/getList")
    public Object getList(@ApiParam(value = "设备id 这个是参数描述", required = false) Integer objId) {
        List<?> all = CommonDBInstance.getInstance().getAll(ObjMonitored.class);
        return CtrlBase.responseObject(all,"");
    }

    @ApiOperation("保存设备")
    @ApiImplicitParam(name = "obj", value = "单个设备信息", dataType = "User")
    @PostMapping("/save")
    public Object save(ObjMonitored obj) {
        return CtrlBase.responseSucc("");
    }

    @ApiOperation("更新设备")
    @ApiImplicitParam(name = "obj", value = "单个设备信息", dataType = "User")
    @PutMapping("/update")
    public Object update(ObjMonitored obj) {
        return CtrlBase.responseSucc("");
    }

    @ApiOperation("删除设备")
    @DeleteMapping("/delete")
    public Object delete(@ApiParam(value = "设备id 这个是参数描述", required = false) Integer objId) {
        return CtrlBase.responseSucc("");
    }
}

启动服务

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

UI主页面
在这里插入图片描述
接口详情

在这里插入图片描述


注解说明

@Api:用在请求的controller类上,表示对类的说明,也代表了这个类是swagger2的资源
参数:
        tags:说明该类的作用,参数是个数组,可以填多个
        value:忽略
        description :请求类的描述

@ApiOperation:用于方法,表示访问该方法的操作
参数:
        value:方法的用途和作用
        notes:方法的备注
        tags:说明该方法的作用,参数是个数组,可以填多个

@ApiModel:用于实体bean上,用于说明实体作用
参数:
        description:实体bean的描述

@ApiModelProperty:用在实体bean的字段,描述实体类字段的属性
参数:
        value:参数描述
        name:参数的变量名
        required:参数是否必填

@ApiImplicitParam:用于方法,表示单独的请求参数
参数:
        value:参数描述
        name:参数的变量名
        dataType:数据类型
        defaultValue:参数的默认值
        required:参数是否必填
        paramType:表示参数放在哪里,可选值有:header,query,path 还有 body 和 form
还有一个@ApiImplicitParams,见名知意,@ApiImplicitParam的复数形式

@ApiParam():用于方法,参数,字段说明 表示对参数的要求和说明
参数:
        value:参数描述
        name:参数的变量名
        required:参数是否必填
        defaultValue:参数的默认值

@ApiIgnore():用于类或者方法上,表示不被显示在页面上

上面就是swagger的用法了,demo中只使用了部分注解,可自行根据业务选择对应的注解使用。

swagger也有缺点
        其一就是代码侵入性太强,但是为了满足我们的需求,一些缺点也可以接受。
        其二就是swagger属于裸奔型文档,开发环境还好,如果是生产环境呢?

解决方案
        推荐一个插件,knife4j 官方网址 ,主要功能对swagger进行了封装增强,美化了UI界面、优化了swagger测试流程等优点,最主要的是增加了权限控制,在生产环境下屏蔽所有文档接口,测试环境下也可以增加登录校验和分组权限管理,完全可以满足我们的需求。

使用步骤

添加maven依赖

<dependency>
	<groupId>com.github.xiaoymin</groupId>
	<artifactId>swagger-bootstrap-ui</artifactId>
	<version>1.9.6</version>
</dependency>

springboot直接在yml里面配置即可。
因为这里是springMVC集成swagger,springMvc需要配置在web.xml页面

<!--生产环境Filter-->
<filter>
	<filter-name>swaggerProductionFilter</filter-name>
	<filter-class>com.github.xiaoymin.swaggerbootstrapui.filter.ProductionSecurityFilter</filter-class>
	<init-param>
		<param-name>production</param-name>
		<!--生产环境时开启,屏蔽所有接口文档-->
		<param-value>false</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>swaggerProductionFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
<!--测试环境Filter-->
<filter>
	<filter-name>swaggerSecurityBasic</filter-name>
	<filter-class>com.github.xiaoymin.swaggerbootstrapui.filter.SecurityBasicAuthFilter</filter-class>
	<init-param>
		<param-name>enableBasicAuth</param-name>
		<param-value>true</param-value>
	</init-param>
	<!--用户名和密码配置-->
	<init-param>
		<param-name>userName</param-name>
		<param-value>admin</param-value>
	</init-param>
	<init-param>
		<param-name>password</param-name>
		<param-value>123456</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>swaggerSecurityBasic</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

配置web.xml即可完成knife4j的配置。如果是springboot,将上面的配置在yml里面即可

启动之后访问knife4j提供的:http://localhost:8080/doc.html,此时无需再访问/swagger-ui.html页面了

但是生产环境时需要将enableBasicAuth设置为true,即屏蔽所有文档接口

输入网址后,即可看到久违的登录页面

在这里插入图片描述

登录之后的界面

在这里插入图片描述
接口详情页面

在这里插入图片描述
接口里面优化了在线调试


上面就是swagger的基本用法了,总体来说对于中小型项目来讲,swagger还是一个不错的工具,最起码能保证基本的文档,至于代码侵入性和使用灵活性等缺点,可衡权利弊自行选择使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值