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 SDK'ları mevcut değil önizleme hizmetleriyle çalışma. Kodunuzu önizleme olarak düşünün. Bu, hizmet GENEL OLARAK SDK'lerle kullanılabilir olduğunda güncelleştirilebilir.
  • SDK'nın tamamının tek bir kaynak kullanmasını veya HTTP istekleri üzerinde daha REST API daha fazla denetime sahip olmak istemeniz nedeniyle REST çağrılarını doğrudan yapmak istemeniz.

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:

Sonraki adımlar