# cenApi **Repository Path**: usernamecen/cen-api ## Basic Information - **Project Name**: cenApi - **Description**: This is an API open platform project - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-02-24 - **Last Updated**: 2024-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 简介 基于Spring Boot + Dubbo + Spring Cloud Gateway的API接口开放调用平台。管理员可以接入并发布接口,查看接口的调用情况;用户可以开通接口调用权限、浏览接口及在线调试,并通过客户端SDK轻松调用接口。 技术选型: SSM + Spring Boot、Spring Cloud Gateway、Dubbo、Nacos、MySQL、 MyBatis-Plus、Hutool工具库、Knife4j、Swagger 五大模块 分别为sdk,common,gateway,interface,backed SDK 作为对接模拟接口的中间商,让用户上传必要的参数,同时保证用户不上传无关的代码 理想情况:用户只需要关心调用哪些接口、传递哪些参数,就跟调用自己写的代码一样简单。 开发 starter 的好处:用户引入之后,可以直接在 application.yml 中写配置,自动创建客户端。 1.1 Starter 开发流程 1. 引入spring-boot-configuration-processor,作用:在yml配置文件中生成提示代码,移除build。 2. 删除生成的启动类,创建一个类,使用@ConfigurationProperties读取配置文件中的配置。 3. 在resource目录下新建META-INF文件夹,文件夹下新建spring.factories文件,文件内容指向配置类。 4. install 1.2 SDK模块组成 ● 模拟客户端CenApiClient ● 只含有用户名的用户模型 User ● 生成签名的工具类 SignUtils ● 配置类 CenApiClientConfig ● spring.factories 启动时加载配置文件 Interface 本项目的模拟接口 *********** Common 提取通用方法,减少无用代码。由后端业务代码继承接口,并通过dubbo,提供给其他模块使用。 Common项目组成 Model ● 实体类:接口信息,用户调用信息 ● 枚举类:接口信息状态枚举 ● 包装类: Service ● 内部接口信息服务 InnerInterfaceInfoService //从数据库中查询模拟接口是否存在(请求路径、请求方法、请求参数) InterfaceInfo getInterfaceInfo(String path, String method); ● 内部用户接口信息服务 InnerUserInterfaceInfoService //调用接口统计 boolean invokeCount(long interfaceInfoId, long userId); ● 内部用户服务InnerUserService //数据库中查是否已分配给用户秘钥(accessKey) User getInvokeUser(String accessKey); Backend 后端具体业务逻辑,由通用模板改造而来 Backend模块组成 以下是本模块核心部分 Service 1. UserInterfaceInfoService 用户接口信息服务 ● validUserInterfaceInfo:提供验证用户接口信息的方法 ● invokeCount: 接口调用信息,次数的增加逻辑在这 2. InterfaceInfoService 接口信息服务 ● 验证接口信息的方法 3. UserService 用户增删改查 DubboService 继承来自于Common包的三个通用接口 配置文件 ● 配置Dubbo的相关设置 GateWay(✨✨✨) 这位更是个重量级 本项目中的网关作用 ● 路由:全局接口处理转发(配置文件设置) ● 流量染色(配置文件设置) ● 统一鉴权(业务代码逻辑) ● 统一业务处理(业务代码逻辑) 网关模块组成 CenapiGatewayApplication 测试用(Meaningless) 1. @EnableDubbo 开启dubbo服务 2. @DubboReference 接受提供的服务 CustomGlobalFilter全局过滤 (✨✨✨) 1. filter 方法 ● 请求日志 :通过 ServerWebExchange 来获取 ServerHttpRequest ,并通过 request 来获取各种参数(路径,标识,参数,方法...); ● 访问控制 - 黑白名单:通过 ServerWebExchange 来获取 ServerHttpResponse 和ServerHttpRequest,验证请求来源地址(sourceAddress)是否等于我们设置的白名单地址,并将结果设置到 response 里面; ● 用户鉴权:通过 ServerWebExchange 来获取 ServerHttpRequest ,使用 request 获取 accesskey,该参数用于调用 innerUserService 中的验证参数方法,确定用户是否已被分配 accesskey,然年从数据库中取出 secretKey 来验证是否匹配,接口验证信息同理; ● 处理响应 2. handleResponse 方法 处理响应的,用于对上面的 filter 进行进一步处理,具体表现为对返回数据进行增强操作,具体表现为: ● 日志记录增强 ● 接口调用次数统计增强 innerUserInterfaceInfoService.invokeCount(interfaceInfoId, userId); ● 数据处理增强 ● 异常处理增强 ● 装饰器模式增强 application.yml配置文件 ● 设置全局 api 请求拦截并转发 ● 设置 dubbo