Java后台如何更好的提供暴露接口的信息?今天教大家一种借助Swagger文档进行调用代码生成的方法。
首先介绍一下Swagger是什么? 简单的说,Swagger可以为你的API自动生成文档,比如我们的工程打开之后就生成了下面的界面:
这个界面上可以查看所有的API路径和参数等信息,这个界面的所有数据可以用json导出,导出的文件就是OpenAPI标准。我们今天的代码生成就要基于OpenAPI文档来完成。
1)添加依赖
我们要为后台Java仓库增加Swagger功能,首先要添加对应的依赖,支持Swagger的方式有很多种,我们选用的是knife4j
Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍!
Knife4j的前身是swagger-bootstrap-ui,为了契合微服务的架构发展,由于原来swagger-bootstrap-ui采用的是后端Java代码+前端Ui混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为knife4j
在pom.xml添加依赖如下:
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
然后增加一个配置文件
package com.bajiafan.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
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
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2) // 选择swagger2版本
.apiInfo(apiInfo()) //定义api文档汇总信息
.select()
.apis(RequestHandlerSelectors
.basePackage("com.baijiafan.controller")) // 指定生成api文档的包
.paths(PathSelectors.any()) // 指定所有路径
.build()
;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("文档标题") // 文档标题
.contact(new Contact("name", "url", "mail")) //联系人信息
.description("描述") //描述
.version("0.1") //文档版本号
.termsOfServiceUrl("http://localhost:8080") //网站地址,仅在需要特别指定的时候才需要配置
.build();
}
}
详细信息可以自行修改。官方文档可见knife4j官方站点
完成后,我们就可以重启服务了,重启之后,就可以在htttp://localhost:8080/doc.html,注意这个端口不是上面的termsOfServiceUrl配置的端口,是你Java服务的端口。
2)生成前端代码
当我们可以正常的查看到doc.html之后,就可以进行手工的查阅,调用等操作了。如果要分享给前端和生成前端调用代码,我们需要用到下面的工具:百家饭OpenAPI工具
3) 分享API DOC
首先我们在百家饭OpenAPI工具注册一个免费账户,注册完成后,下载客户端并登录,然后我们就可以再开一个终端,运行下面的命令。
openapi.exe proxy localhost:8083
这个命令会给我们一个网址,比如我这边就是
PS D:\workspace\baijiafan\core\bin_> .\openapi.exe proxy localhost:8083
connect to rongapi.cn
[44:05][INFO] 连接Domain服务器 server=rongapi.cn
config is D:\workspace\baijiafan\core\bin_\certs\rongapi.cn\1_8_默认客户端证书
[44:05][INFO] 创建上传OpenAPI定义
[44:05][INFO] 开始接收请求
[44:05][INFO] 创建成功,点击可查看分享数据源 url=https://rongapi.cn/api/detail/42
[44:05][INFO] 开始接收请求
点击之后,这个页面有个二维码可以直接分享给前端,查看需要提取码,不用担心泄露问题。
4)生成前端代码
前端查看如果没有问题,就可以直接生成代码了,生成代码也需要安装百家饭OpenAPI工具,安装后直接运行
openapi.exe code -y 42 js
执行完成后就可以在执行目录下面看见生成的代码啦
包含了所有api的调用文件,我们可以直接把这个目录拷贝到前端的src下面,就可以引用和调用相关接口了。比如
const axios = require("./axios");
axios.getDataGetauthdata();