Use as bibliotecas de cliente do Azure para JavaScript e TypeScript
Para acessar programaticamente seus serviços do Azure, use as bibliotecas de cliente do Azure para JavaScript. Normalmente, essas bibliotecas têm como escopo o pacote npm @azure publicado por azure-sdk.
Diferenças entre bibliotecas de cliente e APIs REST
Use a informação a seguir para entender quando usar cada tipo de acesso.
- As bibliotecas de cliente do Azure são o método preferencial para acessar seu serviço do Azure. Essas bibliotecas abstraem o código clichê necessário para gerenciar solicitações REST da plataforma do Azure baseadas em nuvem, como autenticação, novas tentativas e registro em log.
- As APIs REST do Azure são o método preferencial se você:
- Trabalhar com serviços em versão prévia que não tenham bibliotecas de cliente do Azure disponíveis. Considerar seu código como versão prévia, que deverá ser atualizado quando o serviço estiver em disponibilidade geral com bibliotecas de cliente.
- Desejar fazer chamadas REST diretamente por não querer que o SDK inteiro use apenas uma API REST ou se você quiser um controle mais profundo sobre as solicitações HTTP.
Bibliotecas de clientes e de gerenciamento do Azure
As versões da biblioteca de cliente do Azure estão disponíveis como:
- Gerenciamento: as bibliotecas de gerenciamento permitem que você crie e gerencie recursos do Azure. Você pode reconhecer essas bibliotecas por
arm-
nos respectivos nomes de pacote. O termo ARM indica o Azure Resource Manager. - Cliente: considerando que um recurso do Azure já exista, você usaria as bibliotecas de cliente para consumi-lo e interagir com ele.
- Cada pacote README.md inclui documentação e exemplos.
Instalar pacotes npm do Azure
As bibliotecas de cliente do Azure estão disponíveis gratuitamente no NPM. Instale os SDKs individuais conforme necessário. Cada SDK fornece definições de TypeScript.
Para o uso do cliente/navegador, as bibliotecas de cliente do Azure precisam ser adicionadas ao seu processo de agrupamento.
Usar o código de exemplo do pacote npm do Azure
Cada pacote inclui documentação para uma introdução rápida. Consulte os pacotes NPM específicos que você usa para saber como usá-los.
Fornecer credenciais de autenticação
As bibliotecas de cliente do Azure exigem credenciais para autenticação na plataforma do Azure. As Classes de credenciais fornecidas pelo @azure/identity oferecem vários benefícios:
- Integração rápida
- Método mais seguro
- Separe o mecanismo de autenticação do código. Isso permite que você use o mesmo código localmente e na plataforma do Azure, enquanto as credenciais são diferentes.
- Forneça autenticação encadeada para que vários mecanismos possam estar disponíveis.
Criar um cliente do SDK e chamar métodos
Depois de criar uma credencial programaticamente, passe a credencial para o cliente do Azure. O cliente pode exigir informações adicionais, como uma ID da assinatura ou um ponto de extremidade de serviço. Esses valores estão disponíveis no portal do Azure para o seu recurso.
O exemplo de código a seguir usa o DefaultAzureCredential e a biblioteca de cliente de assinatura arm
para listar as assinaturas que essa credencial tem acesso para ler.
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);
});
Paginação assíncrona de resultados
Um método SDK pode retornar um iterador assíncrono, PagedAsyncIterableIterator, para permitir resultados assíncronos. Os resultados podem usar tokens de paginação e de continuação para separar conjuntos de resultados.
O exemplo de JavaScript a seguir demonstra a paginação assíncrona. O código define um tamanho de paginação artificialmente curto de 2 para demonstrar o processo de maneira rápida e visual quando você executar o código de exemplo na depuração.
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)
);
Saiba mais sobre paginação e iteradores no Azure:
Operações de execução prolongada
Um método SDK pode retornar uma resposta bruta de LRO (operação de execução prolongada) . Essa resposta inclui informações, incluindo:
- A sua solicitação foi concluída
- A sua solicitação ainda está em processo
O exemplo de JavaScript a seguir demonstra como aguardar a conclusão de um LRO, com .pollUntildone()
, antes de continuar.
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)
);
Saiba mais sobre operações de execução prolongada no Azure:
Cancelando operações assíncronas
O pacote @azure/abort-controller fornece as classes AbortController e AbortSignal. Use o AbortController para criar um AbortSignal, que pode ser passado para operações do SDK do Azure para cancelar o trabalho pendente. As operações do SDK do Azure podem ser:
- Anulada com base em sua própria lógica
- Anulada com base em um tempo limite
- Anulada com base no sinal de uma tarefa pai
- Anulada com base no sinal de uma tarefa pai ou em um tempo limite
Saiba mais:
Log detalhado do SDK
Ao usar um SDK do Azure, pode haver ocasiões em que você precisa depurar seu aplicativo.
Para habilitar o registro em log no tempo de build, defina a variável de ambiente AZURE_LOG_LEVEL como
info
.Para ativar o registro em run-time, use o pacote @azure/logger:
import { setLogLevel } from "@azure/logger"; setLogLevel("info");
Agrupamento
Saiba mais sobre o agrupamento com o SDK do Azure:
Próximas etapas
- Liste as assinaturas com o SDK @azure/arm-subscriptions
- Liste as operações de recursos recentes com o SDK @azure/arm-monitor