La création d'une application Web d'évolution complète nécessite une planification minutieuse et des décisions stratégiques dès le départ. Chaque choix, de la sélection du cadre à l'authentification, a un impact sur le coût, l'évolutivité et l'adaptabilité. Cet article détaille les choix de conception derrière la pile ORL, une solution de stockage complète réutilisable construite avec express, next.js et trpc.
La pile ORL vise à être un projet unique et déployable qui partage le code entre le backend et le frontend tout en permettant un déploiement indépendant. Il est conçu pour la rentabilité (fonctionnant initialement sur des VP à faible coût) mais avec l'évolutivité pour gérer la croissance future. Pour éviter une refactorisation coûteuse, les décisions clés ont été rendues d'avance sur treize domaines critiques: sélection du cadre, structure du projet, couche API, environnement et configuration, base de données, authentification et autorisation, validation et gestion des erreurs, gestion de l'État, internationalisation (I18N), journalisation, envoi de l'envoi (envoi , Testing et DevOps.
La pile ORL est disponible en monorepo sur github et un package NPM pour un échafaudage de projet facile.
(c'est 2025, et revisiter notre pile technologique est pratiquement un rituel annuel!)
Voici un résumé des principales décisions architecturales:
Une structure monorepo utilisant des espaces de travail PNPM facilite le partage de code entre le backend et le frontend, offrant une vitesse et une simplicité sur le fil ou les espaces de travail NPM. La structure du répertoire est organisée comme suit:
<code>apps - backend - ... - frontend - ... packages - shared - config - enums - i18n - schemas - scripts - services - types</code>
TRPC a été sélectionné sur REST et GraphQL pour son approche adaptée aux développeurs et sa sécurité de type de bout en bout. Son intégration transparente avec la requête Next.js et Tanstack minimise les plates-formes et améliore l'inférence du type.
T3 Env assure la validation statique des variables environnementales. Les classes de configuration personnalisées gèrent les paramètres statiques, tandis que ESM (modules ECMascript) prend en charge le partage de code entre le backend et le frontend. Le vent arrière CSS est utilisé pour le style frontal.
Une base de données MySQL conforme à l'acide a été choisie pour la fiabilité et les garanties de transaction. Drizzle Orm fournit une approche légère et sécurisée de type pour les interactions de base de données.
Un système d'authentification sans mot de passe personnalisé offre une flexibilité et un contrôle. La protection de base au niveau de l'itinéraire est implémentée à l'aide d'un indicateur protected
dans la définition des routes.
ZOD gère la validation d'entrée, tandis que les TRPC errorFormatter
standardise la gestion des erreurs. Les toasts SONNER affichent les erreurs aux utilisateurs. Une personnalité ErrorService
assure une manipulation des erreurs explicites.
Zustand gère l'état mondial synchrone simple et synchrone, tandis que la requête Tanstack gère la gestion de l'État asynchrone.
Une solution I18N personnalisée utilisant des fonctions de type type autonome avec la syntaxe des soins intensifs (via intl-messageformat
) fournit une sécurité de type et une partage d'arborescence. Les routes sont également entièrement traduites.
Pino fournit une journalisation structurée pour le backend et le frontend, offrant une vitesse et une sortie cohérente.
RENNENCE simplifie l'envoi des e-mails, le guidon crée des modèles de messagerie et MailSlurp facilite les tests de messagerie.
Le dramaturge gère les tests API Frontend E2E et Backend (intégrés à SuperTest).
AWS ECS, Terraform, GitHub Actions, S3 et CloudFront Gérer l'infrastructure et CI / CD, détaillé dans un référentiel séparé.
La pile ORL est open source et accueille les contributions. Signaler les problèmes ou poser des questions via le référentiel GitHub.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!