Compartir a través de


Biblioteca cliente HTTP de Azure Core para JavaScript: versión 1.18.0

Esta es la canalización HTTP principal para las bibliotecas de JavaScript del SDK de Azure que funcionan en el explorador y Node.js. Esta biblioteca está pensada principalmente para usarse en el código generado por autoRest y autorest.typescript.

Empezar

Requisitos

Entornos admitidos actualmente

Consulte nuestra de directiva de soporte técnico de para obtener más información.

Instalación

Este paquete se usa principalmente en el código generado y no está pensado para ser consumido directamente por los usuarios finales.

Conceptos clave

PipelineRequest

Un PipelineRequest describe toda la información necesaria para realizar una solicitud a un punto de conexión REST HTTP.

PipelineResponse

Un PipelineResponse describe la respuesta HTTP (cuerpo, encabezados y código de estado) de un punto de conexión REST que se devolvió después de realizar una solicitud HTTP.

SendRequest

Un método SendRequest es un método que dado un PipelineRequest puede devolver de forma asincrónica un PipelineResponse.

import { PipelineRequest, PipelineResponse } from "@azure/core-rest-pipeline";

type SendRequest = (request: PipelineRequest) => Promise<PipelineResponse>;

HttpClient

Un HttpClient es cualquier objeto que cumpla la siguiente interfaz para implementar un método SendRequest:

import { SendRequest } from "@azure/core-rest-pipeline";

interface HttpClient {
  /**
   * The method that makes the request and returns a response.
   */
  sendRequest: SendRequest;
}

se espera que HttpClientrealice realmente la solicitud HTTP a un punto de conexión de servidor, mediante algún mecanismo específico de la plataforma para hacerlo.

Directivas de canalización

Un PipelinePolicy es un objeto simple que implementa la siguiente interfaz:

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

Es similar en forma a HttpClient, pero incluye un nombre de directiva, así como una firma SendRequest ligeramente modificada que le permite llamar condicionalmente a la siguiente directiva de la canalización.

Una puede ver el rol de las directivas como la de middleware, un concepto que es familiar para los desarrolladores de NodeJS que han trabajado con marcos como Express.

La implementación de sendRequest puede transformar la solicitud saliente, así como la respuesta entrante:

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

La mayoría de las directivas solo se preocupan por la solicitud o la respuesta, pero hay algunas excepciones, como la LogPolicy que registra información de cada una.

Tuberías

Un Pipeline es un objeto que administra un conjunto de objetos PipelinePolicy. Su función principal es asegurarse de que las directivas se ejecutan en un orden coherente y predecible.

Puede pensar en las directivas que se aplican como una pila (primera entrada y última salida). El primer PipelinePolicy es capaz de modificar el PipelineRequest antes de cualquier otra directiva, y también es el último en modificar el PipelineResponse, lo que lo convierte en el más cercano al autor de la llamada. La directiva final es la última capaz de modificar la solicitud saliente y la primera para controlar la respuesta, lo que lo convierte en el más cercano a la red.

Un Pipeline satisface la siguiente interfaz:

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

Como puede ver, permite agregar o quitar directivas y se acopla de forma flexible con HttpClient para realizar la solicitud real al punto de conexión del servidor.

Un concepto importante de Pipelinees que agrupan directivas en fases ordenadas:

  1. Fase de serialización
  2. Directivas que no están en una fase
  3. Fase de deserialización
  4. Fase de reintento

Las fases se producen en el orden anterior, con las directivas de serialización que se aplican primero y las directivas de reintento se aplican en último lugar. La mayoría de las directivas personalizadas se dividen en el segundo cubo y no se les asigna un nombre de fase.

Al agregar una directiva a la canalización, puede especificar no solo en qué fase está una directiva, sino también si tiene dependencias:

import { PipelinePhase } from "@azure/core-rest-pipeline";

interface AddPipelineOptions {
  beforePolicies?: string[];
  afterPolicies?: string[];
  afterPhase?: PipelinePhase;
  phase?: PipelinePhase;
}

beforePolicies son directivas que la nueva directiva debe ejecutarse antes y afterPolicies son directivas que la nueva directiva debe producirse después. Del mismo modo, afterPhase significa que la directiva solo debe ejecutarse después de que se haya producido la fase especificada.

Esta sintaxis permite a los autores de directivas personalizadas expresar las relaciones necesarias entre sus propias directivas y las directivas integradas proporcionadas por @azure/core-rest-pipeline al crear una canalización mediante createPipelineFromOptions.

Los implementadores también pueden quitar directivas por nombre o fase, en caso de que deseen modificar una Pipeline existente sin tener que crear una nueva mediante createEmptyPipeline. El método clone es especialmente útil al volver a crear un Pipeline sin modificar el original.

Una vez que se han cumplido todas las demás restricciones, las directivas se aplican en el orden en que se agregaron.

Ejemplos

Puede encontrar ejemplos en la carpeta samples.

Pasos siguientes

Puede compilar y ejecutar las pruebas localmente ejecutando rushx test. Explore la carpeta test para ver el uso avanzado y el comportamiento de las clases públicas.

Solución de problemas

Si tiene problemas al usar esta biblioteca, no dude en presentar un problema.

Contribuyendo

Si desea contribuir a esta biblioteca, lea la guía de contribución de para obtener más información sobre cómo compilar y probar el código.

impresiones