Windows Azure Insider

Windows Azure Mobile Services: um robusto back-end para os aplicativos de seu dispositivo

Bruno Terkaly
Ricardo Villalobos

 

Nos últimos anos, o panorama dos desenvolvedores tem sido caracterizado por três recursos principais: vários dispositivos e sistemas operacionais para dar suporte, aplicativos que dependem de serviços Web assíncronos geralmente hospedados na nuvem e tráfego variável que complica o planejamento e o provisionamento de recursos. O novo WAMS (Microsoft Windows Azure Mobile Services) simplifica a implementação de arquiteturas de software que abordam esse tipo de ambiente, conforme exibido na Figura 1.


Figura 1 - Arquitetura típica de suporte a vários dispositivos com um único serviço Web

Embora seja possível criar e implantar manualmente os componentes necessários para que essa abordagem funcione, o que os desenvolvedores móveis realmente desejam são pontos de extremidade que forneçam as funcionalidades necessárias sem terem de se preocupar com a infraestrutura subjacente. Ter de gastar ciclos com a manutenção de armazenamentos estruturados ou semiestruturados, a autenticação de usuários ou notificações por push é uma dispersão do desenvolvimento de aplicativos móveis.

Lembre-se de que estamos usando o termo “aplicativo móvel” de maneira bastante livre aqui. Essa tecnologia do lado do cliente (aplicativo móvel) pode ser destinada a praticamente tudo: um telefone ou um tablet com Windows 8, um iPhone ou um iPad com iOS ou um telefone ou um tablet com Android. Isso é possível devido ao fato de que o WAMS baseia-se em padrões abertos e solicitações HTTP regulares.

Criando seu primeiro aplicativo com base em WAMS

O WAMS está atualmente em modo de visualização e para iniciar bastam alguns cliques. Simplesmente inscreva-se para uma avaliação gratuita em bit.ly/azuretestdrive, faça logon para acessar o Portal do Windows Azure e, em seguida, clique em CREATE A NEW APP.

Conforme você verá, uma janela será exibida permitindo que você realize rapidamente várias coisas. Aqui, você definirá uma URL que será usada por seu aplicativo móvel para interagir com os serviços disponíveis e criará um novo banco de dados relacional (embora seja possível optar por usar um Banco de dados SQL do Windows Azure existente). Ao mesmo tempo, vários serviços e pontos de extremidade com base em REST serão criados e expostos para clientes móveis.

Em seguida, você deverá fornecer um nome de banco de dados, um servidor, um nome de logon, uma senha e uma região, conforme exibido na Figura 2.


Figura 2 - Especificando as configurações do banco de dados

Em alguns instantes, você criou um novo serviço móvel em um dos datacenters confiáveis, seguros e globalmente distribuídos da Microsoft, conforme exibido na Figura 3.


Figura 3 - A conta do serviço móvel

Agora, clique no nome do serviço (“brunoterkaly” na Figura 3) para acessar o painel de gerenciamento subjacente.

Usando o painel para criar um aplicativo do Windows 8

Após acessar o painel, você poderá gerar um aplicativo simples do Windows 8 que demonstra como todas as peças se encaixam perfeitamente. Observe o link “Create a new Windows 8 application” na Figura 4.


Figura 4 - O principal portal para seu novo projeto de serviço móvel

Clique nesse link para iniciar o assistente do WAMS. Para criar uma solução básica para dispositivos do Windows 8, você deverá executar três etapas essenciais, conforme mostrado a seguir:

  1. Obter as ferramentas. Se o Visual Studio Express 2012 para Windows 8 ainda não estiver instalado, instale-o clicando no link correspondente. Além disso, instale o SDK do Windows Azure Mobile Services baixando os bits em bit.ly/TpWfxy. Lembre-se de que esse último componente exige o Visual Studio 2012 em execução em uma máquina com Windows 8.
  2. Criar uma tabela relacional para armazenar seus dados. Ao clicar no botão Create TodoItem Table, o assistente criará automaticamente uma tabela com base no Banco de dados SQL do Windows Azure criado (ou reutilizado) por você anteriormente.
    No caso de você não estar familiarizado com o Banco de dados SQL do Windows Azure, esse é um serviço altamente escalável que fornece recursos do SQL Server na nuvem. Você não precisará fazer isso para esse projeto, mas é realmente possível se conectar ao seu banco de dados recém-criado usando ferramentas como o SQL Server Management Studio (é exigida a versão 2008 R2) ou até mesmo diferentes linguagens de programação.
    O portal fornece uma interface simples que permite gerenciar suas estruturas de dados e tabelas. Como o Banco de dados SQL do Windows Azure oferece suporte ao protocolo TDS (Tabular Data Stream) tradicional, você pode usar exatamente as mesmas ferramentas que usaria com o banco de dados do SQL Server comum no local.
    Todos os servidores de Banco de dados SQL do Windows Azure são automaticamente protegidos por um firewall externo cujas regras você também pode gerenciar no portal. O importante a ser lembrado é que o assistente do WAMS cuida de todas essas etapas para você.
  3. Gerar e baixar o código necessário para o seu aplicativo. Agora que os dados e os pontos de extremidade necessários para esse projeto estão em vigor, é hora de verificar um pouco de código. A etapa final no portal permite que você gere um projeto do Visual Studio que aproveita automaticamente a plataforma do WAMS. Veja como fazer isso:
    1. Escolha a linguagem de programação: C# ou JavaScript.
    2. Ao clicar em Download, será exibida uma caixa de diálogo perguntando se você deseja abrir ou salvar o código gerado. Salve o arquivo zip.
    3. Depois de descompactar o código, abra o projeto no Visual Studio 2012.
    4. Em seguida, execute o código para verificar como ele funciona. No menu DEBUG, selecione START DEBUGGING. Insira um item de tarefa pendente, salve e, em seguida, atualize, conforme exibido na Figura 6.
    5. Você pode abrir o banco de dados gerado usando uma ferramenta como o SQL Server Management Studio (ou a ferramenta de gerenciamento do portal) para revisar os dados. Você perceberá que um novo item de tarefa pendente foi adicionado à tabela correspondente.


Figura 5 - O painel do banco de dados


Figura 6 - Executando o aplicativo

Explorando o código

Vamos dar uma olhada nos bastidores para verificar como isso funciona exatamente. O principal local para todo esse código está em MainPage.xaml.cs. Vá até o Gerenciador de Soluções e clique duas vezes em MainPage.xaml.cs para verificar o código exibido na Figura 7.

Figura 7 - A classe TodoItem

19  public class TodoItem
20  {
21    public int Id { get; set; }
22  
23    [DataMember(Name = "text")]
24    public string Text { get; set; }
25
26    [DataMember(Name = "complete")]
27    public bool Complete { get; set; }
28  }
29
30  public sealed partial class MainPage : Page
31  {
32    // MobileServiceCollectionView implements ICollectionView
33    // (useful for databinding to lists) and is integrated with your
34    // MobileService to make it easy to bind your data to the ListView
35    private MobileServiceCollectionView<TodoItem> items;
36
37    private IMobileServiceTable<TodoItem> todoTable =
38      App.MobileService.GetTable<TodoItem>();
42
43    public MainPage()...
50
51    private async void InsertTodoItem(TodoItem todoItem)...
60
61    private void RefreshTodoItems()…
68
69    private async void UpdateCheckedTodoItem(TodoItem item)...
73
74    private void ButtonRefresh_Click(object sender, RoutedEventArgs e)...
79
80    private void ButtonSave_Click(object sender, RoutedEventArgs e)...
86
87    private void CheckBoxComplete_Checked(object sender, RoutedEventArgs e)...
88
89    protected override void OnNavigatedTo(NavigationEventArgs e)...
91  }
=

Vejamos o que está acontecendo no código:

  • Da linha 19 até a linha 28, é criado o TodoItem, um objeto que representa os dados que desejamos salvar no Banco de dados SQL do Windows Azure. Ele representa a mesma estrutura de dados que a tabela subjacente no banco de dados, mas eles não precisam ser iguais. Os atributos DataMember afetam a maneira como o item é serializado, bem como o nome das colunas reais no Banco de dados SQL do Windows Azure. Isso permite que exista um nome de coluna no banco de dados diferente do nome da propriedade no Microsoft .NET Framework.
  • Na linha 35, é criada uma coleção de itens que é exibida em um controle de lista na página principal do aplicativo. A coleção é ligada a um controle de lista subjacente. Ela é preenchida a partir do objeto da linha 37.
  • Na linha 37, é criado um IMobileServiceTable de TodoItems chamado todoTable. O objeto todoTable funciona como um wrapper em relação à API HTTP RESTful exposta pelo WAMS e permite que você use consultas LINQ do lado do cliente, em vez de chamadas HTTP manuais de API REST, para consultar os dados na tabela TodoItem do Banco de dados SQL do Windows Azure. O resultado das consultas LINQ são salvos na coleção de itens criada anteriormente e, depois, são associados à ListView para exibição. O mesmo objeto todoTable também permite operações assíncronas de inserção, atualização e exclusão na tabela TodoItem do Banco de dados SQL do Windows Azure. Esse é todo o código que geralmente você deverá escrever por conta própria. Em resumo, o desenvolvedor é poupado de ter de escrever uma grande quantidade de código de direcionamento para executar operações típicas de criação, leitura, atualização e exclusão.
  • Na linha 51, itens todo são inseridos na tabela de maneira assíncrona e a coleção de itens é atualizada.
  • Na linha 61, a coleção de itens é atualizada com os dados mais recentes da tabela todo e esses dados são associados ao controle de lista.
  • Na linha 69, atualizações assíncronas são emitidas para a tabela do banco de dados SQL subjacente e o item é removido da coleção de itens.
  • Na linha 74, o controle de lista é atualizado com dados do banco de dados.
  • Na linha 80, uma nova entrada é inserida na tabela todo.
  • Na linha 87, a tabela subjacente é atualizada para refletir o fato de que uma caixa de seleção foi marcada.

Também vale a pena explorar o arquivo App.xaml.cs, pois ele armazena o código de inicialização. O objeto cliente do tipo MobileServiceClient abstrai as complexidades de fazer uma chamada de serviço RESTful, que exige uma chave de aplicativo (gerada quando o Windows Azure Mobile Service é criado). Você pode obter a chave de aplicativo no portal do Windows Azure Mobile Services ou no arquivo App.xaml.cs:

 

sealed partial class App : Application
  {
    // This MobileServiceClient has been configured to
    // communicate with your Mobile Service URL and
    // application key; you're all set to start working with
    // your Mobile Service!
    public static MobileServiceClient MobileService =
      new MobileServiceClient(
      "https://brunoterkaly.azure-mobile.net/",
      "rsECynSsGJmPiHmydyTGEYOSlrbCgr27"
);

Como as solicitações são executadas

É neste ponto que a situação fica interessante. É possível analisar as solicitações HTTP geradas pelo cliente Windows 8 usando uma ferramenta de proxy de depuração da Web como o Fiddler (que pode ser baixado gratuitamente em fiddler2.com). Antes de usar o Fiddler para essa finalidade, observe que você deve permitir que o Fiddler capture e descriptografe o tráfego HTTP. No Fiddler, vá até Tools | Fiddler Options e, em seguida, vá para a guia HTTPS e marque as caixas de seleção Capture HTTPS CONNECTs e Decrypt HTTPS traffic.


Figura 8 - Analisando as solicitações HTTP geradas usando o Fiddler


Figura 9 - O código JSON retornado do WAMS

Depois de iniciar a ferramenta, vá até a guia Composer e siga estas etapas, conforme exibido na Figura 8 e na Figura 9:

  1. Selecione o verbo, como GET, e, em seguida, insira a URL (para o nosso projeto, ela é https://brunoterkaly.azure-­mobile.net/tables/TodoItem) e o cabeçalho correspondente, por exemplo, https://brunoterkaly.azure-mobile.net/tables/TodoItem.
  2. Clique em Execute.
  3. Clique com o botão direito do mouse na sessão no painel esquerdo.
  4. Selecione Inspect in New Window.
  5. O painel da sessão Web será exibido. Selecione a guia Response.
  6. Selecione a guia JSON. Agora, você conseguirá visualizar os dados provenientes do Windows Azure Mobile Service criado por você anteriormente. Esses são os mesmos dados vistos no banco de dados do SQL Server.

Essencialmente, isso significa que o Windows Azure Mobile Service pode ser acessado de praticamente qualquer ambiente, pois as solicitações HTTP e as chamadas RESTful são amplamente suportadas por várias plataformas e linguagens de programação. Observe que o SDK do Windows Azure Mobile Services para Windows 8 facilita essa utilização em aplicativos do Windows 8. Além disso, bibliotecas de clientes em breve estarão disponíveis para iOS e Android.

Conclusão

Os Windows Azure Mobile Services simplificam a vida de desenvolvedores móveis automatizando as etapas necessárias para a criação de um back-end com base em padrões abertos e oferecendo suporte a vários tipos de dispositivos e sistemas operacionais. Além disso, o WAMS fornece uma infraestrutura confiável e segura na nuvem que pode ser expandida com base no tráfego e na demanda, o que permite que os programadores se concentrem na otimização de seus aplicativos e seus dados.

Há muito mais para aprender, é claro, especialmente nas áreas de autenticação e notificação por push. A notificação por push possibilita o envio de notificações para o seu aplicativo do Windows 8 com facilidade, sem escrever, testar ou gerenciar código de infraestrutura de back-end. Além disso, o WAMS elimina a necessidade de escrever, configurar e testar soluções personalizadas de autenticação e gerenciamento de usuários para seus aplicativos do Windows 8. Esperamos abordar essas tecnologias em colunas futuras.      

 

 

Bruno Terkaly* *is a developer evangelist for Microsoft. Seu conhecimento profundo é o resultado de anos de experiência no campo, escrevendo código com uma grande quantidade de plataformas, linguagens, estruturas, SDKs, bibliotecas e APIs. Ele escreve código, participa de blogs e fornece apresentações ao vivo sobre como criar aplicativos com base na nuvem, especificamente usando a plataforma Windows Azure. Ele também escreveu uma série em cinco partes sobre o iOS e os Windows Azure Mobile Services, disponível em bit.ly/UPXGdV.

Ricardo Villalobos* *is a seasoned software architect with more than 15 years of experience designing and creating applications for companies in the supply chain management industry. Detentor de diferentes certificações técnicas, e mestre em administração pela Universidade de Dallas, ele trabalha como arquiteto de nuvem no grupo de incubação do Windows Azure CSV para a Microsoft.

Agradecemosao seguinte especialista técnico pela revisão deste artigo:Bret Stateham