Aller au contenu

ADR-005 - Modèle d'Intergiciel PSR-15

ADR-005: Modèle d’Intergiciel PSR-15 pour XOOPS 4.0

Section intitulée « ADR-005: Modèle d’Intergiciel PSR-15 pour XOOPS 4.0 »

Adopter les gestionnaires de requêtes de serveur HTTP PSR-15 (intergiciels) pour améliorer le pipeline de traitement des requêtes.


Proposé - En évaluation pour la version XOOPS 4.0


XOOPS 2.5 utilise une approche monolithique de traitement des requêtes :

// Approche Actuelle: Traitement Séquentiel
require_once 'mainfile.php';
// → Initialisation du noyau
// → Authentification utilisateur
// → Chargement du module
// → Rendu de la page
// Tous dans un flux, préoccupations mélangées
  1. Préoccupations Mélangées - L’authentification, la journalisation, le routage sont tous entrelacés
  2. Difficile à Tester - Difficile de tester unitairement les étapes individuelles du traitement des requêtes
  3. Difficile à Étendre - Les modules ne peuvent se connecter que via preload/events
  4. Mauvaise Séparation - La logique de traitement des requêtes est dispersée dans le code
  5. Non Composable - Impossible de chaîner ou de réorganiser facilement les étapes de traitement

PSR-15 définit une interface standard pour l’intergiciel HTTP :

<?php
interface RequestHandlerInterface {
public function handle(ServerRequestInterface $request): ResponseInterface;
}
interface MiddlewareInterface {
public function process(
ServerRequestInterface $request,
RequestHandlerInterface $handler
): ResponseInterface;
}

Chaîne d’Intergiciels:

Requête
[Logger] → logs request
[Auth] → validates user session
[CORS] → checks cross-origin
[Router] → dispatches to handler
[Handler] → generates response
Réponse

Adopter la Pile d’Intergiciels PSR-15 pour XOOPS 4.0

Section intitulée « Adopter la Pile d’Intergiciels PSR-15 pour XOOPS 4.0 »

Mettez en œuvre un pipeline de traitement des requêtes basé sur les intergiciels suivant la norme PSR-15.

graph TD
subgraph "Request Processing Pipeline"
A["HTTP Request<br/>(PSR-7 ServerRequest)"]
B["Middleware Stack<br/>(PSR-15)"]
C["Logger Middleware"]
D["Session Middleware"]
E["Auth Middleware"]
F["CORS Middleware"]
G["Router Middleware"]
H["Handler<br/>(Controller/Action)"]
I["Response<br/>(PSR-7 Response)"]
end
A --> B
B --> C
C --> D
D --> E
E --> F
F --> G
G --> H
H --> I

  1. Séparation des Préoccupations - Chaque intergiciel gère une responsabilité
  2. Testabilité - Facile de tester unitairement les composants d’intergiciel individuels
  3. Composabilité - L’intergiciel peut être mélangé et réorganisé
  4. Conforme aux Normes - Utilise les normes PSR-15 et PSR-7
  5. Extensibilité - Les modules peuvent facilement ajouter des intergiciels personnalisés
  6. Débogage - Flux de requête clair à travers le pipeline
  7. Performance - Peut optimiser les couches d’intergiciel spécifiques
  8. Interopérabilité - Peut utiliser l’intergiciel PSR-15 tiers
  1. Courbe d’Apprentissage - Les développeurs doivent comprendre PSR-15
  2. Surcharge de Performance - Plus d’appels de fonction dans le pipeline
  3. Complexité - Plus de pièces mobiles qu’une approche monolithique
  4. Effort de Migration - Nécessite une refactorisation du code existant
  5. Dépendances - Nécessite une bibliothèque HTTP PSR-7

  • ADR-001: Architecture Modulaire - Fondation
  • ADR-004: Système de Sécurité - Utilise l’intergiciel pour auth
  • ADR-006: Auth à Deux Facteurs - Peut être un intergiciel


#xoops #adr #psr-15 #middleware #architecture #psr-7