Construindo APIs com Firebase: Guia Completo para Iniciantes

O Firebase, lançado em 2012 e adquirido pelo Google dois anos mais tarde, surgiu inicialmente como um banco de dados em tempo real para aplicativos. Contudo, o Google, vislumbrando seu potencial, expandiu a plataforma, agregando diversos serviços.

Hoje, o Firebase é um sistema BaaS (backend como serviço) que engloba 18 serviços, facilitando o desenvolvimento de aplicações web e móveis. Empresas renomadas como Accenture, Alibaba Travels, Stack, Twitch e Instacart, juntamente com mais de 2.300 outras, utilizam os serviços BaaS do Firebase.

Vantagens do uso do Firebase

O serviço pioneiro do Firebase, o banco de dados em tempo real, continua sendo um dos seus maiores atrativos. Os bancos de dados Realtime do Firebase são hospedados na nuvem, armazenando dados em formato JSON e sincronizando-os em tempo real com todos os clientes conectados. Seja através dos SDKs para iOS, Android ou JavaScript, todos os aplicativos vinculados a um banco de dados Realtime do Firebase compartilham uma instância, mantendo-se sempre atualizados com os dados mais recentes.

O Cloud Firestore é outro serviço notável do Firebase. Trata-se de um banco de dados de documentos NoSQL, projetado para simplificar o armazenamento, sincronização e consulta de dados para aplicativos móveis e web em escala global. A capacidade de criar hierarquias para organizar dados relacionados e a disponibilidade de consultas expressivas para recuperação de dados permitem explorar todo o potencial do Cloud Firestore. As consultas são dimensionadas com base no tamanho dos resultados, e não no tamanho do conjunto de dados. Isso viabiliza o dimensionamento de aplicativos desde o início, sem a necessidade de aguardar que as demandas ultrapassem a capacidade.

Além dos serviços de banco de dados, o Firebase oferece hospedagem, armazenamento de arquivos, funções (semelhantes ao AWS Lambda) e muitas outras funcionalidades.

Criação de uma API

APIs são meios de disponibilizar serviços para uso próprio ou de terceiros. O Firebase permite a criação de serviços personalizados que utilizam os serviços do Firebase, eliminando a complexidade de configurar um backend específico. Por exemplo, é possível oferecer acesso a um banco de dados em tempo real do Firebase para que aplicativos de terceiros consultem informações coletadas por sensores industriais.

Para criar uma API no Firebase, o primeiro passo é acessar o Console do Firebase e adicionar um projeto, clicando em “Adicionar projeto” e nomeando-o. O Google oferecerá a opção de ativar o Google Analytics para o novo projeto, uma recomendação valiosa para obter benefícios como testes A/B e uma variedade de relatórios estatísticos da API.

Após criar o projeto, é possível escolher os serviços do Firebase que serão utilizados pela API. Para ilustrar, demonstraremos como usar o serviço de banco de dados Firebase Realtime.

Configuração de um banco de dados Realtime no Firebase

Na barra de navegação à esquerda, na seção “Desenvolver”, clique em “Realtime Database”. Um botão “Criar banco de dados” aparecerá à direita. Clique nele para criar seu primeiro banco de dados no Firebase.

Em seguida, selecione uma das opções de localização geográfica para o banco de dados, preferencialmente a mais próxima dos seus usuários. Esse aspecto é crucial para minimizar a latência da API, principalmente em aplicações em tempo real.

O próximo passo é definir as regras de segurança iniciais do banco de dados. Você pode escolher o modo bloqueado, atribuindo permissões de acesso conforme a necessidade, ou o modo de teste, que permite todas as leituras e gravações.

Para simplificar a configuração inicial, o modo de teste é uma boa opção. Regras mais granulares de segurança podem ser estabelecidas posteriormente.

Após a configuração do banco de dados, a API correspondente será ativada na seção APIs e serviços do seu console pessoal no Google Cloud Platform.

Programando a API do Firebase

Neste momento, os elementos básicos do seu projeto já estão configurados no console do Firebase. A próxima etapa é codificar a API. Para isso, é necessário inicializar o hosting e as funções do Firebase em seu computador. Utilize o npm para instalar o firebase-tools:

npm install -g firebase-tools

Em seguida, faça login no Firebase e inicialize o projeto com os comandos:

firebase login firebase init

Uma tela de boas-vindas informará a pasta de inicialização do projeto e exibirá um menu de opções.

Selecione “Funções” e “Hospedagem” (a opção de hospedagem permitirá ter uma URL personalizada para a API que você desenvolverá). Em seguida, escolha o aplicativo Firebase criado anteriormente na lista e selecione a linguagem a ser utilizada. Para o desenvolvimento de uma API web, JavaScript é uma boa escolha.

Caso precise de dependências, instale-as com npm dentro da pasta de funções. Comece a escrever o código para suas funções, incluindo os pacotes firebase-functions e firebase-admin, e quaisquer outros pacotes necessários:

import * as functions from 'firebase-functions'; 
import * as admin from 'firebase-admin';

Para usar o banco de dados em tempo real, é necessário especificar a sua URL ao inicializar o SDK do JavaScript. Esta URL está localizada na seção Realtime Database do Firebase console e pode ser reconhecida pelo seu formato:

https://<database-name>.<region>.firebasedatabase.app

O snippet a seguir pode ser usado para inicializar o SDK, substituindo os dados pelo objeto de configuração do seu projeto:

var config = {
  apiKey: "apiKey",
  authDomain: "projectId.firebaseapp.com",
  databaseURL: "https://databaseName.firebaseio.com",
  storageBucket: "bucket.appspot.com"
};
firebase.initializeApp(config);
var database = firebase.database();

Após escrever o código da função da API, é hora de implantar. Antes disso, faça ajustes no arquivo firebase.json, adicionando as seguintes linhas, de acordo com a configuração do seu projeto:

"rewrites": [
     {
       "source": "/api/v1/**",
       "function": "webApi"
     }
]

O próximo passo é a implantação. A primeira implantação deve ser completa, usando o comando:

firebase deploy

Nas implantações subsequentes, use o parâmetro –only functions para implantar apenas as funções.

Após o comando deploy, a Firebase CLI exibirá no terminal o URL dos endpoints HTTP das funções. Este URL pode ser usado para invocar as APIs de um aplicativo web. O URL contém o ID do projeto e uma região para a função HTTP. Por exemplo, o seguinte URL pode ser usado para chamar uma função de consulta de item, passando o parâmetro itemid=1:

https://us-central1-apiproject-8753c.cloudfunctions.net/itemQuery?itemid=1

Para executar a função, abra a URL com os parâmetros correspondentes em um navegador.

Note que a implantação em ambiente de produção requer uma assinatura do plano Firebase Blaze, que é paga conforme o uso, como detalhado na página de preços do Firebase. Este é um serviço pós-pagamento, ou seja, você paga pelo uso no final de cada mês.

Sem a assinatura do plano Blaze, o comando deploy não exibirá o URL da API. Em vez disso, será exibida uma mensagem informando a necessidade de assinar o plano Blaze para implantar no ambiente de tempo de execução. Neste caso, use o Firebase Local Emulation Suite para criar e testar aplicativos localmente, sem implantá-los no ambiente de produção do Firebase. O teste local ajuda a evitar custos desnecessários durante o desenvolvimento, já que cada teste pode gerar cobranças.

Testes e protótipos locais

O Local Emulator Suite oferece uma interface de usuário integrada que facilita a prototipagem e o teste de aplicativos localmente.

A interface do Emulator Suite permite testar designs de banco de dados, fluxos de trabalho do Cloud Functions, analisar o desempenho dos serviços de backend e avaliar mudanças nas regras de segurança, entre outras tarefas. É um ambiente seguro para testar a funcionalidade da API antes de enviá-la para produção.

Para emular as funções ou testar o aplicativo localmente, execute firebase emulators:start. É necessário ter o Java instalado para usar o Firestore Emulator. Caso não tenha, faça a instalação através deste link.

Ao invocar o Firestore Emulator, o comando retornará um URL para abrir a interface do usuário do Emulator Suite no seu navegador. Por padrão, este URL será localhost:4000, mas pode variar em cada máquina.

Também será fornecido um URL completo para sua função HTTP. Este URL será semelhante a:

http://localhost:5001/apiproject-8753c/us-central1/itemQuery

Note que este URL terá o nome do seu projeto, o nome da sua função e também pode ter um número de porta diferente na sua máquina local.

Para testar a função, copie o URL retornado pelo emulador, adicionando os parâmetros necessários (ex: ?itemid=1), e cole-o em uma nova aba do seu navegador. Os resultados da execução da API aparecerão na interface do Emulator Suite.

Na aba Logs, você verá novos registros indicando que a função itemQuery() foi executada. Caso a função gere novos dados no banco de dados do Firestore, eles serão exibidos na aba Firestore.

Aumentando a visibilidade da sua API

Se o objetivo é tornar as APIs desenvolvidas populares, o Firebase também pode ajudar. Não apenas porque agiliza o desenvolvimento, eliminando grande parte do trabalho de colocar os serviços de back-end em funcionamento, mas também no posicionamento do produto. Como? Aplicativos associados ao Firebase têm melhor classificação em pesquisas do que outros.

Além disso, considere a API de indexação de aplicativos do Firebase, uma ferramenta que melhora o ranking de links de aplicativos e auxilia os usuários a encontrar o conteúdo desejado. Ela também adiciona o botão “Instalar” próximo ao botão da página inicial do aplicativo, facilitando a aquisição de novos usuários.

Em resumo, o Firebase oferece serviços de back-end que aceleram drasticamente o desenvolvimento de APIs e, após a implantação, ajuda a promovê-la e gerar receita.