工作-API接口需求
需求背景
本部门需要提供接口给其他多个部门使用,其他部门的代码都在不同的仓库并且没有公共的父POM项目。需要考虑其他部门的适配效率。
变更需求:增加接口调用次数等统计信息
方案
分析
通常方案有两种:
- 本部门提供接口,其他部门通过Restful调用
- 本部门提供JDK,其他部门调用JDK方法
分析:
方案1: 调用的接口需要各部门适配,并且后续增加其他接口以后,其他部门也需要增加调用其他接口的接口方法,比较繁琐。
方案2: 将调用的接口通过JDK的形式封装,对外提供方法,各部门构造好参数以后调用方法即可,不需要关注具体的接口内容。JDK内部封装好数据的分块切片等操作方法,下游不需要处理具体逻辑;同时数据分块切片放在各客户端处理,不需要本服务处理,缓解压力。
最后方案2通过评审。
设计
- 请求打过来以后首先鉴权,判断是否是集团内部服务的请求【通过密钥的方式判断】
- 如果不是抛出异常,全局捕获返回;如果是,调用对应请求接口
核心实现
密钥
生成:为每一个部门分配一个唯一的Access Key
(标识)和 Secret Key
(加密密钥)
存储:将两个密钥存入到数据库中。
使用:SDK封装签名的生成逻辑,其他部门只需要构造时传入Access Key
(标识)和 Secret Key
(加密密钥)即可。
信息统计
需要将统计信息存储到数据库,所以只能我们服务统计。
方案1(pass):网关层处理,网关在基架部,关于业务侧统计不好处理。
方案2:AOP + Redis + 定时任务持久化。
补充
设计补充
公司部门内部通过后端调用,暂时使用前端调用。
如果后续增加前端调用,需要考虑防重放和跨域问题
防重放
方案:增加时间戳和Nonce随机数
跨域问题
方案:网关层统一配置CORS
评论