Visión general de la arquitectura
Arquitectura del sistema
Sección titulada «Arquitectura del sistema»Rebase es una plataforma full-stack con cuatro capas:
┌─────────────────────────────────────────────────────────────────┐│ 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 │└─────────────────────────────────────────────────────────────────┘Componentes clave
Sección titulada «Componentes clave»Sistema de adaptadores de base de datos
Sección titulada «Sistema de adaptadores de base de datos»El backend se inicializa mediante un patrón unificado de adaptador de base de datos. La lógica específica de la base de datos se desacopla en su propio paquete, y el adaptador gestiona automáticamente el pooling de conexiones, la resolución de esquemas y el enrutamiento de eventos en tiempo real.
import { createPostgresAdapter } from "@rebasepro/server-postgres";
database: createPostgresAdapter({ connectionString: process.env.DATABASE_URL!})Las colecciones se resuelven automáticamente con el adaptador configurado mediante el registro interno de inyección de dependencias.
Registro de colecciones
Sección titulada «Registro de colecciones»El BackendCollectionRegistry es el índice en tiempo de ejecución de todas las colecciones, sus tablas de PostgreSQL, enums y relaciones de Drizzle. Se puebla al iniciar a partir de las definiciones de tus colecciones.
Servicio en tiempo real
Sección titulada «Servicio en tiempo real»La sincronización en tiempo real utiliza el mecanismo nativo LISTEN/NOTIFY de PostgreSQL:
- Ocurre una mutación de datos (insert, update, delete)
- El backend emite un
NOTIFYen un canal - El
RealtimeServicerecibe la notificación - Transmite el cambio a todos los clientes WebSocket conectados
- Los componentes de React se vuelven a renderizar con los nuevos datos
Para despliegues con múltiples instancias (por ejemplo, Cloud Run con múltiples réplicas), proporciona un connectionString en tu PostgresBootstrapper para que todas las réplicas compartan la misma conexión LISTEN.
Registro de almacenamiento
Sección titulada «Registro de almacenamiento»Al igual que los drivers, los backends de almacenamiento se registran en un registro. Puedes tener múltiples proveedores de almacenamiento (local, S3) y enrutar diferentes campos de archivos a diferentes backends mediante storageId.
Mapa de paquetes
Sección titulada «Mapa de paquetes»| Paquete | Rol | Usado por |
|---|---|---|
@rebasepro/types |
Interfaces de TypeScript para colecciones, propiedades, entidades, plugins | Todo |
@rebasepro/server |
Inicialización del servidor backend, API REST, autenticación, almacenamiento, WebSocket | Backend |
@rebasepro/client |
SDK tipado — transporte HTTP, WebSocket, autenticación | Frontend |
@rebasepro/app |
Framework de React — Scaffold, controladores, formularios, rutas, hooks | Frontend |
@rebasepro/ui |
Biblioteca de componentes de UI independiente (Tailwind v4 + Radix) | Frontend |
@rebasepro/app |
Vistas de inicio de sesión, hooks de controladores de autenticación, gestión de usuarios | Frontend |
@rebasepro/studio |
Editor de colecciones, consola SQL, consola JS, editor de RLS, explorador de almacenamiento | Frontend |
@rebasepro/cli |
CLI para generación de esquemas, migraciones de BD, generación de SDK | Herramientas de desarrollo |
@rebasepro/forms |
Gestión ligera del estado de formularios en React | Frontend |
@rebasepro/plugin-ai |
Plugin de autocompletado de campos impulsado por IA | Frontend |
@rebasepro/plugin-data-import-export |
Importación y exportación de CSV/JSON/Excel | Frontend |
@rebasepro/inference |
Infiere las propiedades de una colección a partir de filas de muestra (la importación «crear una colección desde un archivo» del admin) | Frontend |
Flujo de datos
Sección titulada «Flujo de datos»Flujo de lectura
Sección titulada «Flujo de lectura»- El usuario abre una colección en Rebase CMS
- El SDK tipado envía
GET /api/data/:slug+ abre una suscripción por WebSocket - El backend consulta PostgreSQL a través de Drizzle ORM
- El transformador de datos deserializa los registros de la base de datos al formato de entidad
- La respuesta se envía al frontend, los componentes se renderizan
- El WebSocket mantiene la vista sincronizada en tiempo real
Flujo de escritura
Sección titulada «Flujo de escritura»- El usuario edita una entidad en el formulario
- Se ejecutan los callbacks
beforeSave(validación, transformación) - El SDK tipado envía
PATCH /api/data/:slug/:id - El backend serializa los valores, ejecuta el
UPDATEde Drizzle - Se ejecutan los callbacks
afterSave(efectos secundarios) - La difusión de
NOTIFYactiva la actualización por WebSocket a todos los clientes - Si el historial está habilitado, se registra una instantánea
Próximos pasos
Sección titulada «Próximos pasos»- Schema as Code — El enfoque centrado en TypeScript
- Visión general del backend — Configuración del servidor
- Colecciones — Define tu esquema de datos