Visão Geral da Arquitetura
Arquitetura do Sistema
Seção intitulada “Arquitetura do Sistema”O Rebase é uma plataforma full-stack com quatro camadas:
┌─────────────────────────────────────────────────────────────────┐│ Frontend Layer ││ Rebase CMS + Studio • Custom Views • Plugins • Your App ││ @rebasepro/app • @rebasepro/ui • @rebasepro/studio │└───────────────────────────┬─────────────────────────────────────┘ │ HTTP + WebSocket ▼┌─────────────────────────────────────────────────────────────────┐│ Backend Layer ││ Hono HTTP Server • REST API • Auth • Storage • WS ││ @rebasepro/server │└───────────────────────────┬─────────────────────────────────────┘ │ Drizzle ORM ▼┌─────────────────────────────────────────────────────────────────┐│ Database Layer ││ PostgreSQL • Tables • RLS Policies • Realtime sync │└─────────────────────────────────────────────────────────────────┘Principais Componentes
Seção intitulada “Principais Componentes”Sistema de Adaptadores de Banco de Dados
Seção intitulada “Sistema de Adaptadores de Banco de Dados”O backend é inicializado por meio de um padrão unificado de adaptador de banco de dados. A lógica específica do banco de dados é desacoplada em seu próprio pacote, e o adaptador gerencia pool de conexões, resolução de esquema e roteamento de eventos em tempo real automaticamente.
import { createPostgresAdapter } from "@rebasepro/server-postgres";
database: createPostgresAdapter({ connectionString: process.env.DATABASE_URL!})As coleções são resolvidas automaticamente em relação ao adaptador configurado por meio do registro interno de injeção de dependência.
Registro de Coleções
Seção intitulada “Registro de Coleções”O BackendCollectionRegistry é o índice em tempo de execução de todas as coleções, suas tabelas PostgreSQL, enums e relações Drizzle. Ele é preenchido na inicialização a partir das suas definições de coleção.
Serviço em Tempo Real
Seção intitulada “Serviço em Tempo Real”A sincronização em tempo real usa o mecanismo nativo de LISTEN/NOTIFY do PostgreSQL:
- Uma mutação de dados acontece (inserção, atualização, exclusão)
- O backend emite um
NOTIFYem um canal - O
RealtimeServicerecebe a notificação - Ele transmite a alteração para todos os clientes WebSocket conectados
- Os componentes React são renderizados novamente com os novos dados
Para implantações com múltiplas instâncias (por exemplo, Cloud Run com múltiplas réplicas), forneça uma connectionString no seu PostgresBootstrapper para que todas as réplicas compartilhem a mesma conexão LISTEN.
Registro de Armazenamento
Seção intitulada “Registro de Armazenamento”Assim como os drivers, os backends de armazenamento são registrados em um registro central. Você pode ter vários provedores de armazenamento (local, S3) e rotear diferentes campos de arquivos para diferentes backends usando storageId.
Mapa de Pacotes
Seção intitulada “Mapa de Pacotes”| Pacote | Função | Usado por |
|---|---|---|
@rebasepro/types |
Interfaces TypeScript para coleções, propriedades, entidades, plugins | Tudo |
@rebasepro/server |
Inicialização do servidor backend, API REST, autenticação, armazenamento, WebSocket | Backend |
@rebasepro/client |
SDK tipado — transporte HTTP, WebSocket, autenticação | Frontend |
@rebasepro/app |
Framework React — Scaffold, controladores, formulários, rotas, hooks | Frontend |
@rebasepro/ui |
Biblioteca de componentes de UI independente (Tailwind v4 + Radix) | Frontend |
@rebasepro/app |
Telas de login, hooks de controlador de autenticação, gerenciamento de usuários | Frontend |
@rebasepro/studio |
Editor de coleções, console SQL, console JS, editor de RLS, navegador de armazenamento | Frontend |
@rebasepro/cli |
CLI para geração de esquema, migrações de banco de dados, geração de SDK | Ferramentas de desenvolvimento |
@rebasepro/forms |
Gerenciamento leve de estado de formulários em React | Frontend |
@rebasepro/plugin-ai |
Plugin de preenchimento automático de campos com IA | Frontend |
@rebasepro/plugin-data-import-export |
Importação e exportação de CSV/JSON/Excel | Frontend |
@rebasepro/inference |
Infere propriedades de coleção a partir de linhas de exemplo (a importação “criar uma coleção a partir de um arquivo” do admin) | Frontend |
Fluxo de Dados
Seção intitulada “Fluxo de Dados”Fluxo de Leitura
Seção intitulada “Fluxo de Leitura”- O usuário abre uma coleção no Rebase CMS
- O SDK tipado envia
GET /api/data/:slug+ abre uma assinatura WebSocket - O backend consulta o PostgreSQL via Drizzle ORM
- O transformador de dados desserializa os registros do banco de dados no formato de entidade
- A resposta é enviada para o frontend, os componentes são renderizados
- O WebSocket mantém a visualização sincronizada em tempo real
Fluxo de Escrita
Seção intitulada “Fluxo de Escrita”- O usuário edita uma entidade no formulário
- Os callbacks
beforeSavesão executados (validação, transformação) - O SDK tipado envia
PATCH /api/data/:slug/:id - O backend serializa os valores, executa o
UPDATEdo Drizzle - Os callbacks
afterSavesão executados (efeitos colaterais) - A transmissão via
NOTIFYaciona a atualização do WebSocket para todos os clientes - Se o histórico estiver ativado, um snapshot é registrado
Próximos Passos
Seção intitulada “Próximos Passos”- Schema as Code — A abordagem TypeScript-first
- Visão Geral do Backend — Configuração do servidor
- Coleções — Defina seu esquema de dados