Firebase e Google Cloud: o que há de diferente no Cloud Firestore?

Doug Stevenson em Google Developers Follow Fev 25 · 7 min ler

Anteriormente nesta série de blogs, falei sobre o relacionamento entre o Firebase e o Google Cloud Platform (GCP). Na última postagem, você aprendeu algumas das diferenças específicas com o Cloud Functions . Neste post, farei o mesmo com o Cloud Firestore ( Firebase , GCP ). É um bom momento para falar sobre o Cloud Firestore, pois agora ele está disponível ( Firebase , GCP ) com um contrato de nível de serviço de qualidade de produção. Tenho certeza que muitos de vocês já experimentaram o Cloud Firestore e estão ansiosos para usá-lo em seus aplicativos!

O Cloud Firestore é um banco de dados em tempo real massivamente escalonável, hospedado na nuvem, NoSQL. Para estruturar seus dados, você define coleções (semelhantes a tabelas no SQL) que contêm documentos (semelhantes a linhas). Cada documento contém campos que contêm os dados reais. Você pode fazer referência a um documento individual usando seu caminho exclusivo ou pode consultar uma coleção de documentos cujos campos contêm os dados que você está procurando.

O Cloud Firestore é diferente de alguns dos outros produtos Cloud que têm um SDK do Firebase para desenvolvimento móvel (como Cloud Functions e Cloud Storage). Em vez disso, o produto Cloud Firestore é uma colaboração entre as equipes do Cloud e do Firebase, combinando a experiência com dados em tempo real, aprendidos com o Firebase Realtime Database e a escalabilidade do Google Cloud Platform.

O Cloud Firestore tem SDKs para aplicativos móveis e componentes de servidor (que discutiremos mais adiante), mas o produto de banco de dados subjacente é o mesmo. Se você é um desenvolvedor do Google Cloud usando o Firestore como parte de sua arquitetura de back-end ou é um desenvolvedor do Firebase cujos usuários o acessam diretamente do aplicativo cliente, o Cloud Firestore armazena dados e dimensiona exatamente da mesma maneira. No entanto, existem algumas diferenças que você deve estar ciente.

No console

Usando o console do Cloud , você pode procurar dados no banco de dados do Cloud Firestore em seu projeto. Parece com isso, onde a coluna da esquerda lista todas as coleções de nível superior. Quando você seleciona uma coleção, a coluna do meio lista os documentos da coleção por seus IDs exclusivos e, finalmente, a coluna da direita mostra os campos em um documento selecionado.

Isso é semelhante à exibição dos mesmos dados no Firebase console :

Ambos os consoles têm uma maneira de alternar entre mostrar dados e mostrar índices. No console do Cloud, você alterna entre os dois no painel de navegação à esquerda, enquanto no Firebase console, você alterna entre as guias acima da área de conteúdo.

Exclusivo do Firebase console, você perceberá guias adicionais para regras e uso. O uso mostra um gráfico de leituras, gravações e exclusões para o período de cota atual:

Isso é conveniente para desenvolvedores do Firebase, que podem tentar ter uma ideia de como é o uso por usuário do aplicativo em que estão trabalhando.

Se você observar com cuidado, também poderá ver onde seu uso está contra a cota gratuita por dia. Observe também o link na parte inferior, que envia você para o console da nuvem para obter métricas de faturamento mais detalhadas:

Dados, índices e faturamento são basicamente os mesmos nos consoles do Firebase e do Cloud. Mas a guia "Regras" é especial para o Firebase. Eu vou chegar a isso daqui a pouco. Primeiro, vamos falar sobre as bibliotecas-cliente que o Firebase adiciona ao Cloud Firestore.

SDKs para aplicativos da Web e móveis

O GCP fornece SDKs para trabalhar com o Cloud Firestore no código do lado do servidor. Há suporte para Python , Node.js , Java , C # (.NET) , Go , PHP e Ruby . Espera-se que esses SDKs sejam executados em um ambiente confiável, onde você tem controle sobre a execução. Para aplicativos da Web e móveis, onde você deve enviar o código para o usuário final para ser executado diretamente, o Firebase fornece bibliotecas adicionais para iOS , Android , Web (e provavelmente, no futuro, para jogos em execução no Unity e C ++).

Uma otimização importante que os SDKs do cliente oferecem é a capacidade de armazenar documentos em cache no dispositivo móvel. Enquanto a persistência offline estiver habilitada, todos os documentos lidos anteriormente serão armazenados em cache automaticamente no dispositivo. Na próxima vez em que o cliente consultar um documento, se a versão em cache estiver atualizada com a versão no servidor, a versão armazenada em cache será usada, economizando dinheiro e economizando tempo dos usuários. Também funciona enquanto o dispositivo está offline. Esse recurso de armazenamento em cache está disponível apenas com os SDKs do cliente fornecidos pelo Firebase, mas não com os SDKs do servidor.

Outra diferença entre os SDKs para dispositivos móveis e servidores do Cloud Firestore é a suposição de onde o código está sendo executado. O código do servidor geralmente é executado em um ambiente de baixa latência, especialmente em outros produtos do Google Cloud. Nessa situação, outras otimizações estão em vigor para ajudar operações de banco de dados (especialmente transações, que devem ida e volta entre o chamador e o banco de dados) concluir mais rapidamente.

O Firebase também fornece o Firebase Admin SDK (para Java, Python, Node.js e Go), que costuma ser usado para implementar parte do back-end de seu aplicativo para dispositivos móveis. Como os SDKs do Cloud, o SDK do administrador deve ser usado exclusivamente no back-end e nunca para uso no código que é enviado aos usuários finais. Ao trabalhar com o Cloud Firestore usando o Admin SDK, você deve saber que ele efetivamente reempacota ou encapsula o Cloud SDK subjacente. O Admin SDK não oferece novas APIs para o Firestore. Ele simplesmente fornece acesso à Cloud API existente. Dessa forma, se você estiver usando o Firebase Admin SDK, acabará consultando a documentação da Cloud API para entender como as coisas funcionam.

Normalmente, o código de back-end é considerado “privilegiado” e normalmente opera sem restrições, porque é assumido que você (o desenvolvedor) tem controle total sobre o ambiente de execução. Ao inicializar um dos SDKs do servidor Cloud Firestore, você deve fornecer uma conta de serviço que conceda permissão ao SDK para executar ações em seu projeto. Portanto, se você precisar de código que credite dinheiro virtual aos jogadores do seu jogo, seu código de back-end poderá (e deverá) fazer isso sem problemas porque seu back-end está autorizado por uma conta de serviço com acesso ao seu projeto. No entanto, é altamente improvável que você queira que seus usuários finais possam modificar o documento que contém o registro de seus créditos, intencionalmente ou não! Quando você envia o código do cliente que acessa seu banco de dados, você deve assumir que o código não pode ser confiável, nem os dados que ele produz . O código em execução nos dispositivos do usuário final pode ser modificado e comprometido para fazer o que o atacante quiser (afinal, eles podem controlar o dispositivo do usuário final por completo!). Como você não pode confiar no usuário final e em seu dispositivo, deve implementar regras de segurança apropriadas para proteger seu banco de dados. E nem mesmo são apenas usuários mal-intencionados – também é importante se proteger do seu próprio código de bugs (somos todos culpados por este)!

Regras de Segurança

As regras de segurança do Cloud Firestore são usadas para limitar o acesso de leitura e gravação ao Cloud Firestore proveniente de clientes móveis que usam um dos SDKs do Firebase. Isso é exclusivo do Firebase, e não há equivalente no lado do Google Cloud. As regras são aplicadas no servidor, portanto, é impossível que um cliente as contorne.

Por padrão, todo o acesso ao Cloud Firestore proveniente de um dos SDKs para dispositivos móveis ou a API REST do Cloud Firestore (quando é apresentado a um token de ID do usuário do Firebase Authentication) é rejeitado. Para permitir o acesso ao documento, as regras de segurança geralmente empregam alguma combinação de:

  • A identidade do usuário, conforme indicado pelo Firebase Authentication (também integrado ao aplicativo cliente)
  • O novo conteúdo do documento que eles estão tentando escrever
  • O conteúdo existente de um ou mais documentos.

Assim, você poderia facilmente escrever uma regra que permita acesso somente a um documento se ele tiver o mesmo ID do usuário autenticado do usuário. E você pode verificar se os campos que estão sendo escritos têm valores válidos. Note, porém, que as regras de segurança não implementam uma linguagem de programação completa. Você notará que não há loops, atribuições ou instruções de procedimento, mas você tem a capacidade de escrever expressões complexas que avaliam um valor verdadeiro ou falso final.

Lembre-se, no entanto, quando você acessa o Cloud Firestore usando um dos SDKs do servidor, ele sempre ignora as regras. Isso retorna à expectativa de que o código do servidor sempre seja executado em um ambiente confiável. Se você controlar totalmente o código e o ambiente, presume-se que não fará nada prejudicial (novamente, excluindo os erros do seu lado!).

Por fim, se você não tiver usuários finais trabalhando diretamente com o Cloud Firestore em um aplicativo para dispositivos móveis ou Web, não será necessário se preocupar com as regras de segurança. O Firestore é perfeitamente utilizável no backend sem um aplicativo cliente. No entanto, se você estiver enviando um aplicativo, recomendamos enfaticamente a integração do Firebase Authentication primeiro , e você deve pensar cuidadosamente em estruturar seus dados e regras a partir dele. Pode haver momentos em que sua estrutura de dados deve seguir as restrições de segurança, como quando você deseja armazenar dados públicos e privados para um usuário.

Como você está usando o Cloud Firestore?

Estou curioso para saber como você está usando o Cloud Firestore! Sinta-se à vontade para twittar a equipe do @Firebase e faça perguntas para nós sobre o Firebase-talk . E se você ainda não estiver usando o Firestore, talvez você possa experimentar um dos codelabs para Android , iOS ou web . Não há cobrança para começar com as cotas diárias gratuitas.

Texto original em inglês.