Da-API平台-概要
接口调用平台
1.需求分析
👀需求说明
提供 API 接口供开发者调用的平台,基于 Spring Boot 后端 + React 前端的 全栈微服务项目。
管理员可以接入并发布接口、统计分析各接口调用情况;用户可以注册登录并开通接口调用权限、浏览接口、在线调试,还能使用 客户端 SDK 轻松在代码中调用接口。
项目的前端并不复杂,更侧重后端,包含丰富的编程技巧和架构设计层面等多个技术领域。
功能说明
主页浏览、接口管理、在线调试、SDK接入
项目特点:选题新颖 ,不同于在学校时做的管理系统、商城项目等千篇一律的项目,API开放平台通常是知名企业(产品)才会建设和提供的。
接口管理平台不同于API开放平台,有本质区别,接口管理平台是针对系统开发提供接口,可以借助swagger或者文档的形式提供给开发者调用,而API开放平台面向对象更广,可以理解为API开放平台需要兼顾提供接口给开发者使用的场景,还能在此基础上做相应的限制
此外,开放平台项目涉及多个系统的交互(不止有一个后端),包含了 API 签名认证、网关、RPC、分布式等 后端核心知识,是一个开拓眼界、提升系统设计和架构能力的项目。
在这个项目构建的过程中,结合理论和实践,学会思考问题、对比方案、提升排查问题、自主解决bug的能力。
项目收获
自主把控项目学习、项目实践、项目扩展、项目反思的时间计划及安排(快速突击分配35h+,稳扎稳打预计分配60h+)
掌握做项目的完整流程,能独立开发上线项目
学会企业主流前后端开发技术的应用(如 Spring Boot、React、网关等)
学到新版前后端脚手架的使用,掌握快速生成代码、前后端协作的方法,提高数倍开发效
跳出传统的 CRUD,学习企业级第三方平台的架构设计和开发
学到客户端 SDK、API 签名认证、API 网关、RPC 分布式等知识及编程技巧
提高读文档能力,掌握阅读官方文档的方法技巧,提高自学能力
带你分析解决项目中的问题,提升自主解决问题的能力
核心学习重点:微服务思想、代码生成技巧、架构设计、客户端SDK、API签名认证、API网关、RPC分布式
✨技术选型
前端:
React 18
Ant Design Pro 5.x 脚手架
Ant Design & Procomponents 组件库
Umi 4 前端框架
OpenAPI 前端代码生成
后端:
- Java Spring Boot 框架
- MySQL 数据库
- MyBatis-Plus 及 MyBatis X 自动生成
- API 签名认证(Http 调用)
- Spring Boot Starter(SDK 开发)
- Dubbo 分布式(RPC、Nacos)
- Spring Cloud Gateway 微服务网关
- Swagger + Knife4j 接口文档生成
- Hutool、Apache Common Utils、Gson 等工具库
项目架构
在设计项目架构的时候如何去考虑?可以参考现有的API接口平台进行思考(参考腾讯云接口平台:云API)
思考:怎样从【云API】中调用腾讯云的一个接口,即谁去访问、如何访问、访问什么
部署:
服务器 / 容器(平台)
开发计划
【1】项目初始化:项目需求分析、业务流程(架构图、子系统拆分)分析、技术选型、数据库表设计、项目构建(后台api-platform、前台api-platform-frontend)
【2】核心业务开发:
(1)业务流程模块开发:提供一个接口、可以供外部调用
- 用户登录、接口管理模块(Ant Design高级组件)
- 模拟接口项目(示例接口开发、HTTP客户端模拟调用)
- API签名认证
- 客户端SDK开发(基于SpringBoot Starter开发):类似提供一个工具包给调用这个接口平台API的使用者使用
(2)接口管理功能:后台提供接口管理功能,对接口信息进行维护管理
- 发布/下线接口(前后端开发)
- 调试:后端接口调试、前端页面对接
【3】开发及优化
(1)接口调用统计功能:后端优化方案分析及对比,涉及API网关相关概念、技术选型(Spring Cloud Gateway)
(2)统一业务处理(鉴权、统计)
(3)分布式改造(原有单体项目进行分布式改造):公共模块抽象、RPC/HTTP调用详解、Dubbo框架应用
(4)统计分析:后台管理统计分析接口调用情况(前端可视化库应用、后端聚合接口查询)
(5)项目部署上线(思考项目后期可扩展点)
2.概念设计
数据库表设计
-- 接口信息
create table if not exists `interface_info`
(
`id` bigint not null auto_increment comment '主键' primary key,
`name` varchar(256) not null comment '名称',
`description` varchar(256) null comment '描述',
`url` varchar(512) not null comment '接口地址',
`requestHeader` text null comment '请求头',
`responseHeader` text null comment '响应头',
`status` int default 0 not null comment '接口状态(0-关闭,1-开启)',
`method` varchar(256) not null comment '请求类型',
`userId` bigint not null comment '创建人',
`createTime` datetime default CURRENT_TIMESTAMP not null comment '创建时间',
`updateTime` datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
`isDelete` tinyint default 0 not null comment '是否删除(0-未删, 1-已删)'
) comment '接口信息';
项目业务流程
业务流程说明
5个子系统:
- 模拟接口系统:提供各种模拟接口供开发者使用和测试,例如,提供一个随机头像生成接口。
- 后台管理系统:管理员可以发布接口、设置接口的调用数量、设定是否下线接口等功能,以及查看用户使用接口的情况,例如使用次数,错误调用等。
- 用户前台系统:提供一个访问界面,供开发者浏览所有的接口,可以购买或开通接口,并获得一定量的调用次数。
- API 网关系统:负责接口的流量控制,计费统计,安全防护等功能,提供一致的接口服务质量,和简化 API 的管理工作。
- 第三方调用 SDK 系统:提供一个简化的工具包,使得开发者可以更方便地调用接口,例如提供预封装的 HTTP 请求方法、接口调用示例等。
流程分析说明
需要注意的问题及知识:
API开放权限问题
❗ 注意:在实现接口调用时,如果要作为一个开放平台,不要轻易免费开放接口,因为这会极大地增加平台被攻击的风险,导致服务器瞬间被 DDOS 攻击瘫痪。
💡 在调用这个接口时需要考虑以下问题:
需要考虑访问权限的问题:用户是否可以随意访问数据库和接口。
需要添加计费功能,统计用户调用次数,并考虑限流或流量保护措施。
需要考虑如何有效地管理用户。(例如,如果用户欠费或者是陌生人调用接口,需要及时发现并采取措施,防止接口恶意调用)
🪔 有没有听说过 API 网关?
API 网关的主要作用是为多个接口提供保护,并集中进行计费、健全日志等逻辑处理。类似于线下去火车站坐高铁一样,无论是去哪个站台坐哪个火车,都需要先通过检票口进行集中的检票。 与程序中的 AOP 不同,API 网关是一个独立的服务,需要单独开通。(AOP的应用场景可用于接口鉴权,核心在于在项目中对方法进行增强,而API网关是一个独立于其他项目的服务)
🪔 什么是 SDK?
SDK 是软件开发工具包的缩写,是一种为软件开发者提供支持的一系列工具、接口和规范的集合。举个例子,比如腾讯云提供了一些接口,比如创建 VPC 等,如果开发者直接向腾讯云服务器发请求,需要输入密钥、做签名认证等操作,非常繁琐。因此,在构建第三方 API 平台时,一般都会提供一套 SDK,让使用者能够轻松地调用接口,无需自己编写和封装 HTTP 请求。可以把 SDK 理解为 Java 语法中的工具包,使用者只需要最少量的代码即可调用接口,如果不理解 SDK,需要加强 Java 语法的学习。
首先,管理员可以发布接口并将其存储到数据库中,设置接口的调用数量和上下线接口状态。例如,发布一个免费的随机头像接口,它将有一个地址(比如:blog.holic-x.com/img)并保存到数据库中,这里需要一个后台管理系统。
思考一个问题:用户是开发人员应该如何使用这个接口呢?为此,需要提供一个访问界面,称其为用户前台。用户通过前台浏览所有的接口,当找到所需接口时,可以购买或开通接口,获取一定量的调用次数,例如一万次或一千次等。开通接口后,开发者可以调用接口的 API,系统从数据库中获取相关数据并进行调用;同时,管理员可以在后台进行相关的操作(如下图所示)。
举个例子,腾讯云提供各类开放接口,其中有他们自己开发的或者是与第三方合作开发的。而在该项目中,由于目前没有第三方,所以需要自己模拟提供这些接口。因此,在该项目中,将会带领大家开发模拟接口——这是需要开发的第三个子系统,可以随意开发一些类似 helloworld 的小接口,然后将整个流程打通。(参考api-interface实现)
后续当你开发额外的接口时,可以自己开发并提供给用户。如果你使用了第三方接口平台,你需要向对方提供接口文档,就像腾讯云的 API,其中有很多功能接口,每个接口都需要提供相应的文档,否则用户将不知道如何使用这些接口。这种情况在使用第三方接口时很常见,有时用户看文档时感到困惑,觉得文档难懂或不够清晰。为解决这个问题,最好提供在线调试功能,让用户能够立即知道如何使用接口。此外,为了方便用户,可以提供一些示例代码,让他们可以直接复制粘贴到自己的项目中。因此,项目中应该提供接口文档和在线调用功能(参考腾讯云API中心、API Exploer)。
在作为第三方接口平台的时候,需要考虑到防止攻击、统计调用次数、计费流量保护等方面的问题。然而,如果需要给用户提供大量的接口,单独为每个接口开发计费统计、流量保护等功能可能会成为一项繁琐的工作。因此,可以考虑使用一些通用的解决方案,例如使用 API 网关来管理接口,统一进行流量控制、计费统计等操作。这样可以减少重复开发的工作量,提高开发效率。
目前,实现 API 网关的方式有多种,例如 Kong、Nginx、Gateway 和 Spring Cloud 的 Gateway 扩展等。企业中也可能会使用自建 API 网关。此外,Kong 实际上是对 OpenResty 的一种封装,同时也是对 Nginx 服务器的上层扩展,因此,熟练掌握 Nginx 服务器的使用将有助于理解 API 网关的实现。总的来说,熟悉 Nginx 服务器的开发人员应该更容易实现 API 网关。如果大家对这些技术还不太了解,那这个项目将会帮助大家拓宽视野。这些技术都是架构层面或微服务层面的技术,在企业实战层面是必不可少的。 这个项目需要包含多个子系统,但光有这些还不足以完成整个项目,因为还需要为其他开发者提供一个第三方接口调用平台。在这个平台中,将提供一个下载示例代码的 SDK,以便其他开发者可以更方便地使用系统接口。因此,还需要开发一个小系统,即第三方接口调用的SDK(供开发者方便快捷调用)。 目前,已明确了该项目五个主要平台,分别是模拟接口、后台管理系统、用户前台、API 网关和第三方调用 SDK。而这五个平台会被拆分成五个项目,并且每个项目还会被拆分成相应的子系统。具体来说,需要开发五个系统:模拟接口系统、后台管理系统、用户前台系统、API 网关系统和第三方调用 SDK 系统。