Použití sad Azure SDK pro JavaScript a TypeScript

K programovému přístupu ke službám Azure použijte sady Azure SDK pro JavaScript. Tyto sady SDK jsou obvykle vymezeny s rozsahem balíčku @azure npm publikovaným pomocí Azure-SDK.

Rozdíly mezi sadami SDK a rozhraními REST API

Následující tabulka vám pomůže pochopit, kdy použít daný typ mechanismu přístupu.

Sady Azure SDK (doporučeno) Rozhraní REST API platformy Azure
Azure SDK jsou upřednostňovanou metodou přístupu ke službě Azure. Sady Azure SDK si vyříznout často používaný kód potřebný ke správě cloudových požadavků REST Azure, jako je ověřování, opakování a protokolování. Rozhraní Azure REST API jsou upřednostňovanou metodou, pokud jste:
  • Pracuje se službami ve verzi Preview, které nemají dostupné sady Azure SDK. Svůj kód zvažte jako ve verzi Preview, který by se měl aktualizovat, pokud je služba všeobecně dostupná pro sady SDK.
  • Chcete volat rozhraní REST přímo, protože nechcete, aby celá sada SDK používala jeden REST API, nebo chcete mít větší kontrolu nad požadavky HTTP.

Klientské a knihovny pro správu Azure

Vydání sady Azure SDK jsou k dispozici jako:

  • Sady SDK pro správu: knihovny pro správu umožňují zřizovat a spravovat prostředky Azure prostřednictvím Azure Resource Manager (ARM). Tyto knihovny můžete rozpoznat @azure/arm- v jejich názvech balíčků.
  • Klientské sady SDK: vzhledem k tomu, že už existuje prostředek Azure, použijete klientské knihovny k jeho využívání a interakci s ním.
    • Každý balíček README.md obsahuje dokumentaci a ukázky.

Nainstalovat balíčky Azure npm

Sady Azure SDK jsou volně dostupné z npm. Nainstalujte jednotlivé sady SDK. Každá sada SDK poskytuje definice TypeScript.

V případě použití klienta nebo prohlížeče je nutné do procesu sdružování přidat sady Azure SDK.

Použití ukázkového kódu pro balíček Azure npm

Každý balíček obsahuje dokumentaci, která vám umožní rychle začít s balíčkem. Podívejte se na konkrétní NPM balíčky, které používáte, a Naučte se je používat.

Zadat přihlašovací údaje pro ověřování

Sady Azure SDK vyžadují přihlašovací údaje pro ověření na platformě Azure. Třídy přihlašovacích údajů poskytované @azure/identity poskytují několik výhod:

  • Rychlé zprovoznění
  • Nejbezpečnější způsob
  • Oddělte mechanismus ověřování od kódu. To vám umožní používat stejný kód místně a na platformě Azure, když se přihlašovací údaje liší.
  • Poskytněte zřetězené ověřování, aby mohlo být k dispozici několik mechanismů.

Vytvoření klienta sady SDK a volání metod

Po programovém vytvoření přihlašovacích údajů předejte přihlašovací údaje klientovi Azure SDK. Klient může vyžadovat další informace, jako je ID předplatného nebo adresa URL služby. Tyto hodnoty jsou k dispozici v Azure Portal pro váš prostředek.

Vypíše odběry, ke kterým má toto pověření přístup.

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

let credentials = null;

const tenantId = process.env["AZURE_TENANT_ID"] || "REPLACE-WITH-YOUR-TENANT-ID"; 
const clientId = process.env["AZURE_CLIENT_ID"] || "REPLACE-WITH-YOUR-CLIENT-ID"; 
const secret = process.env["AZURE_CLIENT_SECRET"] || "REPLACE-WITH-YOUR-CLIENT-SECRET";


if(process.env.production){

  // production
  credentials = new DefaultAzureCredential();

}else{

  // development
  credentials = new ClientSecretCredential(tenantId, clientId, secret);
  console.log("development");
}

// use credential to authenticate with Azure SDKs
let client = new SubscriptionClient(credentials);

const subscriptions = async() =>{

  // get list of Azure subscriptions
  const listOfSubscriptions = await client.subscriptions.list();
  
  // get details of each subscription
  for (const item of listOfSubscriptions) {
  
      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)
  }
}

subscriptions()
.then(()=>console.log("done"))
.catch(ex=>console.log(ex))

Asynchronní stránkování výsledků

Metoda sady SDK může vracet asynchronní iterátory, PagedAsyncIterableIterator, aby bylo možné použít asynchronní výsledky. Výsledky mohou použít stránkování a pokračování tokeny k rozdělení sad výsledků.

Následující příklad JavaScriptu ukazuje asynchronní stránkování. Kód nastaví umělou velikost stránkovacího souboru 2, aby rychle a vizuálně ukázala proces při spuštění ukázkového kódu v ladění.

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

Další informace o stránkování a iterátorech v Azure:

Dlouhotrvající operace

Metoda sady SDK může vrátit odpověďs dlouhou dobou provozu (LRO). Tato odpověď zahrnuje informace, včetně:

  • Vaše žádost se dokončila.
  • Vaše žádost se pořád zpracovává.

Následující příklad JavaScriptu ukazuje, jak počkat na dokončení LRO, s před pokračováním.

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

Další informace o dlouhodobě běžících operacích v Azure:

Rušení asynchronních operací

Balíček @azure/Abort-Controller poskytuje třídy AbortController a AbortSignal. Pomocí AbortController vytvořte AbortSignal, které se pak dají předat operacím Azure SDK a zrušit tak probíhající práci. Operace Azure SDK můžou být:

  • Přerušeno na základě vlastní logiky
  • Přerušeno na základě časového limitu
  • Přerušeno na základě signálu nadřazené úlohy
  • Přerušeno na základě signálu nadřazené úlohy nebo časového limitu

Další informace:

Podrobné protokolování z SDK

Pokud používáte sadu Azure SDK, může nastat situace, kdy potřebujete ladit aplikaci.

  • Chcete-li povolit protokolování v době sestavení, nastavte proměnnou prostředí AZURE_LOG_LEVEL na .

  • Pokud chcete povolit protokolování v době běhu, použijte balíček @azure/Logger :

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

Sdružování

Další informace o sdružování pomocí sady Azure SDK:

Další kroky