Interacción con las API de Azure Storage
Azure Storage proporciona una API REST para trabajar con los contenedores y los datos almacenados en cada cuenta. Cada tipo de datos que puede almacenar tiene su propia API independiente. Recuerde que tenemos cuatro tipos de datos específicos:
- Blobs para datos no estructurados como archivos de texto y binarios.
- Colas para mensajes persistentes.
- Tablas para el almacenamiento estructurado de clave/valores.
- Files para recursos compartidos de archivos tradicionales de SMB.
Uso de la API de REST
Las API REST de Storage son accesibles desde cualquier lugar en Internet y mediante cualquier aplicación que pueda enviar una solicitud HTTP/HTTPS y recibir una respuesta HTTP/HTTPS.
Por ejemplo, si quiere enumerar todos los blobs de un contenedor, debería crear una solicitud similar a la siguiente:
GET https://[url-for-service-account]/?comp=list&include=metadata
Esta solicitud devuelve un bloque XML con datos específicos de la cuenta:
<?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>
Pero este enfoque requiere el análisis manual y la creación de paquetes HTTP para trabajar con cada API. Por este motivo, Azure proporciona bibliotecas de cliente compiladas previamente que facilitan el trabajo con el servicio para plataformas y lenguajes comunes.
Uso de una biblioteca de cliente
Las bibliotecas cliente pueden guardar una cantidad significativa de trabajo para los desarrolladores de aplicaciones, ya que la API se ha probado y a menudo proporciona mejores contenedores en torno a los modelos de datos enviados y recibidos por la API REST.
Microsoft tiene bibliotecas de cliente de Azure que admiten muchos lenguajes y marcos, como:
- .NET
- Java
- Python
- Node.js
- Go
Por ejemplo, para recuperar la misma lista de blobs en C#, podríamos usar el siguiente fragmento de código:
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}");
}
O en 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}`);
}
Nota:
Las bibliotecas cliente son simplemente contenedores finos para la API REST. Hacen exactamente lo que haría usted si usara los servicios web directamente. Estas bibliotecas también son de código abierto, lo que las hace muy transparentes. Vea la sección Recursos adicionales al final de este módulo para obtener vínculos al código fuente de estas bibliotecas en GitHub.
A continuación, vamos a agregar compatibilidad con bibliotecas cliente a la aplicación.