Delen via


Azure-clientbibliotheken gebruiken voor JavaScript en TypeScript

Als u programmatisch toegang wilt krijgen tot uw Azure-services, gebruikt u de Azure-clientbibliotheken voor JavaScript. Deze bibliotheken hebben doorgaans het bereik @azure npm-pakketbereik dat is gepubliceerd door azure-sdk.

Verschillen tussen clientbibliotheken en REST API's

Gebruik de volgende informatie om te begrijpen wanneer u welk type toegang moet gebruiken.

  • De Azure-clientbibliotheken zijn de voorkeursmethode voor toegang tot uw Azure-service. Deze bibliotheken abstraheren de standaardcode die nodig is voor het beheren van CLOUDgebaseerde Azure-platform REST-aanvragen, zoals verificatie, nieuwe pogingen en logboekregistratie.
  • Azure REST API's zijn de voorkeursmethode als u:
    • Werken met preview-services waarvoor geen Azure-clientbibliotheken beschikbaar zijn. Houd rekening met uw code als preview, die moet worden bijgewerkt wanneer de service algemeen beschikbaar is met clientbibliotheken.
    • U wilt REST-aanroepen rechtstreeks uitvoeren omdat u niet wilt dat de hele SDK één REST API gebruikt of als u meer controle wilt over de HTTP-aanvragen.

Azure-client- en beheerbibliotheken

De azure-clientbibliotheekreleases zijn beschikbaar als:

  • Beheer: Met beheerbibliotheken kunt u Azure-resources maken en beheren. U kunt deze bibliotheken herkennen arm- op basis van hun pakketnamen. De term ARM geeft de Azure Resource Manager aan.
  • Client: Als er al een Azure-resource bestaat, gebruikt u de clientbibliotheken om deze te gebruiken en ermee te communiceren.
    • Elk pakket README.md bevat documentatie en voorbeelden.

Azure npm-pakketten installeren

Azure-clientbibliotheken zijn vrij beschikbaar via NPM. Installeer indien nodig afzonderlijke SDK's. Elke SDK biedt TypeScript-definities.

Voor client-/browsergebruik moeten Azure-clientbibliotheken worden toegevoegd aan uw bundelproces .

Azure npm-pakketvoorbeeldcode gebruiken

Elk pakket bevat documentatie waarmee u snel aan de slag kunt met het pakket. Raadpleeg de specifieke NPM-pakketten die u gebruikt voor meer informatie over het gebruik ervan.

Verificatiereferenties opgeven

Voor de Azure-clientbibliotheken zijn referenties vereist om te verifiëren bij het Azure-platform. Referentieklassen van @azure/identiteit bieden verschillende voordelen:

  • Snelle onboarding
  • Veiligste methode
  • Scheid het verificatiemechanisme van de code. Hierdoor kunt u dezelfde code lokaal en op het Azure-platform gebruiken, terwijl de referenties verschillen.
  • Voorzien in ketenverificatie, zodat verschillende mechanismen beschikbaar kunnen zijn.

Een SDK-client en -aanroepmethoden maken

Zodra u programmatisch een referentie hebt gemaakt, geeft u de referentie door aan uw Azure-client. De client vereist mogelijk aanvullende informatie, zoals een abonnements-id of service-eindpunt. Deze waarden zijn beschikbaar in Azure Portal voor uw resource.

In het volgende codevoorbeeld worden de DefaultAzureCredential en de arm abonnementsclientbibliotheek gebruikt om abonnementen weer te geven waartoe deze referentie toegang heeft.

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

Asynchrone paging van resultaten

Een SDK-methode kan een asynchrone iterator, PagedAsyncIterableIterableIterator, retourneren om asynchrone resultaten toe te staan. De resultaten kunnen paging- en vervolgtokens gebruiken om resultatensets op te splitsen.

In het volgende JavaScript-voorbeeld ziet u asynchrone paging. Met de code wordt een kunstmatig korte paginggrootte van 2 ingesteld om snel en visueel het proces te demonstreren wanneer u de voorbeeldcode uitvoert in foutopsporing.

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

Meer informatie over paging en iterators in Azure:

Langlopende bewerkingen

Een SDK-methode kan een onbewerktE LRO-reactie (Long Running Operation) retourneren. Dit antwoord bevat informatie, waaronder:

  • Uw aanvraag is voltooid
  • Uw aanvraag is nog in verwerking

In het volgende JavaScript-voorbeeld ziet u hoe u wacht totdat een LRO is voltooid, met .pollUntildone(), voordat u doorgaat.

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

Meer informatie over langdurige bewerkingen in Azure:

Asynchrone bewerkingen annuleren

Het pakket @azure/abort-controller biedt de klassen AbortController en AbortSignal. Gebruik de AbortController om een AbortSignal te maken, die vervolgens kan worden doorgegeven aan Azure SDK-bewerkingen om wachtend werk te annuleren. Azure SDK-bewerkingen kunnen het volgende zijn:

  • Afgebroken op basis van uw eigen logica
  • Afgebroken op basis van een time-outlimiet
  • Afgebroken op basis van het signaal van een bovenliggende taak
  • Afgebroken op basis van het signaal van een bovenliggende taak of een time-outlimiet

Meer informatie:

Uitgebreide logboekregistratie van de SDK

Wanneer u een Azure SDK gebruikt, kan het voorkomen dat u fouten in uw toepassing moet opsporen.

  • Als u logboekregistratie tijdens de build-tijd wilt inschakelen, stelt u de omgevingsvariabele AZURE_LOG_LEVEL in op info.

  • Als u logboekregistratie tijdens runtime wilt inschakelen, gebruikt u het pakket @azure/logger :

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

Bundeling

Meer informatie over bundeling met de Azure SDK:

Volgende stappen