Windows Azure Internals: Trabalhando com Storage Service e API REST (parte 3)

Cloud Computing & Microsoft Azure

Figura3


3º passo: Blobs

API de referência: http://msdn.microsoft.com/en-us/library/dd135733.aspx

Na listagem abaixo temos a classe BlobStorage que herda de StorageAzure. Nossa classe tem uma constante para definir o host a ser utilizado. Implementamos o construtor da classe base e logo após temos os três métodos da nossa API: CriaContainer, CriaBlob e DeleteBlob.

O método CriaContainer possui como argumentos o nome do container a ser criado e uma variável booleana indicando se este container deve ser público (acessível a todos) ou privado (acessível somente com sua chave de acesso). Neste exemplo iremos trabalhar apenas com o container público. Feito a verificação, adicionamos ao elemento HeaderPrefixProperties a propriedade publicaccess=true, indicando acesso público ao nosso container.

Agora ficou muitos simples. É só chamar o método RequisicaoDeArmazenamento da classe base e passar o nome do container a ser criado, o método HTTP a ser executado e o cabeçalho. Verificamos em nosso response por meio do código de status se o container foi criado.

Listagem5_thumb9_thumb

No Método CriaBlob, nosso recurso é composto pelo nome do container (que obviamente deve estar criado e ser público) e do blob a ser criado. Utilizamos o método PUT e não precisamos alterar nada no cabeçalho. A diferença aqui é que devemos adicionar o arquivo e o seu tipo. Segundo a documentação oficial, o Content-Type não é obrigatório tendo seu valor padrão como “application/octet-stream”, mas neste caso iremos gravar um text/plain. Quando definimos o Content-Type, esse valor fica armazenado na propriedade x-ms-blob-content-type do cabeçalho de pedido. Para deletar o recurso só é preciso informar o método DELETE na assinatura do RequisicaoDeArmazenamento.

 

4º passo: Queues

API de referência: http://msdn.microsoft.com/en-us/library/dd179363.aspx

Em suma nossa QueueStorage segue a mesma mecânica da classe BlobStorage. Herdamos de StorageAzure, implementamos o construtor padrão e primeiro método a ser implementado é o CriaFila como na listagem abaixo:

Listagem6_thumb2_thumb

É possível notar que não difere em nada do método CriaContainer na classe BlobStorage. Creio que é desnecessário explicar todo o algoritmo, vou direto para as diferenças em relação ao que já codificamos anteriormente. Então vamos ao método CriaMensagem:

Listagem7_thumb2_thumb

Para criar uma mensagem devemos observar o seguinte critério: A mensagem deve estar em um formato que possa ser incluído em uma solicitação XML com codificação UTF-8.

Observe que estou incluindo a mensagem recebida via parâmetro entre as tags

<QueueMessage><MessageText>" e "</MessageText></QueueMessage>". O corpo do pedido contém os dados da mensagem já obedecendo o formato XML. Note que o conteúdo da mensagem deve estar em um formato que pode ser codificado em UTF-8, neste caso, informo como contetType o valor "text/plain" na chamada do método. Uma operação bem sucedida retorna código de status 201 (Created).

 

5ºpasso: Tables

API de referência: http://msdn.microsoft.com/en-us/library/dd179423.aspx

A classe TableStorage segue o mesmo modelo das classes BlobStorage e QueueStorage. Neste caso vamos direto aos seus métodos. Nesta classe vamos trabalhar apenas com dois métodos, a saber: ListarTabelas e PesquisaTabela.

O primeiro vai listar todas as tabelas da conta informada. O segundo vai listar todos os dados da tabela informada, podendo realizar as consultas especializadas informado os critérios necessário para tal. Vamos começar pelo método ListarTabelas:

Listagem8_thumb2_thumb

Azure Storage Table é exposta através de ADO.NET Data Services. Com isso é possível realizar as consultas (embora não haja suporte a diversos recursos).

Segundo a documentação, a operação Query Tables retorna uma a lista das tabelas de uma determinada conta como um conjunto de entidades ADO.NET em um feed Atom. Sendo assim, podemos realizar a exibição baseado em um XML de retorno. O que estou fazendo é utilizar o elemento “d: TableName” para expor o nome das tabelas.

Segue o método PesquisaTabela:

Listagem9_thumb2_thumb

Agora tudo fica mais simples. A diferença aqui fica por conta das consultas, basta apenas incluir no parâmetro consulta o nome da tabela a ser pesquisada e a query a ser executada. Como no exemple abaixo:

  1. TableStorage table = new TableStorage(conta);

  2. table.PesquisaTabela("Municipios?$filter=UF eq 'DF'");

Neste exemplo estou buscando todos os municípios onde o campo UF for igual a DF. O formato geral para recuperar dados de uma tabela é “minhatabela$filter=<expressao-de-consulta>”. Você tem mais informações aqui!

Existe outras estratégias caso você necessite trabalhar com os serviços de tabela, mas isto fica para outro post.

 

6º passo: Definições de conta

Esta classe serve apenas para nos auxiliar na escolha de qual ambiente utilizar. Existem algumas diferenças entre o desenvolvimento na nuvem e utilizando o storage emulator. Algo bem aparente é a mudança nas URIs que serão utilizadas.

Se você já tiver uma conta na nuvem, basta apenas substituir os campos minha-conta e minha-senha pelos seus dados de conta do azure. Se não, você pode ter a opção de testar localmente.

Listagem10_thumb[2]_thumb

 

Fim

Como explicitei, minha intenção neste artigo foi aprofundar os conhecimentos no serviço de armazenamento do Azure. Podemos notar a flexibilidade em se trabalhar com os dados na nuvem sem ter que codificar especificamente para windows Azure e podendo acessar estes dados diretamente de aplicações  on-premises (aplicação que não está hospedada na nuvem) utilizando as APIs REST. Um exemplo bacana do que pode ser feito é a biblioteca Azure BlobStorage Javascript Library que está disponível no codeplex. No mais, não há limites para a imaginação.

 

Baixe aqui o Código Fonte utilizado no artigo.

 

Windows Azure Internals: Trabalhando com Storage Service e API REST (parte 1)

Windows Azure Internals: Trabalhando com Storage Service e API REST (parte 2)

 

Um ótimo estudo a todos….

Ass copy

Twitter: @vitormeriat

vitormeriat@gmail.com

vitor.pereira@studentpartners.com.br


Author's profile picture

Vitor is a computer scientist who is passionate about creating software that will positively change the world we live in.

MVP Azure - Cloud Architect - Data science enthusiast


5 minutes to read