O Google Firestore é um banco de dados NoSQL em nuvem do Firebase, ideal para armazenar documentos JSON. Ele é perfeito para aplicações escaláveis e em tempo real. No entanto, trabalhar diretamente com o Firestore através do google-cloud-firestore nem sempre é prático, especialmente se você está acostumado com uma abordagem orientada a objetos e código tipado.
FireO é um ORM para Google Firestore, uma biblioteca Python que simplifica o trabalho com o Firestore, oferecendo uma interface semelhante aos ORMs populares. Modelos, campos, validação e relacionamentos — tudo isso agora está disponível no mundo Firebase.
O que é FireO e por que usá-lo
FireO (Firebase ORM) é um mapeamento objeto-relacional para Google Firestore, escrito em Python. A biblioteca permite que desenvolvedores trabalhem com o Firestore como se fosse um banco de dados relacional tradicional, usando classes e objetos em vez de consultas diretas à API.
Principais vantagens do FireO:
- Facilidade de uso: Sintaxe intuitiva, semelhante ao Django ORM
- Tipagem de campos: Tipagem forte com validação automática
- Validação de dados: Verificação integrada antes de salvar
- Suporte a relacionamentos: Trabalhe com campos de referência e estruturas aninhadas
- Gerenciamento automático de metadados: Criação automática de timestamps
- Migrações: Gerenciamento simplificado da estrutura de dados
Instalação e configuração do FireO
Instalando a biblioteca
pip install fireo
Configurando a autenticação
Para trabalhar com o Firestore, é necessário configurar a autenticação via Service Account:
- Crie uma Service Account no Firebase Console
- Baixe a chave JSON
- Defina o caminho da chave na variável de ambiente:
export GOOGLE_APPLICATION_CREDENTIALS="caminho/para/sua-chave.json"
Configuração alternativa de conexão
from fireo import connection
# Conexão via arquivo
connection(from_file="caminho/para/serviceAccountKey.json")
# Conexão via variável de ambiente
connection()
Fundamentos do Firestore e modelo orientado a documentos
Estrutura de dados no Firestore
O Firestore armazena dados na seguinte hierarquia:
- Banco de dados → Coleções → Documentos → Campos
- Documentos podem conter subcoleções
- Campos podem ser de vários tipos: strings, números, arrays, objetos, etc.
Características da abordagem NoSQL
O Firestore é um banco de dados sem esquema, o que significa:
- Documentos em uma mesma coleção podem ter campos diferentes
- Não é necessário definir a estrutura antecipadamente
- Flexibilidade para alterar a estrutura dos dados
O FireO adiciona uma camada de estrutura e validação sobre essa flexibilidade.
Criando modelos no FireO
Modelo básico
from fireo.models import Model
from fireo.fields import TextField, NumberField, BooleanField
class User(Model):
name = TextField(required=True, max_length=100)
age = NumberField(required=True)
is_active = BooleanField(default=True)
class Meta:
collection_name = "users" # Opcional, por padrão usa o nome da classe
Modelo avançado com validação
from fireo.fields import EmailField, DateTimeField, ListField
from datetime import datetime
class Profile(Model):
user_id = TextField(required=True)
email = EmailField(required=True)
created_at = DateTimeField(default=datetime.now)
tags = ListField Também na biblioteca
Helmet para JavaScript (Node.js): guia completo com exemplos
Geração Swagger/OpenAPI para Swift: ferramentas e exemplos de código
Tokens JWT em C# (.NET): trabalhando com System.IdentityModel.Tokens.Jwt