一、项目概要
本项目是一个面向开发者的API平台,提供API接口供开发者调用。用户通过注册登录,可以开通接口调用权限,并可以浏览和调用接口。每次调用都会进行统计,用户可以根据统计数据进行分析和优化。管理员可以发布接口、下线接口、接入接口、并可视化接口的调用情况和数据。本项目侧重于后端,涉及到多种编程技巧和架构设计层面的知识。
二、项目介绍
一个提供API接口工开发者调用的平台
管理员可以发布接口,同时统计分析个接口的调用情况,用户可以注册登录并开通接口调用权限,浏览接口以及在线进行调试,并可以使用SDK轻松得在代码中调用接口。该项目前端简单,后端丰富,涵盖编程技巧和架构设计等多个技术领域。
三、项目源码
等我写完再放。
四、项目准备工具
前端开发:
后端开发:
其他工具:
注意:
- nodejs版本大于16.14,小于18版本
- idea版本在2021年以上
五、项目业务流程
1、流程概述
5个子系统:
- 模拟接口系统:提供各种模拟接口供开发者使用和测试,例如,提供一个随机头像生成接口。
- 后台管理系统:管理员可以发布接口、设置接口的调用数量、设定是否下线接口等功能,以及 查看用户使用接口的情况,例如使用次数,错误调用等。
- 用户前台系统:提供一个访问界面,供开发者浏览所有的接口,可以购买或开通接口,并获得 一定量的调用次数。
- API 网关系统:负责接口的流量控制,计费统计,安全防护等功能,提供一致的接口服务质 量,和简化 API 的管理工作。
- 第三方调用 SDK 系统:提供一个简化的工具包,使得开发者可以更方便地调用接口,例如提 供预封装的 HTTP 请求方法、接口调用示例等
需要考虑的关键问题和挑战:
- 接口设计:需要设计清晰易用的 API 接口,并且提供详细的接口文档,以方便开发者使用。
- 性能和可用性:平台需要承载大量的接口请求,因此需要考虑到性能和可用性问题。例如,设 计高效的数据存储和检索策略,确保 API 网关的高性能等。
- 安全:平台需要防止各种安全攻击,例如 DDOS 攻击,也需要保护用户的隐私和数据安全。
- 计费和流量控制:需要设计合理的计费策略和流量控制机制,以确保平台的稳定运行和收入来 源。
- 易用性和用户体验:需要为开发者提供简单易用的接口调用工具和友好的用户界面,提供优质 的用户体验。
2. 详细说明
需要注意的问题及知识:
❗ 注意:在实现接口调用时,如果要作为一个开放平台,不要轻易免费开放接口,因为这会极大地 增加平台被攻击的风险,导致服务器瞬间被 DDOS 攻击瘫痪。
💡 在调用这个接口时需要考虑以下问题:
- 需要考虑访问权限的问题:用户是否可以随意访问数据库和接口。
- 需要添加计费功能,统计用户调用次数,并考虑限流或流量保护措施。
- 需要考虑如何有效地管理用户。(例如,如果用户欠费或者是陌生人调用接口,我们需要及时发 现并采取措施)
🪔 有没有听说过 API 网关?
API 网关的主要作用是为多个接口提供保护,并集中进行计费、健全日志等逻辑处理。类似于我们 去火车站坐高铁一样,无论是去哪个站台坐哪个火车,都需要先通过检票口进行集中的检票。 与我们程序中的 AOP 不同,API 网关是一个独立的服务,需要单独开通。
🪔 什么是 SDK?
SDK 是软件开发工具包的缩写,是一种为软件开发者提供支持的一系列工具、接口和规范的集合。 举个例子,比如腾讯云提供了一些接口,比如创建 VPC 等,如果开发者直接向腾讯云服务器发请 求,需要输入密钥、做签名认证等操作,非常繁琐。因此,在构建第三方 API 平台时,一般都会提 供一套 SDK,让使用者能够轻松地调用接口,无需自己编写和封装 HTTP 请求。可以把 SDK 理解 为 Java 语法中的工具包,使用者只需要最少量的代码即可调用接口,如果不理解 SDK,需要加强 Java 语法的学习。
首先,管理员可以发布接口并将其存储到数据库中,设置接口的调用数量和上下线接口状态。例 如,发布一个免费的随机头像接口,它将有一个地址(比如:yupi.icu/img)并保存到数据库中, 这里需要一个后台管理系统。 现在,我们的用户是开发人员,他们如何使用这个接口呢?为此,我们需要提供一个访问界面,我 们称其为用户前台。用户通过前台浏览所有的接口,当找到所需接口时,可以购买或开通接口,获 取一定量的调用次数,例如一万次或一千次等。开通接口后,开发者可以调用接口的 API,系统从 数据库中获取相关数据并进行调用;同时,管理员可以在后台进行相关的操作(如下图所示)。
举个例子,腾讯云提供各类开放接口,其中有他们自己开发的或者是与第三方合作开发的。而在该 项目中,由于目前没有第三方,所以我们需要自己提供这些接口。因此,在该项目中,将会带领大 家开发模拟接口——这是需要开发的第三个子系统,我们可以随意开发一些类似 helloworld 的小 接口,然后将整个流程打通。 后续当你开发额外的接口时,可以自己开发并提供给用户。如果你使用了第三方接口平台,你需要 向对方提供接口文档,就像腾讯云的 API,其中有很多功能接口,每个接口都需要提供相应的文 档,否则用户将不知道如何使用这些接口。这种情况在使用第三方接口时很常见,有时用户看文档 时感到困惑,觉得文档难懂或不够清晰。为解决这个问题,我们最好提供在线调试功能,让用户能 够立即知道如何使用接口。此外,为了方便用户,我们可以提供一些示例代码,让他们可以直接复 制粘贴到自己的项目中。因此,我们的项目中应该提供接口文档和在线调用功能(如下图所示)。
在作为第三方接口平台的时候,我们需要考虑到防止攻击、统计调用次数、计费流量保护等方面的 问题。然而,如果我们需要给用户提供大量的接口,单独为每个接口开发计费统计、流量保护等功 能可能会成为一项繁琐的工作。因此,我们可以考虑使用一些通用的解决方案,例如使用 API 网关 来管理接口,统一进行流量控制、计费统计等操作。这样可以减少重复开发的工作量,提高开发效 率。 目前,实现 API 网关的方式有多种,例如 Kong、Nginx、Gateway 和 Spring Cloud 的 Gateway 扩展等。企业中也可能会使用自建 API 网关。此外,Kong 实际上是对 OpenResty 的一 种封装,同时也是对 Nginx 服务器的上层扩展,因此,熟练掌握 Nginx 服务器的使用将有助于理 解 API 网关的实现。总的来说,熟悉 Nginx 服务器的开发人员应该更容易实现 API 网关。如果大 家对这些技术还不太了解,那这个项目将会帮助大家拓宽视野。这些技术都是架构层面或微服务层 面的技术,在企业实战层面是必不可少的。 这个项目需要包含多个子系统,但光有这些还不足以完成整个项目,因为我们还需要为其他开发者 提供一个第三方接口调用平台。在这个平台中,我们将提供一个下载示例代码的 SDK,以便其他开 发者可以更方便地使用我们的接口。因此,我们还需要开发一个小系统,即第三方接口调用的 SDK。 目前,我们已明确了该项目五个主要平台,分别是模拟接口、后台管理系统、用户前台、API 网关 和第三方调用 SDK。而这五个平台会被拆分成五个项目,并且每个项目还会被拆分成相应的子系 统。具体来说,我们需要开发五个系统:模拟接口系统、后台管理系统、用户前台系统、API 网关 系统和第三方调用 SDK 系统。
六、项目技术选型
前端
- React 18
- Ant Design Pro 5.x脚手架
- Ant Design & Procomponents组件库
- Umi 4 前端框架
- OpenAPI 前端代码生成
后端
- Java Spring Boot
- MySQL 数据库
- MyBatis-Plus 及 MyBatuis X 自动生成
- API签名认证(Http调用)
- SpringBoot Starter (SDK开发)
- Dubbo 分布式(RPC、Nacos)
- Swagger + Knife4j 接口文档生成
- Spring Cloud Gateway 微服务网关
- Hutool、Apache Common Utils、Gson 等工具库
七、需求分析
背景:
- 前端开发需要用到后台接口
- 使用现成的系统的功能-免费API接口平台
做一个API接口平台:
- 管理员需要用到的后台接口
- 用户可以访问前台,查看接口信息
其他要求:
- 防止攻击
- 不能随意调用(限制、开通)
- 统计调用次数
- 计费
- 流量保护
- API接入
八、前端项目初始化
1、搭建项目脚手架(Ant Design Pro)
1.1、点击开始使用
Ant Design Pro 官方文档
进入Ant Design Pro网站,点击
1.2、复制初始化命令
1.3、在本地打开项目目录
或者使用PowerShell
1.4、使用初始化命令
1.5、创建项目
使用 pro create cc 创建项目
选择最新版本 umi@4
2、使用前端开发工具
2.1、打开项目
前端使用WebStorm或VSCode
注:使用webstorm,idea就不能用了,可能是激活码问题,我用的是vscode
确认环境是否匹配
输入命令,查询版本