qiqi.http 外部 HTTP
qiqi.http 用于访问外部 HTTP/HTTPS 服务;访问 77hub 内部服务时,优先使用 Backend SDK。
部署限制
qiqi.http 目前仅本地化部署环境支持,其他部署形态暂不可用。
注意:
qiqi.http只支持http和httpsURL。
request(options)
通用请求方法,适合需要自定义 method、query、headers、body 或返回解析方式的场景。
const resp = await qiqi.http.request({
method: 'POST',
url: 'https://api.example.com/notify',
query: { objectId },
headers: {
Authorization: `Bearer ${token}`,
},
body: {
objectType,
objectId,
},
timeoutMs: 5000,
responseType: 'auto',
});
if (!resp.ok) {
return {
status: 'error',
message: `外部接口调用失败: ${resp.statusCode || resp.error?.code}`,
args: resp,
};
}
return { status: 'success', data: resp.data };
参数说明:
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
method | HTTP 方法,支持 GET、POST、PUT、PATCH、DELETE | string | GET |
url | 外部接口地址,只支持 http 和 https | string | 必填 |
query | URL query 参数 | object | - |
headers | 请求 header,可用于传递第三方接口需要的鉴权或业务 header | object | - |
body | 请求体;传入普通对象时会按 JSON 发送 | any | - |
timeoutMs | 请求超时时间,单位毫秒 | number | 默认超时 |
responseType | 返回解析方式:auto、json、text | string | auto |
返回值结构:
{
ok: true,
statusCode: 200,
statusText: 'OK',
headers: {},
data: {},
url: 'https://api.example.com/notify',
durationMs: 123
}
请求失败、超时或 HTTP 状态码不是 2xx 时,ok 为 false。其中普通 HTTP 非 2xx 响 应会保留接口返回的 statusCode、statusText、headers 和 data。
错误示例:
{
ok: false,
headers: {},
url: 'https://api.example.com/notify',
durationMs: 123,
error: {
code: 'ERR_EXTERNAL_HTTP_TIMEOUT',
message: 'External HTTP request timeout'
}
}
快捷方法
await qiqi.http.get(url, options);
await qiqi.http.post(url, body, options);
await qiqi.http.put(url, body, options);
await qiqi.http.patch(url, body, options);
await qiqi.http.delete(url, options);
快捷方法等价于调用 request:
get(url, options)post(url, body, options)put(url, body, options)patch(url, body, options)delete(url, options)
import 模式
脚本使用 import 写法时,也可以通过 @qiqi/http 使用同一套能力:
import http from '@qiqi/http';
import { get } from '@qiqi/http';
const resp1 = await http.get('https://api.example.com/ping');
const resp2 = await get('https://api.example.com/ping');
常见错误码
| 错误码 | 说明 |
|---|---|
ERR_EXTERNAL_HTTP_DISABLED | 当前不是受支持的本地化部署环境,或未启用外部 HTTP 能力 |
ERR_EXTERNAL_HTTP_INVALID_URL | URL 格式错误 |
ERR_EXTERNAL_HTTP_PROTOCOL_NOT_ALLOWED | 协议不是 http 或 https |
ERR_EXTERNAL_HTTP_INVALID_HEADER | 请求 header 不合法 |
ERR_EXTERNAL_HTTP_INVALID_BODY | 请求体无法序列化 |
ERR_EXTERNAL_HTTP_TIMEOUT | 请求超时 |
ERR_EXTERNAL_HTTP_REQUEST_TOO_LARGE | 请求体内容过大 |
ERR_EXTERNAL_HTTP_RESPONSE_TOO_LARGE | 响应内容过大 |
ERR_EXTERNAL_HTTP_TOO_MANY_REQUESTS | 当前脚本的外部 HTTP 并发过高 |
ERR_EXTERNAL_HTTP_NETWORK | 网络连接失败 |
ERR_EXTERNAL_HTTP_INVALID_JSON | 指定 JSON 解析但响应不是合法 JSON |
ERR_EXTERNAL_HTTP_REDIRECT | 重定向失败或重定向目标不允许访问 |
ERR_EXTERNAL_HTTP_UNSUPPORTED_METHOD | 请求方法不支持 |