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
- versiones ltS de Node.js
- Versiones más recientes de Safari, Chrome, Edge y Firefox.
Consulte nuestra de directiva de soporte técnico de
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 HttpClient
realice 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 Pipeline
es que agrupan directivas en fases ordenadas:
- Fase de serialización
- Directivas que no están en una fase
- Fase de deserialización
- 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.
Azure SDK for JavaScript