Axios 大型反应
一个Axios拦截器,设计用来处理大型响应. 默认情况下, 它假设您的后端使用 @epilot/large-response-middleware如本报告所述 大型响应-中型软件然而,它也支持自定义回调功能,从参考数据、自定义参考属性名称、信头和其他选项中获取大型有效载荷。 详情见下文.
它支持每个请求选项, 这样您就可以启用/ 禁用特定请求的截取器( 轴配置命名空间是 ) axios-large-response - 请检查一下 使用量 详细情况请参见该节)。 目前,它默认是被禁用,然而,我们可以根据使用情况进行一些组合,例如,我们可以在全球范围禁用它,并在需要时按请求允许.
拦截器是 默认禁用,所以你需要明确启用它.
安装
pnpm add @epilot/axios-large-response
npm install @epilot/axios-large-response
yarn add @epilot/axios-large-response
使用量
import { axiosLargeResponse } from '@epilot/axios-large-response';
import axios from 'axios';
// Axios instance
const axiosInstance = axios.create();
// Example 1: disable interceptor globally so we enable it per-request
axiosLargeResponse(axiosInstance, {
// enabled: false, -> disabled by default
// ... other global options
});
...
const response = await axiosInstance.get('https://api.example.com/data', {
'axios-large-response': {
enabled: true,
headerFlag: 'application/custom-large-response.vnd+json',
refProperty: '$customRef',
debug: true,
onFetchLargePayloadFromRef: async (refUrl) => {
// Custom handling for this specific request
const response = await axios.get(refUrl);
return response.data;
}
}
});
// Example 2: enable interceptor globally so we disable it per-request
axiosLargeResponse(axiosInstance, {
enabled: true,
// ... other global options
});
...
const response = await axiosInstance.get('https://api.example.com/data', {
'axios-large-response': {
enabled: false
}
});
不通过轴线发送的客户(withLargeResponse(中文(简体) )
截取器只运行通过轴适配器的请求. 配置有自身跑跑器的客户端绕过适配器,因此拦截器从未看到过这些请求- 运输有效载荷限制的响应以一个 413。最常见的案例是服务对服务电话,通过AWS Lambda 调用,与 openapi-client-axios' registerRunner。 。 。 .
withLargeResponse 包裹这样的跑者,并给予它与拦截器相同的行为:
import { withLargeResponse } from '@epilot/axios-large-response';
import { getLambdaRunner } from 'openapi-lambda-adapter';
client.api.registerRunner(
withLargeResponse(getLambdaRunner(lambdaName, context), {
enabled: true,
// ... same options as the interceptor
}),
);
跑者在结构上被描述 任何带有 runRequest(request, ...rest) 方法,其第一个参数是具有条件的物体,因此,它与AWS Lambda或任何特定的运输不相连。 HTTP 客户端,在流程中调用和测试将全部工作双倍,以及后继参数(例如 openapi-client-axios' operation 财务报告和审定财务报表 context)经过未受侵犯. 一揽子计划除此之外无依赖性 axios 由此而来.
每个请求选项在截取器上一样工作:设置在 axios-large-response 在请求中键,并且它们取代了全球性的。 在请求到达跑道之前 钥匙被剥了.
client.getThings({}, null, {
'axios-large-response': { onFetchLargePayloadFromRef: myAuthenticatedFetch },
});
enabled 因此,上面例1的组合 -- -- 全球禁用,只允许需要的呼号 -- -- 也能对跑者起作用:
client.api.registerRunner(withLargeResponse(getLambdaRunner(lambdaName, context)));
...
client.getThings({}, null, {
'axios-large-response': { enabled: true },
});
一个音符:
- 被包裹的跑者保留了原作原型并拥有自有属性. 这一点很重要:
openapi-client-axios引用注册跑道作为runner.runRequest(request, operation, runner.context),羊肉跑者读取目标函数名context分类实例保留其方法和身份,以及runRequest保持与原始的绑定, 所以一个方法读取this还行 而不是重建它.
选项
| 名称 | 类型 | 默认 | 说明 |
|---|---|---|---|
| 启用 | 布尔 | 虚假 | 启用/ 禁用截取器 |
| 页眉旗 | 字符串 | “ 应用/ 大响应. vnd+json ” | 表示大型有效载荷参考响应的内容类型标题 |
| 财产 | 字符串 | “$活口量 ref” | 在回复中包含引用 URL 的属性名称 |
| 调试 | 布尔 | 虚假 | 启用调试日志 |
| 日志 | 对象 | 控制台 | 有调试、出错和警告方法的锁定对象 |
| 从参考文献中提取的 | 函数 | 获取参考 URL并返回全部有效载荷 | 回调函数从参考 URL 获取全部有效载荷 |
| 错误 | 未知/ 任意 | 未定义 | 如果找不到参考 URL 或出错, 返回错误的有效载荷 - 这将在响应数据中返回, 而不是丢出错误 。 除 undefined 计数为配置的, falsy 的(null, (中文(简体) ), 0, (中文(简体) ), '', (中文(简体) ), false列入 |
| 禁用警告 | 布尔 | 虚假 | 禁用警告, 仅在选项中全球可用 |
为调试目的,您也可以设置 AXIOS_INTERCEPTOR_LARGE_RESPONSE_DEBUG 环境变量改为 true 或者说 1 以启用调试日志.
如何运作
- 在请求中添加表示大有效载荷支持的适当接受信头;
- 检测带有所配置标题内容类型的响应;
- 如果答复中包含指定的参考物,则自动取出全部有效载荷;
- 返回回复中的完整数据.
大型有效载荷的服务器响应示例:
{
"$payload_ref": "https://api.example.com/large-payloads/123"
}
在拦截器处理后,反应变为:
{
"huge": "data",
"nested": {
"complex": "structure"
}
}