HTTP_COMPARISON.md 3.5 KB

HTTP 请求封装对比

当前实现 vs JeecgBoot

✅ 已实现的核心功能

功能 JeecgBoot 当前实现 说明
请求拦截 添加通用请求头、处理参数
响应拦截 统一处理响应数据
错误处理 HTTP 状态码错误提示
超时控制 默认 30 秒超时
Cookie 认证 使用 Cookie 而非 Token
GET 防缓存 自动添加时间戳
API 前缀 统一添加 /sohoyw-som
消息提示 使用 Notification 组件

🔄 可选增强功能

以下是 JeecgBoot 中的高级功能,可根据需要添加:

1. 请求签名(MD5)

// JeecgBoot 实现
config.headers[ConfigEnum.TIMESTAMP] = signMd5Utils.getTimestamp();
config.headers[ConfigEnum.Sign] = signMd5Utils.getSign(config.url, config.params, config.data);

是否需要: 取决于后端是否要求签名验证

2. 多租户支持

// JeecgBoot 实现
config.headers[ConfigEnum.TENANT_ID] = tenantId;

是否需要: 如果系统支持多租户,需要添加

3. 请求取消(防重复)

// JeecgBoot 使用 axios 的 CancelToken
// 当前可以使用 AbortController 实现

是否需要: 防止用户快速点击导致重复请求

4. 流式数据支持

// JeecgBoot 支持 SSE 流式响应
config.responseType = 'stream';

是否需要: 如果有 AI 对话等流式场景

5. 文件下载增强

// JeecgBoot 支持下载进度、文件名提取等

是否需要: 如果有大文件下载需求

6. 请求重试

// 失败后自动重试
retryCount: 3,
retryDelay: 1000

是否需要: 提高网络不稳定时的成功率

7. 请求日志

// 记录所有请求到 errorLog store
errorLogStore.addAjaxErrorInfo(error);

是否需要: 用于问题排查和监控

建议

当前实现已足够的场景

  • ✅ 标准的 CRUD 操作
  • ✅ 基于 Cookie 的认证
  • ✅ 简单的错误提示
  • ✅ 文件上传下载

需要增强的场景

  • ❌ 需要请求签名验证
  • ❌ 多租户系统
  • ❌ 需要防止重复请求
  • ❌ 有流式数据需求
  • ❌ 需要详细的请求日志

快速增强方案

如果需要添加某个功能,可以参考以下步骤:

1. 添加请求签名

// src/utils/sign.ts
export function generateSign(url: string, params: any, data: any): string {
  // 实现签名逻辑
}

// src/utils/request.ts
config.headers['X-Sign'] = generateSign(url, params, data);
config.headers['X-Timestamp'] = Date.now();

2. 添加多租户

// src/utils/request.ts
const tenantId = getTenantId(); // 从 localStorage 或 context 获取
config.headers['X-Tenant-ID'] = tenantId;

3. 添加请求取消

// src/utils/request.ts
const pendingRequests = new Map<string, AbortController>();

// 在请求前检查并取消重复请求
const requestKey = `${method}:${url}`;
if (pendingRequests.has(requestKey)) {
  pendingRequests.get(requestKey)?.abort();
}

总结

当前的 request.ts 实现已经覆盖了大部分常用场景,代码简洁易维护。

建议:

  1. 先使用当前实现
  2. 根据实际需求逐步添加功能
  3. 避免过度设计,保持代码简洁

如果后端明确要求某些功能(如签名、租户ID),再添加对应的实现。