Bagikan melalui


Pustaka klien HTTP Azure Core untuk JavaScript - versi 1.22.2

Ini adalah alur HTTP inti untuk pustaka JavaScript Azure SDK yang berfungsi di browser dan Node.js. Pustaka ini terutama dimaksudkan untuk digunakan dalam kode yang dihasilkan oleh AutoRest dan autorest.typescript.

Persiapan

Persyaratan

Lingkungan yang saat ini didukung

Lihat kebijakan dukungan kami untuk detail selengkapnya.

Instalasi

Paket ini terutama digunakan dalam kode yang dihasilkan dan tidak dimaksudkan untuk digunakan langsung oleh pengguna akhir.

Konsep utama

Permintaan Alur

PipelineRequest menjelaskan semua informasi yang diperlukan untuk membuat permintaan ke titik akhir HTTP REST.

Respons Alur

PipelineResponse menjelaskan respons HTTP (isi, header, dan kode status) dari titik akhir REST yang dikembalikan setelah membuat permintaan HTTP.

Kirim Permintaan

Metode SendRequest adalah metode yang diberikan PipelineRequest dapat secara asinkron mengembalikan PipelineResponse.

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

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

Klien Http

HttpClient adalah objek apa pun yang memenuhi antarmuka berikut untuk menerapkan metode SendRequest:

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

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

HttpClientdiharapkan untuk benar-benar membuat permintaan HTTP ke titik akhir server, menggunakan beberapa mekanisme khusus platform untuk melakukannya.

Kebijakan Alur

PipelinePolicy adalah objek sederhana yang mengimplementasikan antarmuka berikut:

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

Bentuknya mirip dengan HttpClient, tetapi menyertakan nama kebijakan serta tanda tangan SendRequest yang sedikit dimodifikasi yang memungkinkannya untuk secara kondisional memanggil kebijakan berikutnya dalam alur.

Seseorang dapat melihat peran kebijakan seperti middleware, konsep yang akrab dengan pengembang NodeJS yang telah bekerja dengan kerangka kerja seperti Express.

Implementasi sendRequest dapat mengubah permintaan keluar serta respons masuk:

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

Sebagian besar kebijakan hanya menyangkut diri mereka sendiri dengan permintaan atau respons, tetapi ada beberapa pengecualian seperti LogPolicy yang mencatat informasi dari masing-masing.

Pipa

Pipeline adalah objek yang mengelola sekumpulan objek PipelinePolicy. Fungsi utamanya adalah memastikan bahwa kebijakan dijalankan dalam urutan yang konsisten dan dapat diprediksi.

Anda dapat memikirkan kebijakan yang diterapkan seperti tumpukan (first-in/last-out.) PipelinePolicy pertama dapat memodifikasi PipelineRequest sebelum kebijakan lain, dan juga yang terakhir untuk memodifikasi PipelineResponse, menjadikannya yang paling dekat dengan pemanggil. Kebijakan akhir adalah yang terakhir dapat memodifikasi permintaan keluar, dan yang pertama menangani respons, menjadikannya yang paling dekat dengan jaringan.

Pipeline memenuhi antarmuka berikut:

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

Seperti yang Anda lihat memungkinkan kebijakan ditambahkan atau dihapus dan digabungkan secara longgar dengan HttpClient untuk melakukan permintaan nyata ke titik akhir server.

Salah satu konsep penting untuk Pipelineadalah mereka mengelompokkan kebijakan ke dalam fase yang diurutkan:

  1. Fase Serialisasi
  2. Kebijakan tidak dalam fase
  3. Fase Deserialisasi
  4. Fase Coba Lagi

Fase terjadi dalam urutan di atas, dengan kebijakan serialisasi diterapkan terlebih dahulu dan kebijakan coba lagi diterapkan terakhir. Sebagian besar kebijakan kustom termasuk dalam wadah kedua dan tidak diberi nama fase.

Saat menambahkan kebijakan ke alur, Anda dapat menentukan tidak hanya fase apa kebijakan berada, tetapi juga jika memiliki dependensi:

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

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

beforePolicies adalah kebijakan yang harus dijalankan kebijakan baru sebelum dan afterPolicies adalah kebijakan yang harus terjadi setelah kebijakan baru. Demikian pula, afterPhase berarti kebijakan hanya boleh dijalankan setelah fase yang ditentukan terjadi.

Sintaks ini memungkinkan penulis kebijakan kustom untuk mengekspresikan hubungan yang diperlukan antara kebijakan mereka sendiri dan kebijakan bawaan yang disediakan oleh @azure/core-rest-pipeline saat membuat alur menggunakan createPipelineFromOptions.

Pelaksana juga dapat menghapus kebijakan berdasarkan nama atau fase, jika mereka ingin memodifikasi Pipeline yang ada tanpa harus membuat yang baru menggunakan createEmptyPipeline. Metode clone sangat berguna saat membuat ulang Pipeline tanpa memodifikasi yang asli.

Setelah semua batasan lainnya terpenuhi, kebijakan diterapkan dalam urutan penambahannya.

Contoh

Contoh dapat ditemukan di folder samples.

Langkah berikutnya

Anda dapat membangun dan menjalankan pengujian secara lokal dengan menjalankan npm run test. Jelajahi folder test untuk melihat penggunaan dan perilaku tingkat lanjut kelas publik.

Pemecahan masalah

Jika Anda mengalami masalah saat menggunakan pustaka ini, jangan ragu untuk mengajukan masalah.

Berkontribusi

Jika Anda ingin berkontribusi pada pustaka ini, baca panduan berkontribusi untuk mempelajari selengkapnya tentang cara membuat dan menguji kode.