需求背景

本部门需要提供接口给其他多个部门使用,其他部门的代码都在不同的仓库并且没有公共的父POM项目。需要考虑其他部门的适配效率。

变更需求:增加接口调用次数等统计信息

方案

分析

通常方案有两种:

  1. 本部门提供接口,其他部门通过Restful调用
  2. 本部门提供JDK,其他部门调用JDK方法

分析:

方案1: 调用的接口需要各部门适配,并且后续增加其他接口以后,其他部门也需要增加调用其他接口的接口方法,比较繁琐。

方案2: 将调用的接口通过JDK的形式封装,对外提供方法,各部门构造好参数以后调用方法即可,不需要关注具体的接口内容。JDK内部封装好数据的分块切片等操作方法,下游不需要处理具体逻辑;同时数据分块切片放在各客户端处理,不需要本服务处理,缓解压力。

最后方案2通过评审。

设计

  1. 请求打过来以后首先鉴权,判断是否是集团内部服务的请求【通过密钥的方式判断】
  2. 如果不是抛出异常,全局捕获返回;如果是,调用对应请求接口

image-20250504110200348

核心实现

密钥

生成:为每一个部门分配一个唯一的Access Key(标识)和 Secret Key(加密密钥)

存储:将两个密钥存入到数据库中。

使用:SDK封装签名的生成逻辑,其他部门只需要构造时传入Access Key(标识)和 Secret Key(加密密钥)即可。

信息统计

需要将统计信息存储到数据库,所以只能我们服务统计。

方案1(pass):网关层处理,网关在基架部,关于业务侧统计不好处理。

方案2:AOP + Redis + 定时任务持久化。

补充

设计补充

公司部门内部通过后端调用,暂时使用前端调用。

如果后续增加前端调用,需要考虑防重放跨域问题

防重放

方案:增加时间戳和Nonce随机数

跨域问题

方案:网关层统一配置CORS