ミドルウェア
リクエストとレスポンスの間に挟まる処理層で、認証・ログ・エラーハンドリングを横断的に適用する
設計Web
ミドルウェアとは
ミドルウェアは、リクエストとレスポンスの間に挟まる処理層で、認証、ログ、エラーハンドリング、CORS などの横断的関心事を一元的に適用する。Express、Koa、Hono などの Web フレームワークの基本概念。
ミドルウェアの流れ
リクエスト → [認証] → [ログ] → [CORS] → ハンドラ → [エラー処理] → レスポンス
↑ ↑
ミドルウェア ミドルウェア
Express の例
import express from 'express';
const app = express();
// ログミドルウェア
app.use((req, res, next) => {
console.log(`${req.method} ${req.path}`);
next(); // 次のミドルウェアへ
});
// 認証ミドルウェア
app.use('/api', (req, res, next) => {
const token = req.headers.authorization;
if (!token) return res.status(401).json({ error: 'Unauthorized' });
next();
});
app.get('/api/users', (req, res) => res.json({ users: [] }));
ミドルウェアのパターン
典型的なミドルウェアには、トークンの検証や権限チェックを行う認証・認可、リクエスト/レスポンスの記録を行うログ、例外をキャッチして統一レスポンスを返すエラーハンドリング、クロスオリジンヘッダーを付与する CORS、リクエストボディを検証するバリデーション、リクエスト数を制限するレート制限がある。
API Gateway のミドルウェア的機能
| 機能 | API Gateway の対応 |
|---|---|
| 認証 | Cognito Authorizer, Lambda Authorizer |
| CORS | CorsConfiguration |
| スロットリング | Usage Plan |
| リクエスト検証 | Request Validator |
| WAF | AWS WAF 統合 |
API Gateway がミドルウェアの役割を担うため、Lambda のコードをシンプルに保てる。
ミドルウェアの順序
重要: ミドルウェアの実行順序は定義順
1. CORS (最初に実行、OPTIONS を早期返却)
2. ログ (全リクエストを記録)
3. 認証 (未認証は早期返却)
4. バリデーション
5. ハンドラ
6. エラーハンドリング (最後に実行)
実務での活用方法は関連書籍にも詳しい。