Использование пакетов Azure SDK для JavaScript и TypeScript
Для программного доступа к службам Azure используйте пакеты Azure SDK для JavaScript. Как правило, эти пакеты SDK область с пакетом npm @azure область, опубликованным azure-sdk.
Различия между пакетами SDK и REST API
Используйте следующие сведения, чтобы понять, когда следует использовать тип механизма доступа.
- Пакеты Azure SDK являются предпочтительным способом доступа к службе Azure. Пакеты Azure SDK абстрагируют шаблонный код, требуемый для управления облачными запросами REST платформы Azure, такими как аутентификация, повторные попытки и ведение журнала.
- Интерфейсы REST API Azure — это предпочтительный метод, если вы:
- работаете со службами в предварительной версии, которые не имеют доступа к пакетам Azure SDK; рассматриваете свой код как код в предварительной версии, который будет обновлен после общей доступности службы с наличием SDK пакетов;
- хотите напрямую осуществлять вызовы REST, чтобы весь пакет SDK не использовал один REST API, или хотите получить больше возможностей для управления HTTP-запросами.
Клиентские библиотеки и библиотеки управления Azure
Выпуски пакетов Azure SDK доступны в следующих форматах:
- Пакеты SDK для управления: библиотеки управления позволяют вам подготавливать и администрировать ресурсы Azure через Azure Resource Manager (ARM). Их можно распознать по наличию
@azure/arm-
в имени пакетов. - Клиентские пакеты SDK: если ресурс Azure уже существует, вы будете использовать клиентские библиотеки для его использования и взаимодействия с ним.
- Файл README.md в каждом пакете включает соответствующую документацию и примеры.
Установка пакетов npm для Azure
Пакеты Azure SDK бесплатно доступны на сайте NPM. Установите требуемые отдельные пакеты SDK. Каждый пакет SDK предоставляет определения TypeScript.
Для использования клиента и браузера необходимо добавить пакеты Azure SDK в процесс объединения.
Использование примера кода для пакета npm в Azure
Каждый пакет содержит документацию для быстрого начала работы с пакетом. Дополнительные сведения об их использовании можно найти в каждом конкретном пакете NPM.
Предоставление учетных данных для аутентификации
Пакеты Azure SDK требуют предоставления учетных данных для аутентификации на платформе Azure. Классы учетных данных, предоставляемые @azure/identity , предоставляют несколько преимуществ:
- Быстрое подключение.
- Самый безопасный способ.
- Независимость механизма аутентификации от кода. Это позволяет использовать один и тот же код локально и на платформе Azure, хотя учетные данные различаются.
- Предоставление цепочки аутентификации для доступности нескольких механизмов.
Создание клиента пакета SDK и вызов методов
После программного создания учетных данных передайте учетные данные в клиент пакета Azure SDK. Клиенту может потребоваться дополнительная информация, например идентификатор подписки или URL-адрес службы. Эти значения доступны на портале Azure для ресурса.
Список подписок, доступ для чтения которых доступен этим учетным данным.
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);
});
Асинхронное разбиение результатов на страницы
Метод пакета SDK может возвращать асинхронный итератор PagedAsyncIterableIterator для поддержки асинхронных результатов. Результаты могут использовать маркеры разбиения на страницы и продолжения для разбиения результирующих наборов.
В следующем примере JavaScript демонстрируется асинхронное разбиение на страницы. Код задает искусственно небольшой размер разбиения на страницы (2) для быстрой визуальной демонстрации процесса при выполнении примера кода в режиме отладки.
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:
Длительные операции
Метод пакета SDK может возвратить ответ длительной операции (LRO). Этот ответ включает в себя следующие сведения:
- запрос завершен;
- запрос еще выполняется.
В следующем примере JavaScript демонстрируется, как обеспечить ожидание завершения LRO с запуском .pollUntildone()
перед продолжением.
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:
Отмена асинхронных операций
Пакет @azure/abort-controller предоставляет классы AbortController и AbortSignal. Используйте AbortController для создания AbortSignal, который затем можно передать операциям пакета Azure SDK для отмены ожидающих заданий. Операции пакета Azure SDK можно:
- прервать на основе вашей логики;
- прервать на основе ограничения по времени выполнения;
- прервать на основе сигнала родительской задачи;
- прервать на основе сигнала родительской задачи или ограничения по времени выполнения.
Подробнее:
Подробное ведение журнала из пакета SDK
При использовании пакета Azure SDK вам может потребоваться выполнить отладку приложения.
Чтобы включить ведение журнала во время сборки, задайте для переменной среды AZURE_LOG_LEVEL значение
info
.Чтобы включить ведение журнала во время выполнения, используйте пакет @azure/loger :
import { setLogLevel } from "@azure/logger"; setLogLevel("info");
Объединение
Дополнительные сведения об объединении с помощью пакета Azure SDK:
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по