Panoramica dell'Architettura
Architettura del Sistema
Sezione intitolata “Architettura del Sistema”Rebase è una piattaforma full-stack con quattro livelli:
┌─────────────────────────────────────────────────────────────────┐│ Frontend Layer ││ React Admin UI • Custom Views • Plugins • Your App ││ @rebasepro/core • @rebasepro/ui • @rebasepro/studio │└───────────────────────────┬─────────────────────────────────────┘ │ HTTP + WebSocket ▼┌─────────────────────────────────────────────────────────────────┐│ Backend Layer ││ Hono HTTP Server • REST API • Auth • Storage • WS ││ @rebasepro/server-core │└───────────────────────────┬─────────────────────────────────────┘ │ Drizzle ORM ▼┌─────────────────────────────────────────────────────────────────┐│ Database Layer ││ PostgreSQL • Tables • RLS Policies • Realtime sync │└─────────────────────────────────────────────────────────────────┘Componenti Chiave
Sezione intitolata “Componenti Chiave”Sistema di Bootstrapper
Sezione intitolata “Sistema di Bootstrapper”Il backend si inizializza tramite un sistema di bootstrapper basato su plugin. La logica specifica del database è disaccoppiata in un proprio pacchetto, e i bootstrappers gestiscono l’inizializzazione del database, dell’autenticazione e dei servizi interni.
import { createPostgresAdapter } from "@rebasepro/server-postgresql";
database: createPostgresAdapter({ connectionString: process.env.DATABASE_URL! })Le collezioni si risolvono automaticamente rispetto al bootstrapper configurato tramite il registro interno di iniezione delle dipendenze.
Registro delle Collezioni
Sezione intitolata “Registro delle Collezioni”Il BackendCollectionRegistry è l’indice runtime di tutte le collezioni, le loro tabelle PostgreSQL, gli enum e le relazioni Drizzle. Viene popolato all’avvio dalle tue definizioni di collezione.
Servizio in Tempo Reale
Sezione intitolata “Servizio in Tempo Reale”La sincronizzazione in tempo reale utilizza il meccanismo nativo LISTEN/NOTIFY di PostgreSQL:
- Avviene una mutazione dei dati (inserimento, aggiornamento, eliminazione)
- Il backend emette un
NOTIFYsu un canale - Il
RealtimeServicericeve la notifica - Trasmette la modifica a tutti i client WebSocket connessi
- I componenti React si ri-renderizzano con i nuovi dati
Per deployments multi-istanza (ad esempio, Cloud Run con più repliche), fornisci una connectionString nel tuo PostgresBootstrapper in modo che tutte le repliche condividano la stessa connessione LISTEN.
Registro dello Storage
Sezione intitolata “Registro dello Storage”Come i driver, i backend di storage sono registrati in un registro. Puoi avere più provider di storage (locale, S3) e instradare diversi campi file a diversi backend usando storageId.
Mappa dei Pacchetti
Sezione intitolata “Mappa dei Pacchetti”| Package | Ruolo | Usato da |
|---|---|---|
@rebasepro/types | Interfacce TypeScript per collezioni, proprietà, entità, plugin | Tutto |
@rebasepro/server-core | Inizializzazione del server backend, REST API, autenticazione, storage, WebSocket | Backend |
@rebasepro/client | SDK client — Trasporto HTTP, WebSocket, autenticazione | Frontend |
@rebasepro/core | Framework React — Scaffold, controller, moduli, routing, hook | Frontend |
@rebasepro/ui | Libreria di componenti UI standalone (Tailwind v4 + Radix) | Frontend |
@rebasepro/auth | Viste di login, hook del controller di autenticazione, gestione utenti | Frontend |
@rebasepro/studio | Editor di collezioni, console SQL, console JS, editor RLS, browser di storage | Frontend |
@rebasepro/cli | CLI per generazione schema, migrazioni DB, generazione SDK | Strumenti di sviluppo |
@rebasepro/formex | Gestione dello stato dei form React leggera | Frontend |
@rebasepro/data_enhancement | Plugin di autocompletamento campi basato su AI | Frontend |
@rebasepro/data_import_export | Importazione ed esportazione CSV/JSON/Excel | Frontend |
@rebasepro/schema_inference | Rilevamento automatico dello schema dai dati del database esistenti | Backend/CLI |
Flusso dei Dati
Sezione intitolata “Flusso dei Dati”Flusso di Lettura
Sezione intitolata “Flusso di Lettura”- L’utente apre una collezione nell’interfaccia utente di amministrazione
- L’SDK client invia
GET /api/data/:slug+ 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 vengono renderizzati
- 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 client invia
PUT /api/data/:slug/:id - Il backend serializza i valori, esegue l’
UPDATEdi Drizzle - Vengono eseguiti i callback
afterSave(effetti collaterali) - La trasmissione
NOTIFYattiva l’aggiornamento WebSocket a tutti i client - Se la cronologia è abilitata, viene registrato uno snapshot
Prossimi Passi
Sezione intitolata “Prossimi Passi”- Schema come Codice — L’approccio TypeScript-first
- Panoramica del Backend — Configurazione del server
- Collezioni — Definisci il tuo schema dati