Bagikan melalui


Menggunakan pustaka klien Azure untuk JavaScript dan TypeScript

Untuk mengakses layanan Azure Anda secara terprogram, gunakan pustaka klien Azure untuk JavaScript. Biasanya, pustaka ini dilingkup dengan cakupan paket npm @azure yang diterbitkan oleh microsoft1es.

Perbedaan antara pustaka klien dan REST API

Gunakan informasi berikut untuk memahami kapan harus menggunakan jenis akses mana.

  • Pustaka klien Azure adalah metode yang lebih disukai untuk mengakses layanan Azure Anda. Pustaka ini mengabstraksi kode boilerplate yang diperlukan untuk mengelola permintaan REST platform Azure berbasis cloud seperti autentikasi, percobaan ulang, dan pengelogan.
  • AZURE REST API adalah metode yang disukai jika Anda:
    • Bekerja dengan layanan pratinjau yang tidak memiliki pustaka klien Azure yang tersedia. Pertimbangkan kode Anda sebagai pratinjau, yang harus diperbarui ketika layanan sudah tersedia secara umum dengan perpustakaan klien.
    • Ingin melakukan panggilan REST secara langsung karena Anda tidak ingin seluruh SDK menggunakan SATU REST API atau Anda ingin kontrol yang lebih dalam atas permintaan HTTP.

Pustaka klien dan manajemen Azure

Pustaka klien Azure rilis tersedia sebagai:

  • Management: Pustaka manajemen memungkinkan Anda membuat dan mengelola sumber daya Azure. Anda dapat mengenali pustaka ini dengan arm- dalam nama paketnya. Istilah arm menunjukkan Azure Resource Manager.
  • Client: Mengingat sumber daya Azure sudah ada, gunakan pustaka klien untuk menggunakannya dan berinteraksi dengannya.
    • Setiap paket README.md mencakup dokumentasi dan sampel.

Menginstal paket Azure npm

Pustaka klien Azure dapat diakses secara gratis dari NPM dan Yarn. Instal SDK individual sesuai kebutuhan. Setiap SDK menyediakan definisi TypeScript.

Untuk penggunaan klien/browser, pustaka klien Azure perlu ditambahkan ke proses bundling Anda.

Menggunakan kode sampel paket Azure npm

Setiap paket menyertakan dokumentasi berupa panduan untuk memulai penggunaan paket dengan cepat. Lihat dokumentasi paket tertentu yang Anda gunakan untuk mempelajari cara menggunakannya.

Berikan kredensial autentikasi

Pustaka klien Azure memerlukan kredensial untuk mengautentikasi ke platform Azure. Kelas kredensial yang disediakan oleh @azure/identitas memberikan beberapa manfaat:

  • Onboarding cepat
  • Metode paling aman
  • Pisahkan mekanisme autentikasi dari kode. Ini memungkinkan Anda untuk menggunakan kode yang sama secara lokal dan di platform Azure sementara kredensialnya berbeda.
  • Berikan autentikasi berantai sehingga beberapa mekanisme dapat tersedia.

Membuat klien SDK dan metode panggilan

Setelah Anda membuat kredensial secara terprogram, teruskan kredensial ke klien Azure Anda. Klien mungkin memerlukan informasi tambahan seperti ID langganan atau titik akhir layanan. Nilai-nilai ini tersedia di portal Microsoft Azure, untuk sumber daya Anda.

Contoh kode berikut menggunakan DefaultAzureCredential dan pustaka klien langganan arm untuk mencantumkan langganan yang dapat diakses oleh kredensial ini.

const {
  ClientSecretCredential,
  DefaultAzureCredential,
} = require("@azure/identity");
const { SubscriptionClient } = require("@azure/arm-subscriptions");
require("dotenv").config();

let credentials = null;

const tenantId = process.env["AZURE_TENANT_ID"];
const clientId = process.env["AZURE_CLIENT_ID"];
const secret = process.env["AZURE_CLIENT_SECRET"];

if (process.env.NODE_ENV && process.env.NODE_ENV === "production") {
  // production
  credentials = new DefaultAzureCredential();
} else {
  // development
  if (tenantId && clientId && secret) {
    console.log("development");
    credentials = new ClientSecretCredential(tenantId, clientId, secret);
  } else {
    credentials = new DefaultAzureCredential();
  }
}

async function listSubscriptions() {
  try {
    // use credential to authenticate with Azure SDKs
    const client = new SubscriptionClient(credentials);

    // get details of each subscription
    for await (const item of client.subscriptions.list()) {
      const subscriptionDetails = await client.subscriptions.get(
        item.subscriptionId
      );
      /* 
        Each item looks like:
      
        {
          id: '/subscriptions/123456',
          subscriptionId: '123456',
          displayName: 'YOUR-SUBSCRIPTION-NAME',
          state: 'Enabled',
          subscriptionPolicies: {
            locationPlacementId: 'Internal_2014-09-01',
            quotaId: 'Internal_2014-09-01',
            spendingLimit: 'Off'
          },
          authorizationSource: 'RoleBased'
        },
    */
      console.log(subscriptionDetails);
    }
  } catch (err) {
    console.error(JSON.stringify(err));
  }
}

listSubscriptions()
  .then(() => {
    console.log("done");
  })
  .catch((ex) => {
    console.log(ex);
  });

Pemanggilan hasil secara asinkron

Metode SDK dapat mengembalikan iterator asinkron, PagedAsyncIterableIterator, untuk memungkinkan hasil asinkron. Hasilnya dapat menggunakan halaman dan token kelanjutan untuk memecah set hasil.

Contoh JavaScript berikut menunjukkan halaman asinkron. Kode menetapkan ukuran halaman pendek buatan 2 untuk mendemonstrasikan proses dengan cepat dan visual saat Anda menjalankan kode sampel dalam debug.

const { BlobServiceClient } = require("@azure/storage-blob");

const blobAccountConnectionString = "REPLACE-WITH-YOUR-STORAGE-CONNECTION-STRING";
const blobAccountContainerName = "REPLACE-WITH-YOUR-STORAGE-CONTAINER-NAME";

const pageSize = 2;

const list = async () => {

  console.log(`List`);

  let continuationToken = "";
  let currentPage = 1;
  let containerClient=null;
  let currentItem = 1;

  // Get Blob Container - need to have items in container before running this code
  const blobServiceClient = BlobServiceClient.fromConnectionString(blobAccountConnectionString);
  containerClient = blobServiceClient.getContainerClient(blobAccountContainerName);

  do {

    // Get Page of Blobs
    iterator = (continuationToken != "") 
      ? containerClient.listBlobsFlat().byPage({ maxPageSize: pageSize, continuationToken }) 
      : containerClient.listBlobsFlat().byPage({ maxPageSize: pageSize });
    
    page = (await iterator.next()).value;

    // Display list
    if (page.segment?.blobItems) {
      console.log(`\tPage [${currentPage}] `);
      for (const blob of page.segment.blobItems) {
        console.log(`\t\tItem [${currentItem++}] ${blob.name}`);
      }
    };

    // Move to next page
    continuationToken = page.continuationToken;
    if (continuationToken) {
      currentPage++;
    }

  } while (continuationToken != "")
}

list(() => {
  console.log("done");
}).catch((ex) =>
  console.log(ex)
);

Pelajari selengkapnya tentang penomoran halaman dan iterator di Azure:

Operasi yang berlangsung lama

Metode SDK dapat mengembalikan operasi jangka panjang (LRO) respons mentah. Respons ini mencakup informasi termasuk:

  • Permintaan Anda selesai
  • Permintaan Anda masih dalam proses

Contoh JavaScript berikut menunjukkan cara menunggu LRO selesai, dengan .pollUntildone(), sebelum melanjutkan.

const { BlobServiceClient } = require("@azure/storage-blob");

const blobAccountConnectionString = "REPLACE-WITH-YOUR-STORAGE-CONNECTION-STRING";
const blobAccountContainerName = `test-${Date.now().toString()}`;

const files = [
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/README.md",
    "fileName": "README.md"
  },
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/gulpfile.ts",
    "fileName": "gulpfile.ts"
  },
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/rush.json",
    "fileName": "rush.json"
  },  
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/package.json",
    "fileName": "package.json"
  },
  {
    "url": "https://github.com/Azure/azure-sdk-for-js/blob/main/tsdoc.json",
    "fileName": "tsdoc.json"
  },
];

const upload = async() => {

  // get container client
  const blobServiceClient = BlobServiceClient.fromConnectionString(blobAccountConnectionString);

  // get container's directory client
  const containerClient = blobServiceClient.getContainerClient(blobAccountContainerName);

  files.forEach(async(file) =>{
    await (

      await containerClient
        .getBlobClient(file.fileName)
        .beginCopyFromURL(file.url)
  
    ).pollUntilDone();
  })
}

upload(() => {
  console.log("done");
}).catch((ex) =>
  console.log(ex)
);

Pelajari selengkapnya tentang operasi jangka panjang di Azure:

Membatalkan operasi asinkron

Paket @azure/abort-controller menyediakan kelas AbortController dan AbortSignal. Gunakan AbortController untuk membuat AbortSignal, yang kemudian dapat diteruskan ke operasi Azure SDK untuk membatalkan pekerjaan yang tertunda. Operasi Azure SDK dapat berupa:

  • Dibatalkan berdasarkan logika Anda sendiri
  • Dibatalkan karena batas waktu habis
  • Dibatalkan berdasarkan sinyal tugas induk
  • Dibatalkan berdasarkan sinyal tugas induk atau batas waktu habis

Pelajari lebih lanjut:

Pengelogan verbose dari SDK

Saat Anda menggunakan Azure SDK, mungkin ada kalanya Anda perlu men-debug aplikasi Anda.

  • Untuk mengaktifkan pencatatan log saat build-time , atur variabel lingkungan AZURE_LOG_LEVEL ke info.

  • Untuk mengaktifkan pencatatan log saat run-time, gunakan paket @azure/logger:

    import { setLogLevel } from "@azure/logger";
    
    setLogLevel("info");
    

Bundling

Pelajari tentang bundling dengan Azure SDK:

Langkah berikutnya