上一篇:https://lawsssscat.blog.csdn.net/article/details/105257360
下一篇:https://blog.csdn.net/LawssssCat/article/details/105286795
上一章代码可以在github获取 https://github.com/LawssssCat/v-security/tree/v1.3
两个工具,能实现与前端开发并行工作
- 使用 swagger 自动生成 api 的 html 文档
- 使用 WireMock 快速伪造 RESTful 服务
swagger
首先,是 swagger 可以把我们写好的 接口 生成一个文档(除了查看还能测试),方便前端对接
v-security-demo 添加 swagger 依赖
<!--swagger2 核心程序,生成文档数据-->
<!-- 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>
启动类上加注解
只需要在启动类上加注解 @EnableSwagger2
即可启动程序了
package cn.vshop.security;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/** * @author alan smith * @version 1.0 * @date 2020/3/25 0:27 */
@SpringBootApplication
@RestController
// 自动生成文档
@EnableSwagger2
public class DemoApplication {
/** * 启动类 * * @param args */
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello() {
return "hello spring security";
}
}
访问文档
程序启动后,访问 http://localhost:8080/swagger-ui.html
可以看到我们写的所有 API(Controller) 和 endpoint
另外,我们可以自定义一些文档内容
只需要在方法或者属性上加注解
- @ApiOperation 添加方法描述
- @ApiModelProperty 属性上加描述
- @ApiParam 对基本类型的描述
WireMock
如果前端种类很多(安卓、苹果、pc),需要一个稳定的 api 接阔作为测试,
如果 api 又特别多(写不完)
那么可以通过 WireMock (一个服务器,我们客户端就可以改变服务端接口的行为) 伪造接口
参考:WireMock 简介
wget https://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-standalone/2.26.3/wiremock-standalone-2.26.3.jar
运行
java -jar wiremock-standalone-2.26.3.jar --port 8080
端口默认 8080
引入依赖
<!--伪造api-->
<!-- https://mvnrepository.com/artifact/com.github.tomakehurst/wiremock -->
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
编写并执行MockServer
package cn.vshop.security.wiremock;
import org.apache.commons.io.FileUtils;
import org.springframework.core.io.ClassPathResource;
import java.io.IOException;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
/** * 其实是一个 client,去连接我们刚运行器来的 wiremock, * 告诉服务器如何伪造我们的接口 * * @author alan smith * @version 1.0 * @date 2020/4/2 23:30 */
public class MockServer {
public static void main(String[] args) throws IOException {
// 声明wiremock服务器在哪
configureFor("192.168.64.33", 8080);
// 清空以前的配置(理解为初始化)
removeAllMappings();
// 请求id=1,返回01文件内容
mock("/order/1", "01");
// 请求id=2,返回02文件内容
mock("/order/2", "02");
}
private static void mock(String url, String file) throws IOException {
// 指定classpath下的路径资源
ClassPathResource resource = new ClassPathResource("/mock/response/" + file + ".txt");
// 读取指定路径的文件作为String
String content = FileUtils.readFileToString(resource.getFile(), "UTF-8");
// GET /order/1
stubFor(get(urlPathEqualTo(url))
// 响应
.willReturn(aResponse().withBody(content).withStatus(200)));
}
}
01.txt
{
"id":1
}
02.txt
{
"id":2 ,
"type" : "A"
}
访问 http://192.168.64.33:8080/order/1
(这里的 IP 是 WireMock服务器所在的 IIP)
还有很多功能,更多功能参考 wireMock 官网 http://wiremock.org/
done