Por que usar serviços da Web em vez de acesso direto a um banco de dados relacional para um aplicativo Android?


19

Pesquisei na Web como acessar de maneira eficiente um banco de dados central em um local remoto e encontrei sugestões para usar serviços da Web em vez de acesso direto (por exemplo, JDBC etc) a um banco de dados. .

Respostas:


25

A adição de uma camada de serviço da web oferece a oportunidade de tornar seu cliente mais leve, tanto em termos da energia da CPU necessária quanto da largura de banda usada durante o processamento. Ambos os fatores são extremamente importantes para os usuários finais:

  • Usar menos CPU aumenta a vida útil da bateria,
  • Usar menos largura de banda reduz os pagamentos mensais para usuários com planos medidos

Ao introduzir uma camada de aplicativo da web, você move a maior parte do processamento de um cliente móvel portátil de baixa potência, baixa largura de banda e pouca memória para um servidor conectado e de alta largura de banda e alta potência, com mais memória do que ele needs - um ambiente em que o processamento e as comunicações custam uma fração do que custam ao cliente.

Mas espere, também há algo para você: dividindo o sistema, você obtém mais controle sobre suas regras de negócios, a estrutura do seu banco de dados e as versões do que está por aí. Depois que você permite que um cliente móvel se conecte diretamente ao banco de dados, seu design é "casado" com essa estrutura de banco de dados: quase todas as alterações quebram a compatibilidade com versões anteriores de um cliente que pode estar relutante em atualizar seu aplicativo.

Por outro lado, adicionar um serviço da Web no meio permite evoluir a interface para clientes móveis de maneiras mais gerenciáveis: por exemplo, você pode manter a interface antiga no lugar, adicionar uma nova que funcione "em paralelo" com ela e depois inteiramente reestruture seu banco de dados sem quebrar um único cliente.

Se você seguir alguns princípios básicos de design ao projetar seu serviço da Web, poderá obter benefícios significativos reutilizando a infraestrutura madura do lado do servidor que foi implementada: por exemplo, você pode obter serviços de cache e proxy gratuitamente.

Por fim, isso abrirá a porta para outros desenvolvedores, expondo seu aplicativo a plataformas que você não poderia prestar serviços de manutenção a si mesmo, acabando por tirar proveito da sua empresa.


1
"tanto em termos da potência da CPU necessária quanto da largura de banda usada durante o processamento" foi o ponto-chave que eu estava procurando.Obrigado
yesildal

4
Além disso, se o seu aplicativo se comunicar diretamente com o banco de dados, você estará apenas a um compilador reverso de alguém que solta todas as tabelas do banco de dados. Com um aplicativo da web, você pode usar um controle muito mais refinado e impedir coisas assim
Earlz

1
@Earlz: não que eu o faça de bom grado por um aplicativo da web, mas a maioria dos servidores de banco de dados tem permissões bastante sólidas e refinadas. Não há desculpa para um usuário da web com permissões para descartar tabelas.
Wyatt Barnett

1
@WyattBarnett ok ... sem procedimentos armazenados e similares, como você permitiria que um usuário atualizasse seu perfil de usuário? permissão de leitura / gravação para a tabela USERS ... O que os impediria de excluir ou editar linhas que não são suas ... ou até mesmo ler linhas que não são suas. Tenho certeza de que nenhum servidor de banco de dados tem esse tipo de grão fino sem o uso de procedimentos armazenados ou algo assim
Earlz

@Earlz - não é um que eu saiba, mas esse é o ponto - por que você vai falar diretamente com o seu banco de dados e deliberadamente ignorar os recursos do banco de dados para torná-lo saudável? E você faria algo centrado no perfil e atualizaria bastante dessa maneira?
Wyatt Barnett

13

Ele coloca uma camada de abstração entre o aplicativo e o banco de dados. Isso oferece muitas vantagens, como:

  • Limitando o acesso ao banco de dados apenas às partes que o aplicativo precisa. Isso simplifica o código do aplicativo e mantém seu banco de dados seguro.
  • Asbstra o trabalho interno do banco de dados; portanto, se você decidir posteriormente alterar seu esquema, consultas ou mesmo todo o banco de dados, o link para seu aplicativo não será quebrado desde que você mantenha a camada intermediária corretamente.
  • Permite adicionar funcionalidades fora do escopo de um banco de dados. Armazenamento em cache de dados que são razoavelmente constantes, por exemplo. As regras de negócios são outra parte que deve ser separada do banco de dados.

1
Outra vantagem é que permite adicionar um cache, do lado do cliente ou do servidor (ou ambos, para diferentes propósitos).
TMN

@TMN - Bom ponto!
Sistema de Down

Ok, mas esses fatos também são válidos para qualquer tipo de aplicativo da Web, não é? A inserção de uma camada (serviços da Web) aumenta o tempo de resposta de um aplicativo móvel que deve responder rapidamente?
yesildal

1
@ yesildal - Sim, eles ainda são válidos. De fato, eles são válidos para todos os tipos de aplicativos. No entanto, nos aplicativos da web, você não precisa usar os serviços da web e pode simplesmente isolar essas funções em seu próprio assembly (por exemplo). O motivo do uso de serviços da Web para aplicativos remotos (como aplicativos de telefone) é que o servidor de banco de dados não está próximo.
Sistema de Down

@yesildal - re performance: na verdade, se você tiver 1 usuário, sim, haverá um atraso extra no retorno do resultado, mas se você tiver um milhão de usuários, as coisas serão diferentes, e dividir o código em 2 servidores pode fazer com que desempenho geral mais rápido.
Gbjbaanb

4

Um outro motivo para não expor o banco de dados diretamente - transporte. A maioria dos bancos de dados relacionais, os tipos de assuntos com os quais o JDBC conversa, não são projetados para a Internet pública em geral. Internet sem fio é um fim terrivelmente não confiável da referida Internet pública. O tratamento de exceções seria um pesadelo e você provavelmente escreveria o reverso da camada de serviços da Web dentro do aplicativo para evitar a perda de transações.

Existem alguns tipos mais recentes de bancos de dados que falam HTTP e podem ser adequados para esse tipo de coisa. Eles também tendem a apresentar maneiras de inserir códigos de aplicativos no banco de dados. Você pode querer observar o CouchDb ou o RavenDb - ambos são dbs de documentos com recursos de mapa / redução que funcionam sobre json e http, como muitos serviços modernos da web.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.