1. 简介

本项目是基于gamma的一个插件

本项目是用来扫描一个spring的项目中有多少个Api接口,然后收集
这个API接口的入参/出参信息统计后通过http发送给后端服务

项目地址:

github
gitee

1.1 使用场景

在微服务背景下 服务之间有大量的RPC,那么当下游服务接口更变后没有及时通知
到对应的上游服务,就会导致上游接口报错

那是否可以在CI流水线中采集已经打包好的业务JAR的接口,然后把采集到的信息都统一交给一个服务储存,如果发现有服务的接口发生了变更,将会自动通知对应上游服务
的负责人

那么基于上述场景,本插件的作用就是用于采集接口信息,然后把采集到的信息发送给对应的服务端。

2. 架构设计

本插件将会扫描对应项目里所有的class文件,然后查找对应的springMVC的接口注解
@RequestMapping / @GetMapping / @PostMapping … 等来判断这是不是一个接口

同时,也会去检查对应打了注解的方法的入参、返回值的数据结构状况,来生成一个唯一的hash值,用于标记对应接口是否变更过

这里可以正确解析对应的包装类Optional<User> 以及 List<User>这样的包装类,会去检查User对象的数据结构,而不是外包装类型

当接口入参、返回值 新增、删除、修改字段名称 对应的hash值才会改变,而调整接口字段顺序是不会更变hash值的
如:


public class User {
    String name;
    int age;
}

public class User {
    int age;
    String name;
}

上述改变将不会更变hash值

3. 快速使用

在/dist目录下有编译后的插件

或者clone仓库后执行

mvn clean package

后生成对应的插件

放入gamma中执行命令

java -jar gamma-bootstrap.jar source=你要扫描的jar路径

4. 参数配置

提供以下参数

endpoint.topology.host=收集结束后发送给的服务域名(必填)
ref=本次采集的项目分支(必填)
commitId=本次采集的项目的commitId(必填)
appName=应用名称(必填)

5.嵌入式执行

如果不想使用插件这么麻烦,那么可以使用gamma的嵌入执行模式来执行

需要先安装gamma-embed模块

    @org.junit.Test
    public void test() {
        Map<String, String> config = new HashMap<>();
        config.put("endpoint.topology.host","127.0.0.1:8080");
        config.put("ref","master");
        config.put("commitId","1234567");
        config.put("appName","1234567");
        config.put("scan.package","com.chy,com.chy2,com.example");

        GammaContainer gammaContainer =
                new GammaContainer("你要扫描的jar路径", config);
        gammaContainer.start(new SpringApiScanProcession());
    }

6. 接收端

当采集完成后将会发送请求 post ${endpoint.topology.host}/api/signature 到服务端

requestBody

以json的形式发送

@Data
@Builder
public class ProjectApiSignatureFrom {

    String commitId; 
    String appName;
    String ref;
    List<ApiSignatureFrom> apiSignature;

}

这里 ApiSignatureFrom 中存放了所有接口的信息

@Data
@Builder
public class ApiSignatureFrom {

    String methodType;
    String url;
    String signature;
}

这里的 signature就将是接口的签名了, 是一个 32位的hash值, 如果接口的入参/返回值改变这里将会改变

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐