API接口项目
需求分析与技术选型
需求分析
面向开发者的API平台,提供API接口供开发者调用,侧重后端。
通过注册登录,开通接口调用权限,浏览和调用接口。
每次调用都会进行统计,用户可以根据统计数据进行分析和优化。
管理员可以发布接口、下线接口、接入接口,并可视化接口的调用情况和数据。
开放平台项目涉及五个子系统的交互
- 模拟接口系统(interface):提供模拟接口供开发者使用和测试,例如,提供一个随机头像生成接口。
- 后台管理系统:管理员可以发布接口、设置接口的调用数量、设定是否下线接口等功能,以及查看用户使用接口的情况(使用次数,错误调用等)。
- 用户前台系统:提供一个访问界面,供开发者浏览所有的接口,可以购买或开通接口,并获得一定量的调用次数。
- API网关系统(gateway):负责接口的流量控制,计费统计,安全防护等功能,提供一致的接口服务质量,和简化API的管理工作。
- 第三方调用SDK系统(client-sdk):提供一个简化的工具包,使得开发者可以更方便地调用接口,例如提供预封装的HTTP请求方法、接口调用示例等。
关键问题和挑战
- 接口设计:需要设计清晰易用的API接口,并且提供详细的接口文档,以方便开发者使用。
- 性能和可用性:平台需要承载大量的接口请求,因此需要考虑到性能和可用性问题。例如,设计高效的数据存储和检索策略,确保API网关的高性能等。
- 安全:平台需要防止各种安全攻击,例如DDOS攻击,也需要保护用户的隐私和数据安全。
- 计费和流量控制:需要设计合理的计费策略和流量控制机制,以确保平台的稳定运行和收入来源。
- 易用性和用户体验:需要为开发者提供简单易用的接口调用工具和友好的用户界面,提供优质的用户体验。
技术选型
- 前端:
React + Ant Design Pro + Ant Design Procomponents + Umi + Uim Request(Axios) - 后端:
Spring Boot + Spring Boot Starter(SDK开发) + 网关
前端-初始化
创建项目框架
Ant Design Pro 官网
版本 Ant Design Pro v6 ==> 基于 Umi 4 + React 18/19
安装在系统中npm i @ant-design/pro-cli -g
创建项目pro create myapp
换成国内源yarn config set registry https://registry.npmmirror.com
清除 yarn 缓存(避免损坏的临时文件)yarn cache clean
安装依赖yarn install
运行yarn start
初始化项目包括:
Umi 4
React 19
TypeScript 5+
Biome 替代 ESLint(现代化工具链)
项目廋身:去除国际化18n-remove
删除locales目录
删除测试工具
- tests目录
根据后端自动生成代码
启动后端 http://localhost:8101/api/v3/api-docs
复制粘贴到前端,找到config.ts中的openAPI插件。
打开package.json,找到openapi运行(或在终端输入yarn run openapi)
后端-初始化
使用微光后端全能侠项目初始化
全局修改项目名称:
- 进入pom.xml
- 选中Omni然后按[Ctrl+Shift+R]全局搜索
- 替换
修改配置
数据库 MySQL 名称:wgapi_db 端口:3306
1 | -- 创建库 |
Redis 端口:6379
http://localhost:6379/api/doc.html
前后端对接调整
修改前端请求配置
requestErrorConfig.ts重命名为requestConfig.ts
前端的请求地址为后端地址
在app.tsx里引入修改的请求配置
1 | const handleSubmit = async (values: API.UserLoginRequest) => { |
登录状态失效
requestconfig.ts 中添加withCredentials:true
在AvatarDropdown.tsx按[Ctrl+R]
把所有的currentUser换成loginUser,name换成userName
把默认的注销方法loginOut改成后端的方法userLogoutUsingPOST
在userLogoutUsing POST后编写跳转回登录页面
1 | import { userLogoutUsingPOST } from '@/services/yuapi-backend/userController'; |
接口管理
找到access.ts,这是Ant Design Pro内置的一套权限管理机制
修改一下,取全局初始化状态(InitialState)的loginUser,根据当前登录用户判断它是否有管理员权限or用户权限。
1 | /** |
webstorm按[Ctrl+Shift+减号(-)]全局压缩一把代码块都折叠起来。
表格页
1 | import { addRule, removeRule, rule, updateRule } from '@/services/ant-design-pro/api'; |
1 | (params: U & { |
1 | request={async (params, sort: Record<string, SortOrder>, filter: Record<string, React.ReactText[] | null>) => { |
优化前端页面
比如:欢迎页、管理页.没用到的全部删掉。
先删掉路由,找到routes.ts修改路由。
1 | export default [ |
把接口管理页的目录名TableList改为InterfaceInfo
齿轮按钮可以设置各种样式,样式调完还能复制配置
复制配置后,粘贴到defaultSettings.ts
然后把app.tsx的initialState?.settings换成defaultSetting就可以生效了
实现新建功能
回到接口管理页,把配置改成修改,删掉订阅警报。
1 | <ModalForm |
1 | import { ModalForm, ProFormText, ProFormTextArea } from '@ant-design/pro-components'; |
1 | import type { ProColumns } from '@ant-design/pro-components'; |
1 | {/* 创建一个CreateModal组件,用于在点击新增按钮时弹出 */} |
1 | import { removeRule, updateRule } from '@/services/ant-design-pro/api'; |
1 | import type { RequestOptions } from '@@/plugin-request/request'; |
1 | import { |
模拟接口项目
项目名称:wgapi-interface
依赖:SpringWeb、Lombok、Spring Boot DevTools
提供三个不同种类的模拟接口:
- GET接口
- POST接口(url传参)
- POST接口(Restful)
新建model层:创建一个User类,在User类写一个用户名属性
1 |
|
新建controller层:新建NameController.java
1 | /** |
点击plication.properties,按[Shift+F6]重构成yml格式更精简一些
1 | server: |
在application.yml指定后端项目的端口号为8123,指定全局接口地址,加一个api前缀。
调用这个接口http:/localhost:8123/api/name/?name=wg
开发调用接口
调用接口的方式
HTTP调用方式:
- HttpClient
- RestTemplate
- 第三方库(OKHTTP、Hutool)
创建一个client层:客户端层,负责与用户交互、处理用户请求,以及调用服务端提供的API接口等任务的部分。
在client层新建一个客户端wgApiclient.java:负责调用第三方接口。
1 | import cn.hutool.http.HttpRequest; |
测试方法
1 | public class Main { |
API签名认证
需要accessKey和secretKey这和用户名和密码类似(区别:ak、sk是无状态的)
数据库user添加(已添加)
1 | 'accessKey' varchar(512) not null comment 'accessKey', |
wgApiclient.java中添加
1 | private String accessKey; |
按[AIt+Insert]创建构造方法
测试
1 |
|
wgapiinterface.client
1 | import cn.hutool.http.HttpRequest; |
开发SDK
Starter开发流程
创建新项目:wgapi-client-sdk;
依赖:Lombok、Spring Configuration Processor(帮助开发者自动生成配置的代码提示)
工具包:Hutool
删掉:maven构建项目的方式,我们现在是要构建依赖包,而不是直接运行jar包的项目。
1 | import lombok.Data; |
现在我们要给用户提供ApiClient,把yuapi-interface项目中的client包、modelf包、utils包复制
修改client包下的wgApiClient.java
1 | /** |
在resources目录下创建一个目录META-INF
spring.factories
1 | # spring boot starter |
上述配置项指定了要自动配置的类fun.wgfun.wgapiclientsdk.wgApiClientConfig,它是我们刚刚编写的配置类。
通过在spring.factories文件中配置我们的配置类,Spring Boot将会在应用启动时自动加载和实例化wgApiClientConfig,并将其应用于我们的应用程序中。
这样,我们就可以使用自动配置生成的wgApiClient对象,而无需手动创建和配置。
点击Lifecycle一install,把它安装为本地的依赖。
1 | <dependency> |
application.yml进行配置
1 | wgapi: |
测试方法
1 | // 表示这是一个基于Spring Boot的测试类 |
开发接口发布和下线功能
找到InterfacelnfoController.java,复制更新接口改成发布和下线。
1 | /** |
1 | /** |
前端开发
1 |








