JavaScript ve TypeScript için Azure SDK'larını kullanma
Azure hizmetlerinize program aracılığıyla erişmek için JavaScript için Azure SDK'larını kullanın. Genellikle, bu SDK'ların kapsamı azure-sdk @azure npm paket kapsamıyla birliktedir.
SDK'lar ile REST API'leri arasındaki farklar
Hangi erişim mekanizması türünün ne zaman kullanılacalarını anlamak için aşağıdaki tabloyu kullanın.
| Azure SDK'ları (önerilir) | Azure REST API'leri |
|---|---|
| Azure hizmetinize erişmek için tercih edilen yöntem Azure SDK'larıdır. Azure SDK'ları kimlik doğrulaması, yeniden denemeler ve günlüğe kaydetme gibi bulut tabanlı Azure platformu REST isteklerini yönetmek için gereken ortak kodu soyutlar. | Aşağıdakiler için tercih edilen yöntem Azure REST API'leridir:
|
Azure istemci ve yönetim kitaplıkları
Azure SDK sürümü şu şekilde kullanılabilir:
- Yönetim SDK'leri:Yönetim kitaplıkları, Azure kaynaklarını azure kaynakları (ARM) Azure Resource Manager ve yönetmenize olanak sağlar. Bu kitaplıkları paket
@azure/arm-adlarında tanıyabilirsiniz. - İstemci SDK'leri:Bir Azure kaynağı zaten mevcut olduğu için istemci kitaplıklarını kullanarak onu kullanabilir ve kaynakla etkileşim kurabilirsiniz.
- Her paket README.md ve örnekler içerir.
Azure npm paketlerini yükleme
Azure SDK'ları NPM'den ücretsiz olarak kullanılabilir. Gereken tek tek SDK'ları yükleyin. Her SDK TypeScript tanımları sağlar.
İstemci/tarayıcı kullanımı için, Azure SDK'ların işlem için biriktirma işleminize ekleniyor olması gerekir.
Azure npm paketi örnek kodunu kullanma
Her paket, paketi hızlı bir şekilde çalışmaya başlamaya yardımcı olacak belgeler içerir. Bunları nasıl kullanabileceğiniz hakkında bilgi edinmek için belirli NPM paketlerine bakın.
Kimlik doğrulaması kimlik bilgilerini sağlama
Azure SDK'ları, Azure platformunda kimlik doğrulaması yapmak için kimlik bilgileri gerektirir. Kimlik/kimlik tarafından @azure kimlik bilgisi sınıfları çeşitli avantajlar sağlar:
- Hızlı ekleme
- En güvenli yöntem
- Kimlik doğrulama mekanizmasını koddan ayırma. Bu, kimlik bilgileri farklıyken aynı kodu yerel olarak ve Azure platformunda kullanmana olanak sağlar.
- Çeşitli mekanizmaların kullanılabilir olması için zincirleme kimlik doğrulaması sağlama
SDK istemcisi ve çağrı yöntemleri oluşturma
Program aracılığıyla bir kimlik bilgisi oluşturdukta, kimlik bilgilerini Azure SDK'nizin istemcisine geçirin. İstemci için abonelik kimliği veya hizmet URL'si gibi ek bilgiler gerekli olabilir. Bu değerler kaynağınız için Azure portal içinde kullanılabilir.
Bu kimlik bilgilerinin okuma erişimi olan abonelikleri listele.
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))
Sonuçların zaman uyumsuz olarak disk belleği
Bir SDK yöntemi, zaman uyumsuz sonuçlara izin vermek için PagedAsyncIterableIteratorzaman uyumsuz yineleyicisi ile sonuçlanabilir. Sonuçlar, sonuç kümelerini bozmak için disk belleği ve devamlılık belirteçleri kullanabilir.
Aşağıdaki JavaScript örneği zaman uyumsuz disk belleğini gösteriyor. Kod, hata ayıklamada örnek kodu çalıştırarak işlemi hızlı ve görsel olarak göstermek için 2 yapay olarak kısa bir disk belleği boyutu ayarlar.
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)
);
Azure'da sayfalama ve iteratörler hakkında daha fazla bilgi edinin:
Uzun süre çalışan işlemler
Bir SDK yöntemi, uzun süre çalışan bir işlem (LRO) yanıtı getirebilirsiniz. Bu yanıt aşağıdakiler dahil olmak üzere bilgileri içerir:
- İsteğiniz tamamlandı
- İsteğiniz hala devam ediyor
Aşağıdaki JavaScript örneği, devam etmeden önce ile bir LRO'nun tamamlandıktan sonra nasıl beklemeniz gerektirmektedir.
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)
);
Azure'da uzun süre çalışan işlemler hakkında daha fazla bilgi edinin:
Zaman uyumsuz işlemleri iptal etme
@azure/abort-controller paketi AbortController ve AbortSignal sınıfları sağlar. AbortController'ı kullanarak bir AbortSignal oluşturun. Bu işlemden sonra bekleyen işi iptal etmek için Azure SDK işlemlerine geçirebilirsiniz. Azure SDK işlemleri şöyle olabilir:
- Kendi mantığınız temel alarak durduruldu
- Zaman aşımı sınırına göre durduruldu
- Üst görevin sinyaline göre durduruldu
- Üst görevin sinyaline veya zaman aşımı sınırına göre durduruldu
Daha fazla bilgi edinin:
SDK'dan ayrıntılı günlük kaydı
Azure SDK kullanırken, uygulamanıza hata ayıklamanız gereken zamanlar olabilir.
Derleme zamanında günlüğe kaydetmeyi etkinleştirmek içinortam değişken AZURE_LOG_LEVEL olarak ayarlayın.
Çalışma zamanında günlüğü etkinleştirmek için @azure/logger paketini kullanın:
import { setLogLevel } from "@azure/logger"; setLogLevel("info");
Bundling (Bundling)
Azure SDK ile birlikte işleme hakkında bilgi edinin: