Uma Introdução a Back-end as a Service

BAAS: Seu novo melhor amigo

Friends don’t let friends build data centers.

Esta frase, cunhada em 2014 por Charles Phillips então CEO da Amazon Web Services sintetiza de forma muito bem humorada a tendência que tomou de assalto a indústria de tecnologia nos últimos 5 anos. O paradigma de que produtos digitais deveriam residir em máquinas mantidas in-house ruiu perante serviços capazes de entregar armazenamento e poder computacional on-demand, em qualquer lugar do mundo, com segurança e consistência sem precedentes. Uma proposta especialmente interessante para o crescente número de empresas que apostam no modelo de distribuição SAAS (Software As A Service).

Em meio a esse novo mercado bilionário, gigantes como Amazon, Google e Microsoft disputam agressivamente em uma corrida para baratear, expandir e diversificar seus ecossistemas de Cloud Computing. O resultado: uma enxurrada de inovações disruptivas, como o BAAS.

O conceito de Back-end As A Service nasceu da ideia de que talvez amigos também não devessem deixar amigos implementarem back-ends”. Imagine poder deixar tarefas como autenticação de usuários, interface com banco de dados e integração com meios de pagamento nas mãos de um serviço externo, consumido on-demand. A ideia deve soar como heresia para muitos desenvolvedores back-end, especialmente se considerarmos que muitas plataformas de BAAS ainda são caras e relativamente limitadas. Ainda sim, tais plataformas estão em evolução constante e já oferecem diversos recursos.

BAASes são especialmente úteis para projetos mobile. Tão úteis, que muitas plataformas se promovem especificamente como um mobile Back-end As A Service”. Tal sinergia se deve ao fato de que muitos projetos mobile são multi-plataforma, o que obriga o sistema do back-end a atender múltiplos apps. Isso pode tornar a integração entre front e back muito trabalhosa, já que modificações feitas para melhor atender um app podem ser prejudiciais a outro. BAASes mitigam as dores de cabeça da integração e oferecerem soluções prontas, as quais podem ser utilizadas imediatamente por múltiplos apps.

No caso de equipes pequenas, BAASes permitem que desenvolvedores pouco experientes em desenvolvimento back-end implementem rapidamente funcionalidades que de outra forma exigiriam conhecimento específico. Mais um grande atrativo, não só para desenvolvedores mobile, como também para desenvolvedores web especializados em front-end.

E por último, BAASes se prestam muito bem à criação de protótipos funcionais. Afinal, quando o objetivo é colocar um produto ou simulacro funcional nas mãos de usuários o mais rápido possível, não ter de se preocupar com a implementação de um back-end é uma grande vantagem.

No presente momento, os principais atrativos dos BAASes podem ser resumidos em:
  • Exigem pouco conhecimento específico, pois abstraem boa parte da complexidade por trás das típicas funcionalidades de um back-end.
  • Aproveitam conceitos, linguagens e praticas já familiares a desenvolvedores front-end web e mobile.
  • Facilitam integração com frameworks web e mobile.
  • Setup e implementação rápidos e descomplicados.
  • Muitas ferramentas BAAS oferecem uma free tier generosa.
E seus pontos fracos são:
  • O custo tende a ser elevado quando consumidos em larga escala.
  • São menos flexíveis e robustos que um back-end convencional.
  • Promovem dependência em seus ecossistemas.

Exemplo Prático

Para entendermos melhor o uso e potencial dos BAASes, nada melhor do que por a mão na massa. No exemplo a seguir, integraremos uma aplicação web feita com React ao BAAS Firebase do Google e exploraremos alguns dos seus recursos.

O React foi escolhido pela sua imensa popularidade e relativa proximidade ao javascript padrão. Todo o código relacionado ao front-end da aplicação será apresentado pronto, permitindo que mesmo aqueles que não dominam o framework acompanhem o exemplo. Já a opção pelo Firebase se deve a sua popularidade e maturidade frente a outros BAASes.

Serão cobertos os temas de inscrição no BAAS, instalação e configuração, autenticação de usuários e leitura/escrita no banco de dados.

Inscrição no BAAS

  1. Acesse o site https://console.firebase.google.com/
  2. Logue com sua Google Account.
  3. Clique em Add Project”.

    Clique em “Add Project”.
    Clique em “Add Project”.
  4. Escolha um nome e região para o seu projeto e clique em “Create Project”.
Pronto! Em alguns instantes você será redirecionado até o painel de controle do seu projeto. Recomendo que passe alguns instantes se familiarizando com a interface. Quando estiver confortável, deixe a janela aberta e prossiga para o próximo passo do tutorial.

Instalação e Configuração

Clique aqui para acessar o exemplo.

Como você pode ver, a aplicação não passa de uma página com sessões dedicadas a cada tema do tutorial. As sessões, por sua vez, contém componentes e elementos gráficos que nos ajudarão a verificar o funcionando do BAAS.

Perceba que na sessão dedicada a Instalação e Configuração” vemos duas mensagens de erro: Firebase não instalado” e Firebase não inicializado”. Hora de resolvermos esse problema.

    1. No painel de controle do Firebase, clique no botão Add Firebase to your web app”. Um modal se abrirá revelando um trecho de código similar ao exemplo abaixo:

Copie-o e feche o modal.

  1. Agora de volta à aplicação. Clique no botão Settings”, cole o código no campo Stuff for <head>” e salve.
Clique no botão “Settings”, cole o código no campo “Stuff for <head>” e salve.
Clique no botão “Settings”, cole o código no campo “Stuff for” e salve.
  1. Clique em Run”. Se tudo estiver certo, ambas as mensagens de erro desaparecerão, indicando que o SDK do Firebase foi corretamente instalado e configurado para se comunicar com o seu back-end.

Autenticação de Usuário

Dois dos recursos mais úteis do Firebase são a sua camada de permissão e fluxo de autenticação, o qual disponibiliza integrações com diversos provedores como Google, Facebook e Twitter. Hora de habilitar esse recurso…
  1. No menu lateral do painel de controle, clique em Authentication” e depois em Sign-In Method”. Você verá uma lista de provedores de Sign-in.
  1. Procure pelo provedor Google, habilite-o e salve.
Procure pelo provedor “Google”, habilite-o e salve.
Procure pelo provedor “Google”, habilite-o e salve.
  1. Para que possamos testar o Firebase dentro do Codepen é preciso que seu domínio seja autorizado a realizar chamadas para o Firebase. Para fazer isso, role até a sessão Authorized domains” e adicione s.codepen.io” à lista de domínios autorizados.
Role até a sessão “Authorized domains” e adicione “s.codepen.io” à lista de domínios autorizados.
Role até a sessão “Authorized domains” e adicione “s.codepen.io” à lista de domínios autorizados.
  1. O Firebase oferece uma library de elementos gráficos chamada de FirebaseUI. Com ela é possível inserir fluxos de autenticação e elementos padrão em qualquer aplicação.

Ainda que o setup dessa library esteja além do escopo do nosso exemplo, saiba que o botão de Sign-in presente no exemplo foi construído com o uso da mesma. Aqueles interessados em seu funcionamento encontrarão mais informações aqui.

  1. Na aplicação, clique no botão Sign-in with Google” e siga o fluxo de autenticação.
Clique no botão “Sign-in with Google” e siga o fluxo de autenticação.
Clique no botão “Sign-in with Google” e siga o fluxo de autenticação.
  1. Pronto, você está logado. No painel, clique em Authetication” e depois em Users”. Perceba que um novo usuário foi adicionado ao projeto.

Leitura e Escrita de Dados

Agora vamos ler e escrever dados no Real-time Database oferecido pelo Firebase.

Felizmente, tudo que precisamos para acessa-lo já foi feito. Durante seu processo de inicialização, a instância do Firebase em nosso exemplo já foi apontada para o banco de dados correto. Quem fez a mágica foi a linha abaixo:

Por padrão, o Real-time Database só aceita chamadas assinadas por usuários autorizados. Também para nossa sorte, esse requisito foi preenchido no passo anterior do exemplo.

Já que já está tudo pronto, só nos resta experimentar:

  1. No menu lateral do painel de controle, clique em Database”. Você verá um painel com a representação do conteúdo do seu banco de dados.
No menu lateral do painel de controle, clique em “Database”. Você verá um painel com a representação do conteúdo do seu banco de dados.
Representação do estado do banco de dados.
  1. Agora, na aplicação, use os campos de texto para definir uma chave e um valor a serem armazenados. Quando estiver satisfeito, clique em Escrever”.

Verifique o estado do seu banco no painel e confirme que a chave e o valor foram inseridos corretamente.

Defina uma chave e um valor a serem armazenados, clique em escrever e confirme que ambos foram inseridos corretamente.
Defina uma chave e um valor a serem armazenados, clique em escrever e confirme que ambos foram inseridos corretamente.

A chamada que requisita a escrita dos dados é bem simples e segue o padrão abaixo:

 

  1. Quanto a leitura de dados, use o campo apropriado para definir a chave que será lida e clique em Ler”.
Use o campo apropriado para definir a chave que será lida e clique em “Ler”.
Use o campo apropriado para definir a chave que será lida e clique em “Ler”.

A chamada de leitura é tão simples quanto a de escrita. No entanto, perceba o uso do método once” no nosso exemplo. Ele é necessário pois o Real-time Database é capaz não só de ler valores, mas também de observá-los e reagir às mudanças. O método comunica à API que só precisamos do valor presente da chave lida e não iremos observá-la.

A documentação completa sobre leitura e escrita de dados pode ser encontrada aqui.

Conclusão

Como esperado, a instalação e utilização do BAAS é simples e direta. Com um pouco de sorte, o exemplo anterior foi capaz de ilustrar algumas das suas diversas possibilidades de uso.

Caso tenha se interessado e queira experimentar outras plataformas, os links abaixo o levarão até alguns dos BAASes mais populares do mercado. Todos são bem documentados e oferecem diferentes serviços e modelos de cobrança:

Quem sabe o seu próximo App não acabará usando um BAAS? 😉

 

Lucas de Senna Correia
Engenheiro de Software @ Social Miner

Published by

Lucas Senna

Entusiasta de aviação, filósofo de botequim, designer e desenvolvedor Frontend.

Leave a Reply

Your email address will not be published. Required fields are marked *