上一篇: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

官网:http://wiremock.org/


如果前端种类很多(安卓、苹果、pc),需要一个稳定的 api 接阔作为测试,
如果 api 又特别多(写不完)

那么可以通过 WireMock (一个服务器,我们客户端就可以改变服务端接口的行为) 伪造接口

参考:WireMock 简介

下载服务器
文档目录
jar包下载目录

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