项目学习[更新完结] - API开发平台个人笔记总结梳理 + 简单扩展思路
API 开放平台项目 [学习笔记+开发+简单优化扩展+部署] - 总结梳理
背景介绍和需求分析
简介: 一个 API 接口提供开发者调用的平台,基于 SpringBoot 后端 + React 前端项目
GitHub 仓库: https://github.com/Jools-hzx/JoolsAPIs-Open-Platform
实现功能
管理员权限:
- 接入并发布接口
- 可视化各接口调用情况
- 发布配置限流、熔断规则 (扩展点)
用户权限:
- 开通接口调用权限
- 浏览接口及在线调试
- 通过客户端 SDK 轻松调用接口
涉及技术栈:
- 后端:Java, Spring Boot, Spring Cloud Gateway, Dubbo, MyBatis, Nacos, Sentinel
- 前端:Ant Design Pro, ECharts
- 工具:Maven, Git, Nacos, API 签名认证, 限流熔断
项目架构图[已更新,整合 Seata]
项目划分
| 子系统划分 | 描述 |
|---|---|
| 模拟接口系统 | 提供各种模拟接口供开发者使用和测试 |
| 后台管理系统 | 管理员可以发布接口、设置接口的调用数量、设定是否下线接口,以及查看用户使用情况,如使用次数、错误调用等 |
| 用户前台系统 | 提供一个访问界面,供开发者浏览所有的接口 |
| API 网关系统 | 负责接口的流量控制 |
| 第三方调用 SDK 系统 | 提供一个简化的工具包,供开发者调用 API |
实际搭建
| 项目搭建模块 | 描述 |
|---|---|
| 后台项目 | 后台管理系统的实际项目搭建 |
| 网关项目 | API 网关系统的实际项目搭建 |
| SDK 项目 | 第三方调用 SDK 系统的实际项目搭建 |
| 前端项目 | 用户前台系统的实际项目搭建 |
| 模拟接口项目 | 模拟接口系统的实际项目搭建 |
| 抽取公共模块项目 | 提供各个系统共用的通用模块搭建 |
各阶段实现和笔记
实现阶段一: 项目前后端框架搭建
阶段一笔记: https://reurl.cc/qvp1DE
主要内容:
- 搭建前端项目和后端项目初始框架,打通前后端数据通信
- 前端基于 Ant Design Pro + Umi 的鱼皮前端通用模板
- 后端基于鱼皮后端通过模板
- 设计 接口信息表 (借助 sqlfather 工具快速生成 SQL 语句建表)
- 借助 OpenApi接口文档规范自动生成前后端通信接口方法
实现阶段二: 前端扩展、签名认证、SDK开发
阶段二笔记:https://reurl.cc/Eg3myn
主要内容:
- 完善前端页面和发送请求到后端的接口
- 开发模拟接口平台项目,开发简易的客户端模拟调用接口
- 开发 API 签名认证,保证安全性
- 客户端 SDK 的开发 - SPI 机制知识点学习
- 完善前端接口展示、接口在线调用页面
实现阶段三: 实现接口上线、下线、统计调用次数功能
主要内容:
- 实现功能:完成接口发布/上线、下线功能
- 完善前端可以浏览接口、查看接口文档、申请调用接口
- 完善后台可以统计用户调用接口的次数
- 学习网关的概念、作用和引入的网关步骤
实现阶段四: 完善用户接口权限关系、调用次数;学习网关
主要内容:
- 完善用户调用接口关系维护。
- 调用成功之后调用次数 + 1,完成请求接口编写
- 不足之处分析:
- 调用大量接口次数, 需要涉及到事务和锁的知识
- 需要使用分布式锁来保证数据的一致性
- 学习 SpringCloud Gateway
实现阶段五: 开发网关项目
主要内容:
- 使用 SpringCloud Gateway 组件开发网关项目
- 使用全局过滤器组件完成鉴权、转发、日志输入等业务
- 前端用户可走通调用接口整个流程,返回响应结果
实现阶段六: RPC 和 Dubbo 框架学习
笔记: https://reurl.cc/dypxWy 主要内容:
- RPC 介绍和 Dubbo 框架学习
- 基于 Dubbo 官方手册学习
- 阅读官方示例代码
- 基于官方示例代码搭建 Demo 测试
- 结合 Demo 示例,整合 Dubbo 到项目内实现方法远程调用
实现阶段七: 抽取公共模块、改造项目整合Dubbo、开发可视化功能
主要内容:
- 抽取公共接口、model为公共模块发布到本地仓库
- 后台项目导入公共模块改造
- 实现公共接口, 实现方法用@DubboService注释
- 网关项目导入公共模块改造,远程调用Dubbo服务提供实现方法
- 完善调用逻辑,测试整个流程
- 开发前端可视化功能 - 基于 EChart
实现阶段八(简单扩展): 扩充网关功能和网关优化(增加限流、降级机制)
- 详见笔记: https://reurl.cc/8X8p6d
- 标题 -
优化01 - 基于 Sentinel 组件配合配合网关完成限流、降级控制、流控规则持久化
主要内容:
完善- 网关校验该用户是否剩余调用次数是否合法扩展- 使用 Sentinel + Nacos 完成限流 + 降级 + 流控规则持久化扩展- 基于Sentinel 适配 Gateway 的网关限流规则完成限流规则设置扩展-采用 Nacos 作为 Sentinel 规则配置数据源整合,防止 Sentinel 应用重启规则丢失扩展-基于 Nacos 统一管理流控规则,发布、修改和维护限流规则和降级规则
实现阶段九(扩展): 引入分布式事务 Seata, 控制调用接口
- 详见笔记: https://reurl.cc/8X8p6d
- 标题 -
优化02 —— 引入分布式事务 Seata, 控制调用接口
主要内容:
扩展- 需求分析,分布式事务,学习 Seata 组件学习- Seata入门 [ 基于官方文档 ],相关术语,Seata实现分布式事务的流程机制与分析学习- 事务模式 AT学习- 基于官方给的 sample 学习整合 Seata + SpringBoot + Dubbo扩展- 将 Seata 整合进后端项目,Nacos作为配置和服务注册中心,基于命名空间统一管理测试- 测试分布式事务
实现部署 - 基于 Docker + 宝塔面板 + 腾讯云服务器 + Xshell + Xftp
- 详见笔记: https://reurl.cc/rvbRKZ
- 标题 -
API接口平台- 09 部署
参考鱼友部署笔记
- https://www.codefather.cn/post/1828449609845428226
- https://www.codefather.cn/post/1829798511080284161
部署遇到的问题 + 解决
- 单独整理了解决各个问题的笔记: https://reurl.cc/pvbMpa
- 标题 -
部署问题-梳理
遇到和解决的问题有:
- 问题一:
Nacos容器配置了数据库持久化之后,启动失败 - 问题二: 解决
Seata容器启动注册seata server服务到Nacos失败 - 问题三: 解决报错
ERROR: can not get cluster name in registry config 'service.vgroupMapping.[xxxx-GROUP]', please make sure registry config correct - 问题四: 注册服务到云服务器内的 Nacos, 本地项目 Nacos Client 报错
Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING[!! 参考的鱼友笔记也遇到过 !!] - 问题五: 后端项目尝试注册到远端
seata server服务报错Can not register RM, err: can not connect to services-server - 问题六: 没有从
Nacos找到Dubbo服务提供方注册的服务 - 问题七: 如何配置多环境打包 JAR
感受: 不尝试不知道,一尝试吓一跳!!!配置过程真是处处易踩坑。一个问题折磨一整天也不是没可能....(lll¬ω¬)...
小结
该项目通过创新的技术栈选择与精心设计,提供了一个高效、安全且易于扩展的基于分布式微服务架构形式的 API 开放平台。它不仅能够为开发者提供简便的接口调用方式,还通过一系列安全和性能优化措施保障了系统的稳定性和可扩展性。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
