Skip to content

RouteHandlerについて

Route Handlerは、Next.jsのApp RouterでAPIルートを作成するための新しい方法です。pages/apiディレクトリに依存する従来のAPIルートとは異なり、app/apiディレクトリ内のroute.ts(または.js)ファイルとして定義されます。

Route Handlerは、RequestやResponseといったWeb標準のAPIに基づいているため、サーバーサイドのロジックをよりシンプルかつ柔軟に記述できます。

Route Handlerを作成するには、app/ディレクトリ内にapiという名前のディレクトリを作成し、その中にHTTPメソッドに対応する関数をエクスポートするroute.tsファイルを追加します。

app/api/hello/route.ts

import { NextResponse } from 'next/server';
export async function GET() {
return NextResponse.json({ message: 'Hello from Route Handler!' });
}
export async function POST(request: Request) {
const data = await request.json();
return NextResponse.json({ message: 'POST request received', data });
}
  • GET(): GETリクエストを処理します。
  • POST(): POSTリクエストを処理します。
  • NextResponse.json(): Responseオブジェクトの便利なラッパーで、JSON形式のレスポンスを簡単に作成できます。
  1. Web標準APIへの準拠

    • Route Handlerは、Requestオブジェクト(リクエストボディ、ヘッダー、URLなどを含む)とResponseオブジェクト(レスポンスを構築)というWeb標準APIに準拠しています。これにより、Node.jsの知識だけでなく、Web開発の一般的な知識が活かせます。
  2. HTTPメソッドごとの関数定義

    • 従来のAPIルートでは、1つのhandler関数内でreq.methodを使って分岐処理を行っていました。Route Handlerでは、GET, POST, PUT, DELETEなどのHTTPメソッドごとに個別の関数をエクスポートするだけで、ルーティングを自動的に処理してくれます。これにより、コードがより整理され、読みやすくなります。
  3. キャッシュと再検証(Revalidation)

    • Route Handlerは、App Routerの高度なキャッシュ機能と統合されています。デフォルトで静的(static)なレスポンスがキャッシュされるため、パフォーマンスが向上します。必要に応じて、以下の方法で再検証を制御できます。
      • revalidateオプション: fetchAPIでrevalidateオプションを指定することで、キャッシュを更新する頻度を制御できます。
      • 動的関数: headers(), cookies(), request()のような動的な関数を使用すると、自動的にレスポンスが動的(dynamic)にレンダリングされます。
特徴従来のAPIルート (pages/api)Route Handler (app/api)
ファイル名任意のファイル名(例: hello.jsroute.ts
ディレクトリpages/api/app/api/
リクエスト処理req.methodで分岐HTTPメソッドごとの関数(例: GET(), POST()
APINode.jsのhttp.ServerResponseWeb標準のRequestResponse
キャッシュキャッシュなし(動的)デフォルトで静的、柔軟な再検証が可能

新しいプロジェクトでは、これらの利点からRoute Handlerを使用することが推奨されます。Route Handlerは、単一のリポジトリ内で効率的なフルスタック開発を実現するNext.jsの基盤の一つです。