Använda Azure-SDK:er för JavaScript och TypeScript
Om du vill komma åt dina Azure-tjänster programmatiskt använder du Azure-SDK:er för JavaScript. Dessa SDK:er är vanligtvis begränsade till @azure npm-paketomfånget som publiceras av azure-sdk.
Skillnader mellan API:er och REST-API:er
Använd följande tabell för att förstå när du ska använda vilken typ av åtkomstmekanism.
| Azure-SDK:er (rekommenderas) | REST API:er för Azure |
|---|---|
| Azure-SDK:erna är den bästa metoden för att komma åt din Azure-tjänst. Azure-SDK:erna 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:
|
Azure-klient- och hanteringsbibliotek
Azure SDK-versionerna är tillgängliga som:
- Hanterings-SDK:er:Med hanteringsbibliotek kan du etablera och hantera Azure-resurser via Azure Resource Manager (ARM). Du kan identifiera dessa bibliotek med
@azure/arm-hjälp av deras paketnamn. - Klient-SDK:er:Eftersom det redan finns en Azure-resurs använder du klientbiblioteken för att använda den och interagera med den.
- Varje paket README.md dokumentation och exempel.
Installera Azure npm-paket
Azure-SDK:er är fritt tillgängliga från NPM. Installera enskilda SDK:er som behövs. Varje SDK tillhandahåller TypeScript-definitioner.
För klient-/webbläsaranvändning måste Azure-SDK:er läggas till i paketeringsprocessen.
Använda Exempelkod för Azure npm-paket
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-SDK:erna kräver autentiseringsuppgifter för att autentisera till Azure-plattformen. Autentiseringsklasser som tillhandahålls av @azure/identitet ger flera fördelar:
- Snabb registrering
- Den 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ålla länkad autentisering så att flera mekanismer kan vara tillgängliga
Skapa en SDK-klient och anropa metoder
När du har skapat en autentiseringsidentifiering programmatiskt skickar du autentiseringssuppgifter till Din Azure SDK-klient. Klienten kan kräva ytterligare information, till exempel ett prenumerations-ID eller en tjänst-URL. Dessa värden är tillgängliga i Azure Portal för din resurs.
Lista prenumerationer som den här autentiseringsbehörigheten har åtkomst till att läsa.
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))
Asynkron sidinnumrering av resultat
En SDK-metod kan returnera en asynkron iterator, PagedAsyncIterableIterator,för att möjliggöra 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 sidinnumrering 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 , 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 långvariga åtgärder i Azure:
Avbryta asynkrona åtgärder
Paketet @azure/abort-controller innehåller klasserna 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 uppgifts 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 när du behöver felsöka ditt program.
Om du vill aktivera loggning vid byggtidenanger du AZURE_LOG_LEVEL miljövariabeln till .
Om du vill aktivera loggning vidkörning använder du @azure-/logger-paketet:
import { setLogLevel } from "@azure/logger"; setLogLevel("info");
Kombinationserbjudanden
Lär dig mer om paketering med Azure SDK: