コンテンツにスキップ

ADR-005 - PSR-15 ミドルウェア パターン

ADR-005: XOOPS 4.0向けPSR-15ミドルウェア パターン

Section titled “ADR-005: XOOPS 4.0向けPSR-15ミドルウェア パターン”

リクエスト処理パイプラインの改善のためPSR-15 HTTPサーバー リクエスト ハンドラー(ミドルウェア)を採用


提案 - XOOPS 4.0リリース向けの評価中


XOOPS 2.5ではモノリシック リクエスト処理アプローチを使用:

// 現在: 順序処理
require_once 'mainfile.php';
// → カーネル初期化
// → ユーザー認証
// → モジュール ロード
// → ページ レンダリング
// すべて1つのフロー内、混合関心
  1. 混合関心 - 認証、ロギング、ルーティングがすべて絡み合い
  2. テストが難しい - ユニット テストが困難
  3. 拡張が難しい - モジュールはプリロード/イベントのみでフック可能
  4. 分離が不十分 - リクエスト処理ロジックがコード全体に散在
  5. 構成不可 - ステップを簡単に並べかえたり再順序付けできない

PSR-15は標準インターフェースを定義:

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

ミドルウェア チェーン:

リクエスト
[ロガー] → リクエストをログ
[認証] → ユーザー セッションを検証
[CORS] → クロスオリジンを確認
[ルーター] → ハンドラーにディスパッチ
[ハンドラー] → レスポンスを生成
レスポンス

XOOPS 4.0向けPSR-15ミドルウェア スタックを採用

Section titled “XOOPS 4.0向けPSR-15ミドルウェア スタックを採用”

  1. 関心の分離 - 各ミドルウェアが1つの責任を処理
  2. テスト可能性 - 個別のミドルウェア コンポーネントを簡単にユニット テスト
  3. 構成可能性 - ミドルウェアを混合、再順序付け可能
  4. 標準準拠 - PSR-15およびPSR-7基準を使用
  5. 拡張性 - モジュールはカスタム ミドルウェアを簡単に追加
  6. デバッギング - パイプライン経由のクリアなリクエスト フロー
  7. パフォーマンス - 特定のミドルウェア レイヤーを最適化可能
  8. 相互運用性 - サードパーティのPSR-15ミドルウェアを使用可能
  1. 学習曲線 - 開発者はPSR-15を理解する必要
  2. パフォーマンス オーバーヘッド - パイプライン内の関数呼び出しが増加
  3. 複雑さ - モノリシック アプローチより多くの動く部分
  4. 移行努力 - 既存コードのリファクタリングが必要
  5. 依存関係 - PSR-7 HTTPライブラリが必要

  • PSR-7 HTTP メッセージ ラッパーを実装
  • ミドルウェア ディスパッチャーを作成
  • コア ミドルウェア(セッション、認証)を実装
  • カーネルをミドルウェアを使用するように更新
  • 既存機能をミドルウェアに移行
  • モジュール ミドルウェア サポートを追加
  • ミドルウェア テスト ユーティリティを作成
  • 包括的なドキュメントを作成
  • 古いコード用の互換性レイヤーを提供
  • モジュール更新をサポート
  • パフォーマンス最適化
  • セキュリティ監査
  • XOOPS 4.0をミドルウェアでリリース
  • 古いプリロード/フック システムを廃止予定
  • コミュニティ フィードバックと更新

  • ADR-001: モジュール式アーキテクチャ - 基盤
  • ADR-004: セキュリティ システム - 認証用ミドルウェア を使用
  • ADR-006: 二要素認証 - ミドルウェアとして可能


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