跳至主要內容

Da-API平台-概要

holic-x...大约 12 分钟项目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 语法的学习。

​ 首先,管理员可以发布接口并将其存储到数据库中,设置接口的调用数量和上下线接口状态。例如,发布一个免费的随机头像接口,它将有一个地址(比如:noob.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 系统。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3