Använda Azure-klientbibliotek för JavaScript och TypeScript
Om du vill komma åt dina Azure-tjänster programmatiskt använder du Azure-klientbiblioteken för JavaScript. Vanligtvis är dessa bibliotek begränsade med det @azure npm-paketomfånget som publicerats av azure-sdk.
Skillnader mellan klientbibliotek och REST-API:er
Använd följande information för att förstå när du ska använda vilken typ av åtkomst.
- Azure-klientbiblioteken är den bästa metoden för att komma åt din Azure-tjänst. Dessa bibliotek abstraherar bort den exempelkod som krävs för att hantera molnbaserade REST-begäranden för Azure-plattformen, till exempel autentisering, återförsök och loggning.
- Azure REST-API:er är den bästa metoden om du är:
- Arbeta med förhandsgranskningstjänster som inte har tillgängliga Azure-klientbibliotek. Tänk på din kod som förhandsversion, som bör uppdateras när tjänsten är allmänt tillgänglig med klientbibliotek.
- Vill du göra REST-anrop direkt eftersom du inte vill att hela SDK:n ska använda ett enda REST-API eller om du vill ha djupare kontroll över HTTP-begäranden.
Azure-klient- och hanteringsbibliotek
Versioner av Azure-klientbiblioteket är tillgängliga som:
- Hantering: Med hanteringsbibliotek kan du skapa och hantera Azure-resurser. Du kan känna igen dessa bibliotek med
arm-
i deras paketnamn. Termen ARM anger Azure Resource Manager. - Klient: Med tanke på att det redan finns en Azure-resurs använder du klientbiblioteken för att använda den och interagera med den.
- Varje paket README.md innehåller dokumentation och exempel.
Installera Azure npm-paket
Azure-klientbibliotek är fritt tillgängliga från NPM. Installera enskilda SDK:er efter behov. Varje SDK innehåller TypeScript-definitioner.
För klient-/webbläsaranvändning måste Azure-klientbibliotek läggas till i paketeringsprocessen.
Använda Azure npm-paketexempelkod
Varje paket innehåller dokumentation för att snabbt komma igång med paketet. Se de specifika NPM-paket som du använder för att lära dig hur du använder dem.
Ange autentiseringsuppgifter
Azure-klientbiblioteken kräver autentiseringsuppgifter för att autentisera till Azure-plattformen. Autentiseringsklasser som tillhandahålls av @azure/identitet ger flera fördelar:
- Snabb registrering
- Säkraste metoden
- Separera autentiseringsmekanismen från koden. På så sätt kan du använda samma kod lokalt och på Azure-plattformen medan autentiseringsuppgifterna skiljer sig åt.
- Tillhandahåll länkad autentisering så att flera mekanismer kan vara tillgängliga.
Skapa en SDK-klient och anropsmetoder
När du har skapat en autentiseringsuppgift programmatiskt skickar du autentiseringsuppgifterna till Din Azure-klient. Klienten kan kräva ytterligare information, till exempel ett prenumerations-ID eller en tjänstslutpunkt. Dessa värden är tillgängliga i Azure-portalen för din resurs.
I följande kodexempel används StandardAzureCredential och prenumerationsklientbiblioteket arm
för att lista prenumerationer som den här autentiseringsuppgiften har åtkomst till att läsa.
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);
});
Asynkron växling av resultat
En SDK-metod kan returnera en asynkron iterator, PagedAsyncIterableIterator, för att tillåta asynkrona resultat. Resultaten kan använda växlings- och fortsättningstoken för att dela upp resultatuppsättningar.
Följande JavaScript-exempel visar asynkron växling. Koden anger en artificiellt kort växlingsstorlek på 2 för att snabbt och visuellt demonstrera processen när du kör exempelkoden i felsökningen.
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)
);
Läs mer om växling och iteratorer i Azure:
Långvariga åtgärder
En SDK-metod kan returnera ett LRO-svar (long running operation). Det här svaret innehåller information som:
- Din begäran har slutförts
- Din begäran pågår fortfarande
Följande JavaScript-exempel visar hur du väntar på att en LRO ska slutföras, med .pollUntildone()
, innan du fortsätter.
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)
);
Läs mer om tidskrävande åtgärder i Azure:
Avbryta asynkrona åtgärder
Paketet @azure/abort-controller tillhandahåller klasser för AbortController och AbortSignal. Använd AbortController för att skapa en AbortSignal, som sedan kan skickas till Azure SDK-åtgärder för att avbryta väntande arbete. Azure SDK-åtgärder kan vara:
- Avbröts baserat på din egen logik
- Avbröts baserat på en tidsgräns
- Avbröts baserat på en överordnad uppgifts signal
- Avbröts baserat på en överordnad aktivitets signal eller en tidsgräns
Läs mer:
Utförlig loggning från SDK
När du använder en Azure SDK kan det finnas tillfällen då du behöver felsöka ditt program.
Om du vill aktivera loggning vid byggtiden anger du miljövariabeln AZURE_LOG_LEVEL till
info
.Om du vill aktivera loggning vid körning använder du paketet @azure/logger :
import { setLogLevel } from "@azure/logger"; setLogLevel("info");
Kombinationserbjudanden
Lär dig mer om paketering med Azure SDK: