ミドルウェア

リクエストとレスポンスの間に挟まる処理層で、認証・ログ・エラーハンドリングを横断的に適用する

設計Web

ミドルウェアとは

ミドルウェアは、リクエストとレスポンスの間に挟まる処理層で、認証、ログ、エラーハンドリング、CORS などの横断的関心事を一元的に適用する。Express、Koa、Hono などの Web フレームワークの基本概念。

ミドルウェアの流れ

リクエストはハンドラに到達する前に、認証、ログ、CORS などのミドルウェアを順番に通過する。各ミドルウェアはリクエストの検査・加工を行い、next() で次のミドルウェアに処理を渡す。レスポンスも逆順にミドルウェアを通過するため、エラー処理やレスポンスの加工も可能。

リクエスト → [認証][ログ][CORS] → ハンドラ → [エラー処理] → レスポンス
              ↑                              ↑
          ミドルウェア                    ミドルウェア

Express の例

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 のミドルウェア的機能を以下にまとめる。

機能API Gateway の対応
認証Cognito Authorizer, Lambda Authorizer
CORSCorsConfiguration
スロットリングUsage Plan
リクエスト検証Request Validator
WAFAWS WAF 統合

API Gateway がミドルウェアの役割を担うため、Lambda のコードをシンプルに保てる。

ミドルウェアの順序

ミドルウェアの順序を図で示す。

重要: ミドルウェアの実行順序は定義順

1. CORS (最初に実行、OPTIONS を早期返却)
2. ログ (全リクエストを記録)
3. 認証 (未認証は早期返却)
4. バリデーション
5. ハンドラ
6. エラーハンドリング (最後に実行)

実務での活用方法は関連書籍にも詳しい。

この記事は役に立ちましたか?

関連用語

関連する記事