用于 JavaScript 的 Azure Core HTTP 客户端库
这是Azure SDK JavaScript库的核心HTTP管道,在浏览器和Node.js中工作. 此库主要用于该库生成的代码 类型Spec @azure-tools/typespec-ts 发射器.
开始
所需资源
目前得到支持的环境
- 节点.js的LTS版本
- Safari,Chrome,Edge,和Firefox的最新版本.
看我们的 支助政策 更多细节.
安装
这个软件包主要用于生成的代码中,而无意被终端用户直接消耗.
关键概念
管道请求
A 类 PipelineRequest 描述向 HTTP REST 端点提出请求所需的所有信息.
管道响应
A 类 PipelineResponse 描述从 REST 端点返回的 HTTP 响应( body, headers, and status code) .
发送请求
A 类 SendRequest 方法是一种给予 PipelineRequest 能够同步返回 a PipelineResponse。 。 。 .
import { PipelineRequest, PipelineResponse } from "@azure/core-rest-pipeline";
type SendRequest = (request: PipelineRequest) => Promise<PipelineResponse>;
Http 客户端
一个 HttpClient 是满足以下接口以实施 SendRequest 方法 :
import { SendRequest } from "@azure/core-rest-pipeline";
interface HttpClient {
/**
* The method that makes the request and returns a response.
*/
sendRequest: SendRequest;
}
HttpClients 预计将将 HTTP 请求实际变成服务器端点,为此使用一些特定平台的机制.
管道政策
A 类 PipelinePolicy 是一个执行以下接口的简单对象:
import { PipelineRequest, SendRequest, PipelineResponse } from "@azure/core-rest-pipeline";
interface PipelinePolicy {
/**
* The policy name. Must be a unique string in the pipeline.
*/
name: string;
/**
* The main method to implement that manipulates a request/response.
* @param request - The request being performed.
* @param next - The next policy in the pipeline. Must be called to continue the pipeline.
*/
sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse>;
}
它的形状类似于 HttpClient,但包含一个政策名称以及略作修改 SendRequest 允许它有条件地调用管道中的下一个策略的签名.
人们可以认为政策的作用是: middleware,这个概念是NodeJS开发者所熟悉的,他们曾经与框架合作过,例如: 快递。 。 。 .
这个 sendRequest 执行既可以改变发出的请求,也可以改变收到的回复:
import { PipelineRequest, SendRequest, PipelineResponse } from "@azure/core-rest-pipeline";
const customPolicy = {
name: "My wonderful policy",
async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {
// Change the outgoing request by adding a new header
request.headers.set("X-Cool-Header", 42);
const result = await next(request);
if (result.status === 403) {
// Do something special if this policy sees Forbidden
}
return result;
},
};
大多数政策只涉及请求或答复,但有一些例外,如: 日志政策 其中记录了来自每个区域的信息.
管道
A 类 Pipeline 是管理一组 PipelinePolicy 对象。 其主要职能是确保政策以一致和可预测的顺序执行.
您可以想一想政策被像堆放(先入后出)一样应用。 第一个 PipelinePolicy 能够修改 PipelineRequest 在任何其他政策之前,它也是最后修改 PipelineResponse让它最接近呼叫者 最终政策是最后一个能够修改发出请求的,也是第一个处理响应的,使其最接近网络.
A 类 Pipeline 满足以下接口:
import {
PipelinePolicy,
AddPipelineOptions,
PipelinePhase,
HttpClient,
PipelineRequest,
PipelineResponse,
} from "@azure/core-rest-pipeline";
interface Pipeline {
addPolicy(policy: PipelinePolicy, options?: AddPipelineOptions): void;
removePolicy(options: { name?: string; phase?: PipelinePhase }): PipelinePolicy[];
sendRequest(httpClient: HttpClient, request: PipelineRequest): Promise<PipelineResponse>;
getOrderedPolicies(): PipelinePolicy[];
clone(): Pipeline;
}
正如你所看到的,它允许增加或删除政策,并且松散地与 HttpClient 以执行服务器端点的真实请求.
一个重要的概念 Pipelines) 将政策分为顺序阶段:
- 序列化阶段
- 未进入阶段的政策
- 取消序列化阶段
- 重试阶段
阶段按上述顺序进行,序列化政策首先被应用,再试政策最后被应用. 大多数海关政策都掉入了第二桶,没有获得相位名.
在管道中添加一个政策时,您不仅可以具体说明一个政策处于什么阶段,而且如果它有任何依赖性:
import { PipelinePhase } from "@azure/core-rest-pipeline";
interface AddPipelineOptions {
beforePolicies?: string[];
afterPolicies?: string[];
afterPhase?: PipelinePhase;
phase?: PipelinePhase;
}
beforePolicies 新政策必须执行的政策 afterPolicies 新的政策必须随后实施。 同样, afterPhase 表示策略必须在指定阶段发生后执行.
这种语法使习惯政策作者能够表达他们自己的政策与由下列机构提供的内在政策之间的任何必要关系: @azure/core-rest-pipeline 当创建使用管道时 createPipelineFromOptions。 。 。 .
执行者如果希望修改现有政策,也可以按名称或阶段删除政策 Pipeline 无需使用 createEmptyPipeline编辑 clone 方法在重新创建时特别有用 Pipeline 不修改原作.
在满足了所有其他限制之后,按增加的顺序实施政策.
实例
实例可见于 samples 文件夹.
今后的步骤
你可以在当地建立和运行测试 通过执行 npm run test。探索 test 查看高级用途和公开课行为的文件夹.
解决问题
如果你在使用图书馆时遇到问题 请随意 提交问题。 。 。 .
捐款
如果您想为图书馆捐钱 请读一下 贡献指南 学习如何构建和测试密码.