Panoramica dell'architettura
Architettura del sistema
Sezione intitolata “Architettura del sistema”Rebase è una piattaforma full-stack strutturata su quattro livelli:
┌─────────────────────────────────────────────────────────────────┐│ 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 │└─────────────────────────────────────────────────────────────────┘Componenti chiave
Sezione intitolata “Componenti chiave”Sistema di adattatori per database (Database Adapter System)
Sezione intitolata “Sistema di adattatori per database (Database Adapter System)”Il backend viene inizializzato attraverso un pattern unificato di adattatori per database. La logica specifica del database è disaccoppiata nel proprio pacchetto, e l’adattatore gestisce automaticamente il connection pooling, la risoluzione dello schema e l’instradamento degli eventi in tempo reale.
import { createPostgresAdapter } from "@rebasepro/server-postgres";
database: createPostgresAdapter({ connectionString: process.env.DATABASE_URL!})Le collezioni vengono risolte automaticamente rispetto all’adattatore configurato tramite il registro interno di dependency injection.
Registro delle collezioni (Collection Registry)
Sezione intitolata “Registro delle collezioni (Collection Registry)”Il BackendCollectionRegistry è l’indice a runtime di tutte le collezioni, delle loro tabelle PostgreSQL, degli enum e delle relazioni Drizzle. Viene popolato all’avvio a partire dalle definizioni delle tue collezioni.
Servizio in tempo reale (Realtime Service)
Sezione intitolata “Servizio in tempo reale (Realtime Service)”La sincronizzazione in tempo reale utilizza il meccanismo nativo LISTEN/NOTIFY di PostgreSQL:
- Si verifica una mutazione dei dati (insert, update, delete)
- Il backend emette un
NOTIFYsu un canale - Il
RealtimeServicericeve la notifica - Trasmette la modifica a tutti i client WebSocket connessi
- I componenti React eseguono il re-render con i nuovi dati
Per i deployment multi-istanza (ad es. Cloud Run con repliche multiple), fornisci una connectionString nel tuo PostgresBootstrapper in modo che tutte le repliche condividano la stessa connessione LISTEN.
Registro dello storage (Storage Registry)
Sezione intitolata “Registro dello storage (Storage Registry)”Analogamente ai driver, i backend di storage sono registrati all’interno di un registro. È possibile avere più provider di storage (locale, S3) e instradare diversi campi di tipo file verso differenti backend utilizzando storageId.
Mappa dei pacchetti
Sezione intitolata “Mappa dei pacchetti”| Pacchetto | Ruolo | Utilizzato da |
|---|---|---|
@rebasepro/types |
Interfacce TypeScript per collezioni, proprietà, entità, plugin | Tutto |
@rebasepro/server |
Inizializzazione del server backend, API REST, auth, storage, WebSocket | Backend |
@rebasepro/client |
SDK tipizzato — Trasporto HTTP, WebSocket, auth | Frontend |
@rebasepro/app |
Framework React — Scaffold, controller, form, route, hook | Frontend |
@rebasepro/ui |
Libreria standalone di componenti UI (Tailwind v4 + Radix) | Frontend |
@rebasepro/app |
Viste di login, hook per i controller di autenticazione, gestione utenti | Frontend |
@rebasepro/studio |
Editor delle collezioni, console SQL, console JS, editor RLS, browser dello storage | Frontend |
@rebasepro/cli |
CLI per generazione schemi, migrazioni DB, generazione SDK | Strumenti di sviluppo |
@rebasepro/forms |
Gestione leggera dello stato dei form in React | Frontend |
@rebasepro/plugin-ai |
Plugin di autocompletamento dei campi basato su IA | Frontend |
@rebasepro/plugin-data-import-export |
Importazione ed esportazione CSV/JSON/Excel | Frontend |
@rebasepro/inference |
Deduce le proprietà di una collection da righe di esempio (l’importazione «crea una collection da un file» dell’admin) | Frontend |
Flusso dei dati
Sezione intitolata “Flusso dei dati”Flusso di lettura
Sezione intitolata “Flusso di lettura”- L’utente apre una collezione in Rebase CMS
- L’SDK tipizzato invia
GET /api/data/:sluge apre una sottoscrizione WebSocket - Il backend interroga PostgreSQL tramite Drizzle ORM
- Il trasformatore di dati deserializza i record del database nel formato entità
- La risposta viene inviata al frontend, i componenti eseguono il rendering
- Il WebSocket mantiene la vista sincronizzata in tempo reale
Flusso di scrittura
Sezione intitolata “Flusso di scrittura”- L’utente modifica un’entità nel form
- Vengono eseguiti i callback
beforeSave(validazione, trasformazione) - L’SDK tipizzato invia
PATCH /api/data/:slug/:id - Il backend serializza i valori, esegue l’
UPDATEdi Drizzle - Vengono eseguiti i callback
afterSave(effetti collaterali) - La trasmissione del
NOTIFYattiva l’aggiornamento WebSocket su tutti i client - Se la cronologia è abilitata, viene registrato uno snapshot
Passaggi successivi
Sezione intitolata “Passaggi successivi”- Schema as Code — L’approccio TypeScript-first
- Panoramica del Backend — Configurazione del server
- Collezioni — Definisci lo schema dei tuoi dati