Взаимодействие с интерфейсами API службы хранилища Azure

Завершено

Служба хранилища Azure предоставляет REST API для работы с контейнерами и хранимыми данными в каждой учетной записи. У каждого типа данных, которые можно хранить, есть собственный независимый API. Напомним, что у нас есть четыре конкретных типа данных:

  • большие двоичные объекты для неструктурированных данных, таких как двоичные и текстовые файлы;
  • очереди для хранения обмена сообщениями;
  • таблицы для структурированного хранения "ключ — значение";
  • файлы для традиционных файловых ресурсов SMB.

Использование REST API

Интерфейсы REST API Службы хранилища доступны из любой точки в Интернете для любого приложения, которое может отправлять HTTP/HTTPS-запросы и получать ответы через HTTP/HTTPS.

Например, если вы хотите перечислить все большие двоичные объекты в контейнере, вы создадите запрос примерно так:

GET https://[url-for-service-account]/?comp=list&include=metadata

По запросу будет возвращен блок XML с данными для конкретной учетной записи:

<?xml version="1.0" encoding="utf-8"?>  
<EnumerationResults AccountName="https://[url-for-service-account]/">  
  <Containers>  
    <Container>  
      <Name>container1</Name>  
      <Url>https://[url-for-service-account]/container1</Url>  
      <Properties>  
        <Last-Modified>Sun, 24 Sep 2018 18:09:03 GMT</Last-Modified>  
        <Etag>0x8CAE7D0C4AF4487</Etag>  
      </Properties>  
      <Metadata>  
        <Color>orange</Color>  
        <ContainerNumber>01</ContainerNumber>  
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>  
      </Metadata>  
    </Container>  
    <Container>  
      <Name>container2</Name>  
      <Url>https://[url-for-service-account]/container2</Url>  
      <Properties>  
        <Last-Modified>Sun, 24 Sep 2018 17:26:40 GMT</Last-Modified>  
        <Etag>0x8CAE7CAD8C24928</Etag>  
      </Properties>  
      <Metadata>  
        <Color>pink</Color>  
        <ContainerNumber>02</ContainerNumber>  
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>  
      </Metadata>  
    </Container>  
    <Container>  
      <Name>container3</Name>  
      <Url>https://[url-for-service-account]/container3</Url>  
      <Properties>  
        <Last-Modified>Sun, 24 Sep 2018 17:26:40 GMT</Last-Modified>  
        <Etag>0x8CAE7CAD8EAC0BB</Etag>  
      </Properties>  
      <Metadata>  
        <Color>brown</Color>  
        <ContainerNumber>03</ContainerNumber>  
        <SomeMetadataName>SomeMetadataValue</SomeMetadataName>  
      </Metadata>  
    </Container>  
  </Containers>  
  <NextMarker>container4</NextMarker>  
</EnumerationResults>  

Однако этот подход требует ручного анализа и создания пакетов HTTP для работы с каждым API. По этой причине Azure предоставляет предварительно разработанные клиентские библиотеки, которые облегчают работу со службой для распространенных языков и платформ.

Использование клиентской библиотеки

Клиентские библиотеки могут существенно сократить объемы работы, которую приходится выполнять разработчикам приложений, так как API проверен и часто обеспечивает лучшие оболочки вокруг моделей данных, отправляемых и получаемых REST API.

У Майкрософт имеются клиентские библиотеки Azure, которые поддерживают множество языков и платформ, в том числе:

  • .NET
  • Java
  • Python
  • Node.js
  • Go


Logos of supported frameworks you can use with Azure.

Например, чтобы получить тот же список больших двоичных объектов в C#, можно использовать следующий фрагмент кода:

string containerName = "...";
BlobContainerClient container = new BlobContainerClient(connectionString, containerName);

var blobs = container.GetBlobs();
foreach (var blob in blobs)
{
    Console.WriteLine($"{blob.Name} --> Created On: {blob.Properties.CreatedOn:YYYY-MM-dd HH:mm:ss}  Size: {blob.Properties.ContentLength}");
}

Или в JavaScript.

const containerName = '...';
const containerClient = blobServiceClient.getContainerClient(containerName);

let blobs = containerClient.listBlobsFlat();
for await (const blob of blobs) {
  console.log(`${blob.name} --> Created: ${blob.properties.createdOn}   Size: ${blob.properties.contentLength}`);
}

Примечание.

Клиентские библиотеки — это всего лишь тонкие программы-оболочки для REST API. Они делают именно то, что вы будете делать, если вы использовали веб-службы напрямую. Эти библиотеки также имеют открытый исходный код, что делает их очень прозрачными. Ссылки на исходный код этих библиотек на GitHub см . в разделе "Дополнительные ресурсы " в конце этого модуля.

Теперь давайте добавим поддержку клиентской библиотеки в приложение.