Verwenden der Azure SDKs für JavaScript und TypeScript
Verwenden Sie die Azure SDKs für JavaScript, um programmgesteuert auf Ihre Azure-Dienste zuzugreifen. In der Regel werden diese SDKs auf den @azure npm-Paketbereich festgelegt, der von azure-sdk veröffentlicht wurde.
Unterschiede zwischen SDKs und REST-APIs
Verwenden Sie die folgenden Informationen, um zu verstehen, wann welche Art von Zugriffsmechanismus verwendet werden soll.
- Die Azure SDKs sind die bevorzugte Methode für den Zugriff auf Ihren Azure-Dienst. Die Azure SDKs abstrahieren die Codebausteine, die zum Verwalten cloudbasierter REST-Anforderungen (etwa Authentifizierung, Wiederholungen und Protokollierung) der Azure-Plattform erforderlich sind.
- Azure REST-APIs sind die bevorzugte Methode, wenn Sie:
- Sie arbeiten mit Vorschaudiensten, für die keine Azure SDKs verfügbar sind. Betrachten Sie Ihren Code als Vorschauversion, die aktualisiert werden sollte, wenn der Dienst allgemein mit SDKs verfügbar ist.
- Sie möchten REST-Aufrufe direkt durchführen, da Sie nicht möchten, dass das gesamte SDK eine einzelne REST-API verwendet, oder Sie möchten genauere Kontrolle über die HTTP-Anforderungen.
Client- und Verwaltungsbibliotheken von Azure
Die Azure SDK-Releases sind verfügbar als:
- Verwaltungs-SDKs: Verwaltungsbibliotheken ermöglichen Ihnen die Bereitstellung und Verwaltung von Azure-Ressourcen über Azure Resource Manager (ARM). Diese Bibliotheken erkennen Sie anhand von
@azure/arm-
im jeweiligen Paketnamen. - Client-SDKs: Wenn bereits eine Azure-Ressource vorhanden ist, verwenden Sie die Clientbibliotheken, um sie zu nutzen und mit ihr zu interagieren.
- Jede Paketdatei vom Typ „README.md“ enthält eine Dokumentation und Beispiele.
Installieren von Azure-npm-Paketen
Azure SDKs sind kostenlos über NPM verfügbar. Installieren Sie die einzelnen erforderlichen SDKs. Jedes SDK stellt TypeScript-Definitionen bereit.
Für die Client-/Browsernutzung müssen Ihrem Bündelungsprozess Azure SDKs hinzugefügt werden.
Verwenden des Beispielcodes aus Azure-npm-Paketen
Jedes Paket enthält eine Dokumentation, die Ihnen schnell erste Schritte mit dem Paket ermöglicht. Informationen zur Verwendung finden Sie in den jeweiligen von Ihnen verwendeten NPM-Paketen.
Angeben von Anmeldeinformationen für die Authentifizierung
Die Azure SDKs erfordern Anmeldeinformationen für die Authentifizierung bei der Azure-Plattform. Anmeldeinformationsklassen , die von @azure/Identität bereitgestellt werden, bieten mehrere Vorteile:
- Schnelles Onboarding
- Sicherste Methode
- Trennen des Authentifizierungsmechanismus vom Code. Dadurch können Sie denselben Code lokal und auf der Azure-Plattform verwenden, obwohl sich die Anmeldeinformationen unterscheiden.
- Bereitstellen einer verketteten Authentifizierung, sodass mehrere Mechanismen zur Verfügung stehen können
Erstellen eines SDK-Clients und Aufrufen von Methoden
Nachdem Sie programmgesteuert Anmeldeinformationen erstellt haben, übergeben Sie die Anmeldeinformationen an den Client Ihres Azure SDK. Der Client benötigt möglicherweise zusätzliche Informationen, z. B. eine Abonnement-ID oder Dienst-URL. Diese Werte sind im Azure-Portal für Ihre Ressource verfügbar.
Listen Sie Abonnements auf, für die diese Anmeldeinformationen Lesezugriff haben:
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);
});
Asynchrones Auslagern von Ergebnissen
Eine SDK-Methode kann einen asynchronen Iterator (PagedAsyncIterableIterator) zurückgeben, um asynchrone Ergebnisse zu ermöglichen. Die Ergebnisse können Auslagerungs- und Fortsetzungstoken verwenden, um Resultsets aufzuteilen.
Im folgenden JavaScript-Beispiel wird die asynchrone Auslagerung veranschaulicht. Der Code legt eine künstlich kurze Auslagerungsgröße von 2 fest, um den Prozess schnell und visuell zu veranschaulichen, wenn Sie den Beispielcode beim Debuggen ausführen.
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)
);
Erfahren Sie mehr über Auslagerung und Iteratoren in Azure:
Vorgänge mit langer Ausführung
Eine SDK-Methode kann eine Antwort vom Typ „Zeitintensiver Vorgang“ (Long Running Operation, LRO) zurückgeben. Diese Antwort enthält u. a. folgende Informationen:
- Ihre Anforderung ist abgeschlossen.
- Ihre Anforderung wird noch verarbeitet.
Im folgenden JavaScript-Beispiel wird veranschaulicht, wie Sie mit .pollUntildone()
auf den Abschluss eines LRO warten, bevor Sie fortfahren:
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)
);
Weitere Informationen zu zeitintensiven Vorgängen in Azure finden Sie unter folgendem Link:
Abbrechen asynchroner Vorgänge
Das @azure/abort-controller-Paket stellt AbortController- und AbortSignal-Klassen bereit. Verwenden Sie AbortController, um ein Abbruchsignal (AbortSignal) zu erstellen, das dann an Azure SDK-Vorgänge übergeben werden kann, um ausstehende Aufgaben abzubrechen. Beispiele für Azure SDK-Vorgänge:
- Basierend auf Ihrer eigenen Logik abgebrochen
- Basierend auf einem Timeoutgrenzwert abgebrochen
- Basierend auf dem Signal einer übergeordneten Aufgabe abgebrochen
- Basierend auf dem Signal einer übergeordneten Aufgabe oder basierend auf einem Timeoutgrenzwert abgebrochen
Weitere Informationen:
Ausführliche Protokollierung über das SDK
Wenn Sie ein Azure SDK verwenden, kann es vorkommen, dass Sie Ihre Anwendung debuggen müssen.
Wenn Sie die Protokollierung zur Buildzeit aktivieren möchten, legen Sie die Umgebungsvariable AZURE_LOG_LEVEL auf
info
fest.Um die Protokollierung zur Laufzeit zu aktivieren, verwenden Sie das @azure/Logger-Paket :
import { setLogLevel } from "@azure/logger"; setLogLevel("info");
Bündelung
Erfahren Sie mehr über die Bündelung mit dem Azure SDK:
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für