# request.ts **路径**:`src/api/request.ts` ## 功能用途 HTTP 请求基础封装,提供 `get` 和 `post` 方法,支持自定义请求头(如鉴权 `x-token`、`x-user-id`)。所有 API 模块均通过此文件发起请求。 ## 核心能力 - 统一 BASE_URL:默认 `https://api.xtrader.vip`,可通过环境变量 `VITE_API_BASE_URL` 覆盖 - CLOB WebSocket URL:`getClobWsUrl()` 返回与 REST API 同源的 `ws(s)://host/clob/ws` - User WebSocket URL:`getUserWsUrl()` 返回 `ws(s)://host/clob/ws/user`(订单/持仓/余额推送) - GET 请求:支持 query 参数,自动序列化 - POST 请求:支持 JSON body - 自定义 headers:通过 `RequestConfig.headers` 传入 - **Accept-Language**:所有 GET/POST 请求自动附带标准 `Accept-Language` 头,值为当前 vue-i18n 的 `locale`(如 `zh-CN`、`en`),可在 `config.headers` 中覆盖 ## 使用方式 ```typescript import { get, post, getClobWsUrl, getUserWsUrl } from '@/api/request' // CLOB WebSocket URL(与 REST 同源) const clobWsUrl = getClobWsUrl() // User WebSocket URL(订单/持仓/余额推送,需带 token 参数) const userWsUrl = getUserWsUrl() // GET 请求 const data = await get('/path', { page: 1, keyword: 'x' }) // 带鉴权 const data = await get('/path', undefined, { headers: { 'x-token': token, 'x-user-id': userId }, }) // POST 请求 const res = await post('/path', { key: 'value' }, { headers: { 'x-token': token }, }) ``` ## 扩展方式 1. **添加 PUT/DELETE**:仿照 `get`/`post` 实现 `put`、`del` 函数 2. **统一错误处理**:在 `get`/`post` 内对 `!res.ok` 做统一 toast 或错误上报 3. **请求/响应拦截**:在 fetch 前后加入拦截逻辑(如 loading、日志) 4. **超时控制**:使用 `AbortController` 实现超时取消