Files
npm-tool/.qoder/repowiki/zh/content/API 参考手册/HTTP 请求 API.md

14 KiB
Raw Permalink Blame History

HTTP 请求 API

**本文引用的文件** - [TsHttpUtil.js](file://src/https/TsHttpUtil.js) - [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js) - [TsCrypto.js](file://src/utils/TsCrypto.js) - [TsStorage.js](file://src/utils/TsStorage.js) - [TsCommon.js](file://src/utils/TsCommon.js) - [TsSM4.js](file://src/utils/TsSM4.js) - [index.js](file://index.js) - [package.json](file://package.json) - [README.md](file://README.md)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件为 HTTP 请求模块的完整 API 参考文档聚焦于四个核心方法req、get、post、form。内容涵盖

  • 方法签名与参数类型url、params、data、options
  • 返回值结构与错误处理
  • 请求前缀处理、参数自动转换分页器、equals、加密开关
  • 响应处理、状态码映射与异常情况说明
  • 与全局配置的集成方式与自定义选项
  • 实际使用场景示例GET 查询、POST 提交、表单上传)

项目结构

该模块以“工具类 + HTTP 封装”的方式组织,核心入口通过 index.js 暴露统一导出HTTP 请求封装位于 src/https/TsHttpUtil.js配合全局配置、存储、通用工具与加解密实现。

graph TB
subgraph "入口与导出"
IDX["index.js"]
end
subgraph "HTTP 封装层"
HTTP["TsHttpUtil.js<br/>req/get/post/form"]
end
subgraph "配置与存储"
CFG["TsGlobalConfig.js<br/>setConfig/getConfig"]
STO["TsStorage.js<br/>getUserToken/saveEncryptBody/getEncryptBody"]
end
subgraph "通用与加解密"
COM["TsCommon.js<br/>isEmpty/parseJSON 等"]
CRY["TsCrypto.js<br/>encrypt/decrypt"]
SM4["TsSM4.js<br/>SM4 实现"]
end
IDX --> HTTP
HTTP --> CFG
HTTP --> STO
HTTP --> COM
HTTP --> CRY
CRY --> SM4

图表来源

章节来源

核心组件

  • HTTP 封装与请求调度req、get、post、form
  • 全局配置setConfig/getConfig支持 prefix、onHttpError、httpParams、base64Key 等
  • 存储与加密开关getUserToken、saveEncryptBody/getEncryptBody
  • 通用工具isEmpty、parseJSON 等
  • 加解密:基于 SM4 的 TsCrypto内部使用 TsSM4

章节来源

架构总览

下图展示了从调用到响应的整体流程,包括请求前缀拼接、参数转换、加密开关、响应解密与错误处理。

sequenceDiagram
participant Caller as "调用方"
participant Http as "TsHttpUtil.req"
participant Ext as "umi-request.extend"
participant Cfg as "TsGlobalConfig"
participant Sto as "TsStorage"
participant Cph as "TsCrypto"
participant Com as "TsCommon"
Caller->>Http : "调用 req(url, options)"
Http->>Cfg : "读取 prefix/onHttpError/httpParams/base64Key"
Http->>Http : "拼接前缀 url = prefix + url"
Http->>Http : "dealParamsBody(params/data/equals/pagination)"
Http->>Sto : "读取 token"
Http->>Ext : "request(url, {headers : {token}, ...})"
Ext-->>Http : "Promise.then(res)"
Http->>Http : "根据 rawResponse/encrypt 判定"
Http->>Cph : "若 encrypt 则 decrypt 并 parseJSON"
Http-->>Caller : "resolve({data, recordsTotal}) 或 reject(res)"
Ext-->>Http : "Promise.catch(err)"
Http-->>Caller : "reject({code, message})"

图表来源

详细组件分析

方法概览与签名

  • req(url, options)
    • 参数
      • url: 字符串,可带查询参数
      • options: 对象,支持 method、params、data、headers、rawResponse、requestType 等
    • 返回
      • Promise成功解析为 {data, recordsTotal};失败解析为 {code, message}
  • get(url, params = {}, options = {})
    • 参数
      • url: 字符串
      • params: 查询参数对象
      • options: 自定义选项
    • 返回
      • Promise成功解析为 {data, recordsTotal}
  • post(url, data = {}, options = {})
    • 参数
      • url: 字符串
      • data: 请求体对象
      • options: 自定义选项
    • 返回
      • Promise成功解析为 {data, recordsTotal}
  • form(url, data = {}, options = {})
    • 参数
      • url: 字符串
      • data: 表单数据
      • options: 自定义选项requestType 默认为 form
    • 返回
      • Promise成功解析为 {data, recordsTotal}

章节来源

请求前缀处理

  • 支持字符串或函数形式的 prefix
  • 若 prefix 为函数,则以 url 作为入参计算前缀
  • 最终拼接为 prefix + url

章节来源

参数自动转换

  • 分页器转换
    • 将 options.params.pagination 转换为 pageSize 和 pageNum并删除 pagination
  • equals 转换
    • 将 options.params.equals 对象转为逗号分隔的键值对字符串
  • 额外参数注入
    • GET 请求:合并 GlobalConfig.httpParams 返回的对象到 params
    • 非 GET 且非 form合并 GlobalConfig.httpParams 返回的对象到 data
  • 加密开关
    • 当 Storage.getEncryptBody() 为真时,将 data 包裹为 {encryptData: 加密结果},否则按原样透传

章节来源

加密与解密

  • 加密
    • 使用 TsCrypto.encrypt 对 data 进行 SM4 加密ECB 模式),密钥来自 GlobalConfig.base64Key
  • 解密
    • 若响应标记为加密res.encrypt则使用 TsCrypto.decrypt 解密,并尝试 parseJSON
  • 密钥
    • base64Key 来源于 GlobalConfig初始化时转换为字节数组

章节来源

响应处理与错误映射

  • 成功路径
    • 当 res.code === 200 时,提取 data若 res.encrypt 为真,执行解密与 parseJSON
    • 返回 {data, recordsTotal}
  • 失败路径
    • 调用 GlobalConfig.onHttpError(res),并 reject(res)
  • 异常路径
    • Promise.catch 捕获后,返回 {code: status, message: error}

章节来源

请求头与认证

  • 自动注入 token
    • 从 Storage.getUserToken() 读取并写入 headers.token
  • 默认行为
    • credentials: include携带 cookie
    • requestType: json用于 form 提交)

章节来源

API 定义与使用示例

req(url, options)

  • 功能:发起通用请求,支持 GET/POST 等方法与自定义选项
  • 关键点
    • 自动拼接前缀、参数转换、加密开关、响应解密
    • 支持 rawResponse 直接返回原始响应
  • 示例(路径)

章节来源

get(url, params, options)

  • 功能:发起 GET 请求
  • 关键点
    • 自动合并 GlobalConfig.httpParams 到 params
    • 支持 equals 与 pagination 转换
  • 示例(路径)

章节来源

post(url, data, options)

  • 功能:发起 POST 请求JSON
  • 关键点
    • 非 form 时合并 GlobalConfig.httpParams 到 data
    • 可启用加密开关
  • 示例(路径)

章节来源

form(url, data, options)

  • 功能发起表单提交POST
  • 关键点
    • requestType 设为 form适合上传文件或表单数据
  • 示例(路径)

章节来源

错误处理与状态码映射

  • 内置状态码映射codeMessage
    • 200、201、202、204、400、401、403、404、406、410、422、500、502、503、504
  • errorHandler
    • 统一捕获 umi-request 抛出的错误,返回 {code, message}
  • onHttpError
    • 在非 200 时触发,便于业务侧统一处理

章节来源

与全局配置的集成

  • setConfig(obj)
    • 合并 window.httpConfig 与默认配置
    • 支持字段prefix、onHttpError、httpParams、base64Key
  • getConfig()
    • 返回当前配置对象

章节来源

自定义选项与扩展

  • options 支持
    • method、params、data、headers、rawResponse、requestType
  • 与 Storage 的交互
    • 读取/设置 token、加密开关
  • 与 Common 的交互
    • isEmpty、parseJSON 等工具

章节来源

依赖关系分析

graph LR
A["TsHttpUtil.js"] --> B["TsGlobalConfig.js"]
A --> C["TsStorage.js"]
A --> D["TsCommon.js"]
A --> E["TsCrypto.js"]
E --> F["TsSM4.js"]
G["index.js"] --> A

图表来源

章节来源

性能考量

  • 参数转换与加密
    • equals 与 pagination 转换为 O(n) 操作,通常开销较小
    • 加密/解密涉及 SM4 计算,建议仅在必要时开启加密开关
  • 请求头与 cookies
    • credentials: include 会携带 Cookie注意跨域与安全策略
  • 响应处理
    • 解密与 parseJSON 仅在 res.encrypt 为真时执行,避免不必要的 CPU 开销

故障排查指南

  • 常见问题
    • 未设置 tokenheaders.token 为空,可能导致鉴权失败
    • 加密开关未生效:确认 Storage.getEncryptBody() 返回 true
    • 前缀无效prefix 为函数时需确保返回有效字符串
    • 参数未合并GlobalConfig.httpParams 必须返回对象
  • 排查步骤
    • 打印 options 与最终请求 URL确认前缀拼接正确
    • 检查 params/data 是否经过 equals/pagination 转换
    • 观察响应是否包含 encrypt 字段,确认解密逻辑是否执行
    • 使用 rawResponse 查看原始响应,定位业务错误码与消息

章节来源

结论

本模块提供了简洁一致的 HTTP 请求抽象,具备以下特性:

  • 统一的请求前缀、参数转换与加密开关
  • 明确的成功/失败响应结构与错误映射
  • 与全局配置、存储、通用工具与加解密的深度集成
  • 适用于 GET 查询、POST 提交与表单上传等多种场景

附录

API 完整签名与参数说明

  • req(url, options)
    • url: 字符串
    • options.method: GET/POST 等
    • options.params: 查询参数对象
    • options.data: 请求体对象
    • options.headers: 自定义头部
    • options.rawResponse: 是否返回原始响应
    • options.requestType: json/form
  • get(url, params = {}, options = {})
    • params: 查询参数对象(支持 equals、pagination
  • post(url, data = {}, options = {})
    • data: 请求体对象(支持 httpParams 注入与加密)
  • form(url, data = {}, options = {})
    • data: 表单数据requestType 默认为 form

章节来源

使用示例(路径)