Architektur-Übersicht
Systemarchitektur
Abschnitt betitelt „Systemarchitektur“Rebase ist eine Full-Stack-Plattform mit vier Schichten:
┌─────────────────────────────────────────────────────────────────┐│ Frontend-Schicht ││ React Admin UI • Custom Views • Plugins • Ihre App ││ @rebasepro/core • @rebasepro/ui • @rebasepro/studio │└───────────────────────────┬─────────────────────────────────────┘ │ HTTP + WebSocket ▼┌─────────────────────────────────────────────────────────────────┐│ Backend-Schicht ││ Hono HTTP Server • REST API • Auth • Speicher • WS ││ @rebasepro/server-core │└───────────────────────────┬─────────────────────────────────────┘ │ Drizzle ORM ▼┌─────────────────────────────────────────────────────────────────┐│ Datenbank-Schicht ││ PostgreSQL • Tabellen • RLS-Richtlinien • Echtzeitsync │└─────────────────────────────────────────────────────────────────┘Hauptkomponenten
Abschnitt betitelt „Hauptkomponenten“Datenbank-Adapter-System
Abschnitt betitelt „Datenbank-Adapter-System“Das Backend wird über ein einheitliches Datenbank-Adapter-Muster initialisiert. Die datenbankspezifische Logik ist in ihr eigenes Paket entkoppelt, und der Adapter kümmert sich automatisch um Connection Pooling, Schemaauflösung und Event-Routing in Echtzeit.
import { createPostgresAdapter } from "@rebasepro/server-postgresql";
database: createPostgresAdapter({ connectionString: process.env.DATABASE_URL!})Sammlungen werden automatisch über die interne Dependency-Injection-Registrierung mit dem konfigurierten Adapter aufgelöst.
Sammlungsregistrierung
Abschnitt betitelt „Sammlungsregistrierung“Das BackendCollectionRegistry ist der Laufzeitindex aller Sammlungen, ihrer PostgreSQL-Tabellen, Enums und Drizzle-Relationen. Es wird beim Start aus Ihren Sammlungsdefinitionen befüllt.
Echtzeitdienst
Abschnitt betitelt „Echtzeitdienst“Die Echtzeitsynchronisierung nutzt den nativen LISTEN/NOTIFY-Mechanismus von PostgreSQL:
- Eine Datenmutation findet statt (Einfügen, Aktualisieren, Löschen)
- Das Backend sendet ein
NOTIFYauf einem Kanal - Der
RealtimeServiceempfängt die Benachrichtigung - Er überträgt die Änderung an alle verbundenen WebSocket-Clients
- React-Komponenten rendern neu mit den neuen Daten
Für Multi-Instance-Deployments (z.B. Cloud Run mit mehreren Replikaten) geben Sie eine connectionString in Ihrem PostgresBootstrapper an, damit alle Replikate dieselbe LISTEN-Verbindung teilen.
Speicherregistrierung
Abschnitt betitelt „Speicherregistrierung“Wie Treiber werden auch Speicher-Backends in einer Registrierung erfasst. Sie können mehrere Speicheranbieter (lokal, S3) haben und verschiedene Dateifelder über storageId an verschiedene Backends leiten.
Paketübersicht
Abschnitt betitelt „Paketübersicht“| Paket | Rolle | Verwendet von |
|---|---|---|
@rebasepro/types | TypeScript-Schnittstellen für Sammlungen, Eigenschaften, Entitäten, Plugins | Alles |
@rebasepro/backend | Backend-Serverinitialisierung, REST-API, Auth, Speicher, WebSocket | Backend |
@rebasepro/client | Client-SDK — HTTP-Transport, WebSocket, Auth | Frontend |
@rebasepro/core | React-Framework — Scaffold, Controller, Formulare, Routen, Hooks | Frontend |
@rebasepro/ui | Eigenständige UI-Komponentenbibliothek (Tailwind v4 + Radix) | Frontend |
@rebasepro/auth | Login-Ansichten, Auth-Controller-Hooks, Benutzerverwaltung | Frontend |
@rebasepro/studio | Sammlungseditor, SQL-Konsole, JS-Konsole, RLS-Editor, Speicherbrowser | Frontend |
@rebasepro/cli | CLI für Schema-Generierung, DB-Migrationen, SDK-Generierung | Entwicklertools |
@rebasepro/formex | Leichtes React-Formularstatusmanagement | Frontend |
@rebasepro/data_enhancement | KI-gestütztes Plugin zur automatischen Feldvervollständigung | Frontend |
@rebasepro/data_import_export | CSV/JSON/Excel-Import und -Export | Frontend |
@rebasepro/schema_inference | Automatische Schemaerkennung aus vorhandenen Datenbankdaten | Backend/CLI |
Datenfluss
Abschnitt betitelt „Datenfluss“Lesefluss
Abschnitt betitelt „Lesefluss“- Der Benutzer öffnet eine Sammlung in der Admin-UI
- Das Client-SDK sendet
GET /api/data/:slug+ öffnet ein WebSocket-Abonnement - Das Backend fragt PostgreSQL über Drizzle ORM ab
- Der Datentransformator deserialisiert die Datenbankeinträge in das Entitätsformat
- Die Antwort wird an das Frontend gesendet, Komponenten rendern
- WebSocket hält die Ansicht in Echtzeit synchronisiert
Schreibfluss
Abschnitt betitelt „Schreibfluss“- Der Benutzer bearbeitet eine Entität im Formular
beforeSave-Callbacks werden ausgeführt (Validierung, Transformation)- Das Client-SDK sendet
PUT /api/data/:slug/:id - Das Backend serialisiert die Werte, führt Drizzle
UPDATEaus afterSave-Callbacks werden ausgeführt (Nebeneffekte)- Der
NOTIFY-Broadcast löst ein WebSocket-Update an alle Clients aus - Wenn der Verlauf aktiviert ist, wird ein Snapshot aufgezeichnet
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“- Schema als Code — Der TypeScript-First-Ansatz
- Backend-Übersicht — Serverkonfiguration
- Sammlungen — Definieren Sie Ihr Datenschema