Architecture de BWEB

Vue d'ensemble
"Vous connaissez 4D ? Vous connaissez BWEB."
BWEB est un composant 4D qui permet de construire des applications web complètes (sites publics, back-offices, portails clients) entièrement depuis une base 4D, sans écrire de HTML/CSS/JS manuellement.
Les pages sont stockées comme données structurées dans les tables 4D. Le framework lit ces données, génère du HTML + Tailwind CSS à la volée, et le sert au navigateur.
Les 4 piliers
| Pilier | Description |
|---|---|
| Composant 4D | Tables, méthodes, classes. S'ajoute à tout projet 4D existant. |
| Tailwind CSS | CSS utility-first. Design moderne et responsive out of the box. |
| Éditeur WYSIWYG | Drag and drop. Aperçu instantané. Le Dev Panel. |
| ORDA natif | Connexion directe aux DataClasses. Pas de REST, pas d'API intermédiaire. |
Architecture technique
Le serveur 4D génère le HTML complet. Le navigateur reçoit une page prête à l'emploi. Les interactions passent par POST + WebSocket.
| Navigateur (Client) | Serveur 4D | |||
|---|---|---|---|---|
| HTML + Tailwind CSS | WebSocket HTTP POST | BSPK_WEB_ON_CONNECTION (routeur principal) | ||
| bweb.js (framework JS) | Tables : BSPK_WEB_DOMAIN, BSPK_WEB_DOMAIN_MENU, BSPK_WEB_CONTENT | |||
| Bootstrap Icons | Moteur : WebFormController, Générateur CSS Tailwind, BSPK_Translate (i18n) | |||
Rendu serveur vs client
BWEB a fait le choix du rendu serveur (SSR) plutôt que du rendu client (React/Vue). Pourquoi ?
| Caractéristique | React | BWEB |
|---|---|---|
| Compétences requises | 4D + React + TypeScript | 4D uniquement |
| Licence | 4D REST requise | 4D Web suffisant |
| Sécurité | Le client décide | Le serveur décide |
| Blocs protégés | Cachés en CSS | Absents du HTML |
| État | Client (Redux/Zustand) | Serveur (variables process) |
| Temps réel | À coder soi-même | WebSocket intégré |
| Dépendances frontend | node_modules (200KB+) | Aucune |
"Pas autorisé à voir un bouton ? Le HTML du bouton n'existe pas."
Structure des tables
| Niveau | Table | Description |
|---|---|---|
| 1 | BSPK_WEB_DOMAIN | 1 domaine = 1 site web |
| 2 | BSPK_WEB_DOMAIN_MENU | N pages et composants par domaine |
| 3 | BSPK_WEB_CONTENT | N blocs par page (arbre UI via parentUuid) |
Tables de support
| Table | Rôle |
|---|---|
| BSPK_WEB_DOMAIN_MENU_PARAMETER | URLs dynamiques ({supplierId}...) |
| BSPK_WEB_REDIRECT | Redirections 301/302 |
| BSPK_WEB_DOMAIN_LANG | Langues par domaine |
| BSPK_WEB_LIST / LIST_ITEM | Listes déroulantes |
| BSPK_WEB_COOKIE_CONSENT | Consentement RGPD |
| BSPK_USER / GROUP / RIGHT | Utilisateurs et permissions |
| BSPK_FILE | Fichiers et médias |
| BSPK_HISTORY | Audit et historique |
Cycle de vie d'une requête
| Étape | Action | Détail |
|---|---|---|
| 1 | HTTPS forcé | Si cert.pem présent, redirection automatique HTTP vers HTTPS |
| 2 | Licence + Session | Vérification du composant et de la session utilisateur |
| 3 | Résolution URL | Domaine, puis Page, puis Paramètres dynamiques |
| 4 | Hook base hôte | BSPH_WEB_ON_CONNECTION peut intercepter/rediriger |
| 5 | Contrôle de sécurité | Droits d'accès, validation, filtrage POST |
| 6 | Rendu | Chargement des blocs, génération HTML + Tailwind, envoi au navigateur |
| 7 | WebSocket | Établissement de la connexion temps réel pour les interactions |
Avantages business
- Pas de licence REST : POST/WebSocket = serveur web 4D standard. 300K utilisateurs = différence de coût massive.
- Zéro dépendances frontend : Pas de React, Angular, Vue. Pas de bundle 200KB+. Pas de breaking changes.
- Entity serveur : Source unique de vérité. Pas de copie client. STAMP géré nativement par ORDA.
- Node.js = outil serveur : Tailwind CLI, Puppeteer (PDF). Le navigateur ne reçoit que HTML + Tailwind + vanilla JS.

