Une API modulaire et sécurisée par défaut
Découvrez comment le socle structure l'API, ferme les routes par défaut et sépare les modules fonctionnels des briques techniques.
Dans l'appApplication · BackendMis à jour 19 septembre 2026
Découvrez comment le socle structure l'API, ferme les routes par défaut et sépare les modules fonctionnels des briques techniques.
Le backend livré avec une application Maleus n'est pas une collection de routes générées au fil de l'eau. Il part d'un monolithe modulaire : une seule unité simple à déployer, découpée en modules fonctionnels qui isolent les responsabilités, les données et les dépendances.
La sécurité commence par une route fermée
Un garde d'authentification s'applique globalement. Chaque route doit déclarer explicitement l'un des deux contrats suivants :
@Auth, avec l'action ou la capability nécessaire ;@PublicApi, pour une route volontairement publique.Une route sans configuration est refusée. Une route marquée à la fois privée et publique l'est aussi. Cette règle transforme un oubli de sécurité en erreur visible au lieu d'exposer silencieusement un endpoint.
Les entrées sont validées par des schémas Zod. Les mêmes contrats alimentent la documentation OpenAPI et les clients générés. Les erreurs HTTP suivent un format commun, les cookies sont signés, les corps de requête sont bornés et les routes SDK cross-origin sont isolées dans une liste explicite sans credentials navigateur.
Le frontend améliore l'expérience en masquant ou en bloquant les actions indisponibles. L'API refait toujours le contrôle : elle reste la barrière de sécurité.
Un monolithe modulaire, pas un bloc indifférencié
Une fonctionnalité suit généralement quatre zones :
presentationreçoit et valide les requêtes ;servicesporte les cas d'usage et les règles métier ;datacontient tables et repositories ;testsverrouille le comportement attendu.Le noyau transversal regroupe l'identité, les tenants, les groupes, la sécurité, la base de données, le SSO et les clés API. Les domaines métier vivent dans leurs propres modules. Les clients d'infrastructure, comme PostgreSQL, RabbitMQ, S3 ou une API tierce, sont injectés derrière des interfaces.
Cette séparation permet de remplacer une intégration, de tester un service sans son fournisseur réel et de faire évoluer un module sans répandre sa logique dans toute l'application.
Des contrats qui traversent toute la chaîne
Le schéma d'une requête ne sert pas seulement à rejeter une valeur invalide. Il devient un point de raccord entre :
Pour ajouter une opération métier, on décrit donc son entrée, sa sortie, son action de sécurité et son module propriétaire. Le client frontend consomme ensuite une API typée plutôt que des URL et des objets reconstruits à la main.
Des primitives réutilisables autour des modules
Le socle fournit aussi des bibliothèques partagées pour les besoins qui reviennent d'une application à l'autre :
Ces briques accélèrent un nouveau domaine, sans décider à sa place du modèle métier, de la rétention ou des règles d'accès.