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. Vanligtvis är dessa SDK:er begränsade med det @azure npm-paketomfånget som publicerats av azure-sdk.
Skillnader mellan SDK:er och REST-API:er
Använd följande information för att förstå när du ska använda vilken typ av åtkomstmekanism.
- Azure SDK:er är den bästa metoden för att komma åt din Azure-tjänst. Azure SDK:er abstraherar bort den standardkod 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örhandsversionstjänster som inte har tillgängliga Azure SDK:er. Tänk på din kod som förhandsversion, som bör uppdateras när tjänsten är allmänt tillgänglig med SDK:er.
- 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
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 känna igen dessa bibliotek med
@azure/arm-
i 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 innehåller 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 innehåller TypeScript-definitioner.
För klient-/webbläsaranvändning måste Azure SDK:er läggas till i din paketeringsprocess .
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 SDK:er 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ålla 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 Azure SDK:s 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-portalen för din resurs.
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:
Nästa steg
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för