Aperçu de l'architecture
Architecture du système
Section intitulée « Architecture du système »Rebase est une plateforme full-stack articulée autour de quatre couches :
┌─────────────────────────────────────────────────────────────────┐│ 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 │└─────────────────────────────────────────────────────────────────┘Composants clés
Section intitulée « Composants clés »Système d’adaptateur de base de données
Section intitulée « Système d’adaptateur de base de données »Le backend s’initialise via un modèle unifié d’adaptateur de base de données. La logique spécifique à la base de données est découplée dans son propre package, et l’adaptateur gère automatiquement le pooling de connexions, la résolution de schéma et le routage des événements en temps réel.
import { createPostgresAdapter } from "@rebasepro/server-postgres";
database: createPostgresAdapter({ connectionString: process.env.DATABASE_URL!})Les collections se résolvent automatiquement par rapport à l’adaptateur configuré via le registre interne d’injection de dépendances.
Registre des collections
Section intitulée « Registre des collections »Le BackendCollectionRegistry est l’index d’exécution de toutes les collections, de leurs tables PostgreSQL, de leurs enums et de leurs relations Drizzle. Il est alimenté au démarrage à partir de vos définitions de collections.
Service en temps réel
Section intitulée « Service en temps réel »La synchronisation en temps réel utilise le mécanisme natif LISTEN/NOTIFY de PostgreSQL :
- Une mutation de données se produit (insertion, mise à jour, suppression)
- Le backend émet un
NOTIFYsur un canal - Le
RealtimeServicereçoit la notification - Il diffuse le changement à tous les clients WebSocket connectés
- Les composants React effectuent un nouveau rendu avec les nouvelles données
Pour les déploiements multi-instances (par exemple, Cloud Run avec plusieurs réplicas), fournissez une connectionString dans votre PostgresBootstrapper afin que tous les réplicas partagent la même connexion LISTEN.
Registre de stockage
Section intitulée « Registre de stockage »Tout comme les pilotes, les backends de stockage sont enregistrés dans un registre. Vous pouvez avoir plusieurs fournisseurs de stockage (local, S3) et router différents champs de fichiers vers différents backends à l’aide de storageId.
Carte des packages
Section intitulée « Carte des packages »| Package | Rôle | Utilisé par |
|---|---|---|
@rebasepro/types |
Interfaces TypeScript pour les collections, propriétés, entités, plugins | Tout |
@rebasepro/server |
Initialisation du serveur backend, API REST, authentification, stockage, WebSocket | Backend |
@rebasepro/client |
SDK client — Transport HTTP, WebSocket, authentification | Frontend |
@rebasepro/app |
Framework React — Scaffold, contrôleurs, formulaires, routes, hooks | Frontend |
@rebasepro/ui |
Bibliothèque de composants d’interface utilisateur autonome (Tailwind v4 + Radix) | Frontend |
@rebasepro/app |
Vues de connexion, hooks de contrôleur d’authentification, gestion des utilisateurs | Frontend |
@rebasepro/studio |
Éditeur de collection, console SQL, console JS, éditeur RLS, explorateur de stockage | Frontend |
@rebasepro/cli |
CLI pour la génération de schéma, les migrations de base de données, la génération de SDK | Outils de dév |
@rebasepro/forms |
Gestion d’état de formulaire React légère | Frontend |
@rebasepro/plugin-ai |
Plugin d’autocomplétion de champs alimenté par l’IA | Frontend |
@rebasepro/plugin-data-import-export |
Importation et exportation CSV/JSON/Excel | Frontend |
@rebasepro/inference |
Détection automatique de schéma à partir des données existantes de la base de données | Backend/CLI |
Flux de données
Section intitulée « Flux de données »Flux de lecture
Section intitulée « Flux de lecture »- L’utilisateur ouvre une collection dans Rebase CMS
- Le SDK client envoie
GET /api/data/:slug+ ouvre une souscription WebSocket - Le backend interroge PostgreSQL via Drizzle ORM
- Le transformateur de données désérialise les enregistrements de la base de données au format entité
- La réponse est envoyée au frontend, les composants effectuent le rendu
- WebSocket maintient la vue synchronisée en temps réel
Flux d’écriture
Section intitulée « Flux d’écriture »- L’utilisateur modifie une entité dans le formulaire
- Les callbacks
beforeSaves’exécutent (validation, transformation) - Le SDK client envoie
PATCH /api/data/:slug/:id - Le backend sérialise les valeurs, exécute l’
UPDATEDrizzle - Les callbacks
afterSaves’exécutent (effets secondaires) - La diffusion
NOTIFYdéclenche la mise à jour WebSocket vers tous les clients - Si l’historique est activé, un instantané est enregistré
Étapes suivantes
Section intitulée « Étapes suivantes »- Schema as Code — L’approche axée sur TypeScript
- Backend Overview — Configuration du serveur
- Collections — Définissez votre schéma de données