跳到主要内容

qiqi.http 外部 HTTP

qiqi.http 用于访问外部 HTTP/HTTPS 服务;访问 77hub 内部服务时,优先使用 Backend SDK

部署限制

qiqi.http 目前仅本地化部署环境支持,其他部署形态暂不可用。

注意:qiqi.http 只支持 httphttps URL。

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 };

参数说明:

参数说明类型默认值
methodHTTP 方法,支持 GETPOSTPUTPATCHDELETEstringGET
url外部接口地址,只支持 httphttpsstring必填
queryURL query 参数object-
headers请求 header,可用于传递第三方接口需要的鉴权或业务 headerobject-
body请求体;传入普通对象时会按 JSON 发送any-
timeoutMs请求超时时间,单位毫秒number默认超时
responseType返回解析方式:autojsontextstringauto

返回值结构:

{
ok: true,
statusCode: 200,
statusText: 'OK',
headers: {},
data: {},
url: 'https://api.example.com/notify',
durationMs: 123
}

请求失败、超时或 HTTP 状态码不是 2xx 时,okfalse。其中普通 HTTP 非 2xx 响应会保留接口返回的 statusCodestatusTextheadersdata

错误示例:

{
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_URLURL 格式错误
ERR_EXTERNAL_HTTP_PROTOCOL_NOT_ALLOWED协议不是 httphttps
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请求方法不支持