项目学习[更新完结] - API开发平台个人笔记总结梳理 + 简单扩展思路

API 开放平台项目 [学习笔记+开发+简单优化扩展+部署] - 总结梳理

背景介绍和需求分析

简介: 一个 API 接口提供开发者调用的平台,基于 SpringBoot 后端 + React 前端项目

GitHub 仓库: https://github.com/Jools-hzx/JoolsAPIs-Open-Platform

实现功能

管理员权限:

  1. 接入并发布接口
  2. 可视化各接口调用情况
  3. 发布配置限流、熔断规则 (扩展点)

用户权限:

  1. 开通接口调用权限
  2. 浏览接口及在线调试
  3. 通过客户端 SDK 轻松调用接口

涉及技术栈:

  • 后端:Java, Spring Boot, Spring Cloud Gateway, Dubbo, MyBatis, Nacos, Sentinel
  • 前端:Ant Design Pro, ECharts
  • 工具:Maven, Git, Nacos, API 签名认证, 限流熔断

项目架构图[已更新,整合 Seata]

项目架构图.jpg

项目划分

子系统划分描述
模拟接口系统提供各种模拟接口供开发者使用和测试
后台管理系统管理员可以发布接口、设置接口的调用数量、设定是否下线接口,以及查看用户使用情况,如使用次数、错误调用等
用户前台系统提供一个访问界面,供开发者浏览所有的接口
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 机制知识点学习
  • 完善前端接口展示、接口在线调用页面

实现阶段三: 实现接口上线、下线、统计调用次数功能

笔记: https://reurl.cc/7dE3od

主要内容:

  • 实现功能:完成接口发布/上线、下线功能
  • 完善前端可以浏览接口、查看接口文档、申请调用接口
  • 完善后台可以统计用户调用接口的次数
  • 学习网关的概念、作用和引入的网关步骤

实现阶段四: 完善用户接口权限关系、调用次数;学习网关

笔记: https://reurl.cc/zDQWbQ

主要内容:

  • 完善用户调用接口关系维护。
  • 调用成功之后调用次数 + 1,完成请求接口编写
  • 不足之处分析:
    • 调用大量接口次数, 需要涉及到事务和锁的知识
    • 需要使用分布式锁来保证数据的一致性
  • 学习 SpringCloud Gateway

实现阶段五: 开发网关项目

笔记: https://reurl.cc/93W5OY

主要内容:

  • 使用 SpringCloud Gateway 组件开发网关项目
  • 使用全局过滤器组件完成鉴权、转发、日志输入等业务
  • 前端用户可走通调用接口整个流程,返回响应结果

实现阶段六: RPC 和 Dubbo 框架学习

笔记: https://reurl.cc/dypxWy 主要内容:

  • RPC 介绍和 Dubbo 框架学习
  • 基于 Dubbo 官方手册学习
  • 阅读官方示例代码
  • 基于官方示例代码搭建 Demo 测试
  • 结合 Demo 示例,整合 Dubbo 到项目内实现方法远程调用

实现阶段七: 抽取公共模块、改造项目整合Dubbo、开发可视化功能

笔记: https://reurl.cc/OrZ447

主要内容:

  • 抽取公共接口、model为公共模块发布到本地仓库
  • 后台项目导入公共模块改造
  • 实现公共接口, 实现方法用@DubboService注释
  • 网关项目导入公共模块改造,远程调用Dubbo服务提供实现方法
  • 完善调用逻辑,测试整个流程
  • 开发前端可视化功能 - 基于 EChart

实现阶段八(简单扩展): 扩充网关功能和网关优化(增加限流、降级机制)

  • 详见笔记: https://reurl.cc/8X8p6d
  • 标题 - 优化01 - 基于 Sentinel 组件配合配合网关完成限流、降级控制、流控规则持久化

主要内容:

  • 完善 - 网关校验该用户是否剩余调用次数是否合法
  • 扩展 - 使用 Sentinel + Nacos 完成限流 + 降级 + 流控规则持久化
  • 扩展 - 基于Sentinel 适配 Gateway 的网关限流规则完成限流规则设置
  • 扩展 -采用 Nacos 作为 Sentinel 规则配置数据源整合,防止 Sentinel 应用重启规则丢失
  • 扩展 -基于 Nacos 统一管理流控规则,发布、修改和维护限流规则和降级规则

实现阶段九(扩展): 引入分布式事务 Seata, 控制调用接口

主要内容:

  • 扩展 - 需求分析,分布式事务,学习 Seata 组件
  • 学习 - Seata入门 [ 基于官方文档 ],相关术语,Seata实现分布式事务的流程机制与分析
  • 学习 - 事务模式 AT
  • 学习 - 基于官方给的 sample 学习整合 Seata + SpringBoot + Dubbo
  • 扩展 - 将 Seata 整合进后端项目,Nacos作为配置和服务注册中心,基于命名空间统一管理
  • 测试 - 测试分布式事务

实现部署 - 基于 Docker + 宝塔面板 + 腾讯云服务器 + Xshell + Xftp

参考鱼友部署笔记

  1. https://www.codefather.cn/post/1828449609845428226
  2. https://www.codefather.cn/post/1829798511080284161

部署遇到的问题 + 解决

遇到和解决的问题有:

  • 问题一: 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个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP