将项目中所有使用 connect 函数的 API 请求抽象和复用到统一的 API 服务层中,提高代码的可维护性和一致性。
src/services/
├── api.ts # 主要的 API 服务文件
└── types.ts # API 相关的类型定义
- 定义了所有 API 请求和响应的类型接口
- 包含分页参数、创建/更新参数、响应数据结构等
- 创建了三个主要的 API 服务模块:
userApi: 用户相关 APImindMapApi: 思维导图相关 APIpublicApi: 公共分享相关 API
getCurrentUser(): 获取当前用户信息logout(): 用户登出getProfile(): 获取用户配置信息updateProfile(): 更新用户配置信息getDesktopToken(): 获取桌面登录token
getMapList(): 获取思维导图列表createMap(): 创建新的思维导图getMap(): 获取特定思维导图updateMap(): 更新思维导图deleteMap(): 删除思维导图
getPublicMapList(): 获取公共思维导图列表getPublicMap(): 获取特定公共思维导图
src/providers/UserProvider.tsxsrc/components/CreateButton.tsx
src/app/[locale]/list/[type]/page.tsxsrc/app/[locale]/edit/[id]/page.tsxsrc/app/[locale]/profile/page.tsxsrc/app/[locale]/app-login/page.tsx
src/app/[locale]/share/[id]/hooks/useSharePage.ts
- 所有 API 调用都通过统一的服务层进行
- 统一的错误处理和响应格式
- 类型安全的 API 调用
- API 逻辑集中管理,易于修改和扩展
- 清晰的接口定义,便于理解和使用
- 减少重复代码,提高代码复用性
- 更好的 TypeScript 支持和智能提示
- 统一的 API 调用方式,降低学习成本
- 便于进行单元测试和 Mock
- 新增 API 只需在服务层添加,无需修改多个文件
- 便于添加缓存、重试、拦截器等功能
- 支持不同环境的 API 配置
import { api } from '@/services/api'// 用户相关
const user = await api.user.getCurrentUser()
await api.user.logout()
// 思维导图相关
const maps = await api.mindMap.getMapList({ page: 1, pageSize: 20 })
const newMap = await api.mindMap.createMap({ name: 'New Map' })
// 公共分享相关
const publicMaps = await api.public.getPublicMapList({ page: 1, pageSize: 20 })- 错误处理: 添加统一的错误处理机制
- 缓存策略: 实现 API 响应缓存
- 重试机制: 添加网络请求重试功能
- Loading 状态: 统一管理 API 调用的 loading 状态
- Mock 数据: 为开发和测试提供 Mock API 服务
- API 调用分散在各个组件中
- 直接使用
connect函数 - 缺乏统一的类型定义
- 重复的错误处理逻辑
- 统一的 API 服务层
- 类型安全的 API 调用
- 集中的错误处理
- 更好的代码组织和可维护性
通过这次重构,我们成功地将所有 API 调用抽象到了统一的服务层中,大大提高了代码的可维护性和一致性。新的 API 服务层不仅提供了更好的类型安全,还为未来的功能扩展奠定了良好的基础。