Xamarin Forms - Se conectando a um banco de dados remoto


Neste artigo vou apresentar os conceitos usados para se conectar com um banco de dados remoto em uma aplicação o Xamarin forms usando o Visual Studio com Xamarin e a linguagem C#.

A pergunta que não quer calar ...

Como se conectar a um banco de dados remoto com o Xamarin Forms ?

Antes de responder a essa pergunta vamos ver porque não devemos fazer uma conexão direta com um banco de dados relacional a partir de uma aplicação Xamarin Forms.

Por quê eu não posso me conectar diretamente a um banco de dados remoto ?

Existem diversos motivos :

1- Segurança

Para se conectar a um banco de dados remoto diretamente a partir de uma aplicação Xamarin forms você teria que armazenar a string de conexão com banco de dados e as informações de usuário e senha localmente e isso não é seguro.

Você pode criar um usuário com permissões somente leitura e permitir acesso apenas a determinadas tabelas, mas os usuários ainda podem ver todos os dados nessas tabelas. Usando uma API, você pode implementar verificações de segurança adicionais e ter autenticação baseada no OAuth ou em um sistema de gerenciamento de usuários existente o que é muito mais seguro.

2- Desempenho

Em uma aplicação mobile existe uma alta latência entre a aplicação e o banco de dados remoto, isso significa que você o tempo gasto para fazer a conexão , ou seja o tempo que um pacote demora para ir até uma determinada rede e voltar. Se a latência existe, significa que seus dados demoram muito para chegar a um destino e voltarem para seu computador.

A consequência disto é que a sua conexão vai cair e reniciar diversas vezes até se conectar, e, é provável que sua conexão com o banco de dados continue caindo, forçando você a reconectar todas as vezes.

3- Controle

Usando uma API ao invés do acesso direto, você pode controlar o fluxo de dados para e a partir do seu banco de dados. Você pode implementar também o monitoramento de todas as suas requisições, e , se você precisar alterar a lógica de negócios ou até mesmo o banco de dados ou recursos são usados ​​pela aplicação, usando uma API, é possível fazer isso no servidor, sem precisar ter que reimplantar sua aplicação mobile.

4- Recursos

Usando uma API, você reduz a necessidade de usar recursos do servidor na sua aplicação mobile. Lembre-se que o ambiente mobile atua com economia de recursos. Uma API é desenhada para ser sem estado e eficiente e pode escalar para usar muitos usuários no futuro de uma forma segura.

Então, como se conectar com um banco de dados remoto ?

A maneira mais fácil e usada atualmente de se conectar com um banco de dados remoto e utilizar uma API baseada em REST.

Uma API é um contrato, uma promessa de realizar um serviço descrito quando requisito de forma especificada. Ela possui um conjunto de funções, classes ou objetos que expõe services para outros programas.

Essa API funciona como uma página da Web, mas em vez de um usuário visualizá-la e ver HTML, sua aplicação mobilie ou outro cliente se conecta a ela e envia comandos recebendo de volta os dados no formato JSON.

A figura abaixo compara as duas formas de se conectar com um banco de dados remoto:

Conexão com banco de dados remoto diretamente Conexão com banco de dados remoto usando API

Uma API REST permite que você envie chamadas usando HTTP , e,  receba dados como resposta.

Assim, você envia :

 
         GET http://servidor.dominio.com:porta/api/autores/1               

 

E recebe como resposta um retorno assim :

          {
              "id": 1,
              "nome": "Macoratti",
              "twitter": "macorati"
        }    

Para incluir dados no seu banco de dados remoto você pode enviar uma requisição HTTP assim:

Assim, você envia :

 
         POST http://servidor.dominio.com:porta/api/autores/  
 
Body:
      {
         "nome": "Igor",
         "twitter": "igortwi"
      }             

 

E recebe como resposta um retorno assim :

Status : 200 OK

          {
              "id": 6,
              "nome": "Igor",
              "twitter": "igortwi"
        }    

Neste artigo eu mostro como criar e consumir um API REST:  Xamarin Forms - Consumindo uma Web API ASP .NET - Macoratti

Usando HttpClient

Assumindo que você já possui uma API REST pronta vamos ver agora como se conectar ao banco de dados remoto ou seja como consumir a API REST.

Entenda que a lógica da conexão com o banco de dados, independente de qual banco você quer usar, esta na API REST e sua aplicação mobile apenas vai enviar uma requisição que será atendida no servidor pela API será processada e vai retornar os dados.

O HttpClient é um cliente HTTP para a plataforma .NET que fornece uma API flexível e extensível para acessar tudo que for exposto através do HTTP.

Ela era disponibilizada como parte da API WCF Web API mas atualmente faz parte da ASP .NET Web API e também esta disponível diretamente na plataforma .NET versão 4.5.

Você também pode baixar o pacote via Nuget Install-Package Microsoft.Net.Http

Assim, a classe HttpClient fornece uma classe base para enviar solicitações HTTP e receber respostas HTTP de um recurso identificado por um URI.

A classe HttpClient é a classe principal usada para enviar e receber mensagens HTTP através de HttpRequestMessage e HttpResponseMessage.  Se você já utilizou anteriormente as classes WebClient e HttpWebRequest vai notar que a classe HttpClient possui diferenças importantes a saber:

  1. Uma instância HttpClient é usada para configurar extensões, definir headers padrão, cancelar requests e mais;
  2. Você pode emitir tantos pedidos quantos quiser através de uma única instância HttpClient;
  3. HttpClients não estão vinculados a um determinado servidor HTTP ou host; você pode enviar qualquer solicitação HTTP usando a mesma instância HttpClient;
  4. Você pode derivar de HttpClient para criar clientes especializados para determinados sites ou padrões;
  5. A classe HttpClient usa o novo padrão orientada a tarefa (Task) para lidar com solicitações assíncronas, possibilitando assim, gerenciar e coordenar de forma mais fácil solicitações pendentes;
Assim, para obter informações do banco de dados você envia uma requisição GET :
           var uri = "http://www.macwebapi.somee.com/api/produtos/";
         HttpClient cliente = new HttpClient();
         var response = await cliente.GetAsync(uri);
Você define a URI, cria uma instância de HttpClient e usa o método GetAsync(uri).
Para incluir uma informação no banco de dados você envia uma requisição HTTP usando o verbo b:
        string url = "http://www.macwebapi.somee.com/api/produtos/";
       var uri = new Uri(string.Format(url, produto.Id));
       var data = JsonConvert.SerializeObject(produto);
       var content = new StringContent(data, Encoding.UTF8, "application/json");
       HttpResponseMessage response = null;
       response = await cliente.PostAsync(uri, content);

Existem também os métodos PUT e DELETE que permitem alterar e deletar um recurso usando a API REST a partir da sua aplicação mobile.

E estamos conversados...

"Deus nunca foi visto por alguém. O Filho unigênito (Jesus), que está no seio do Pai, esse o revelou."
João 1:18

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti