はじめに
この記事では、Next.js AppRouter の Web API の実装機能のひとつである Route Handlers の概要を記載します。
開発環境
開発環境は以下の通りです。
- Windows 11
- Next.js 14.2.13
- React 18.3.1
- TypeScript 5.5.4
ファイルの設置
Route Handlers は、app
ディレクトリ内に route.ts
というファイル名で定義する必要があります。
例として app/api/hello/route.ts
というテキストで "Hello World!"
を返す Route Handler を定義します。
import { NextResponse } from "next/server";
export async function GET() {
return new NextResponse("Hello World!");
}
この Route Handler をページコンポーネントで呼び出します。
export default async function Home() {
const res = await fetch("http://localhost:3000/api/hello");
const text = await res.text();
return (
<div>
<h1>Message from Hello API</h1>
<p>{text}</p>
</div>
);
}
画面上に Route Handler から受け取ったテキストが表示されます。
Route Handlers (route.ts
) は、page.tsx
や layout.tsx
同様 app
ディレクトリ内にネストして設置することができます。ただ、page.tsx
と同じ階層に置くことはできません。
Page | Route | 🙆♂️ / 🙅♂️ |
---|---|---|
app/page.ts | app/route.ts | 🙅♂️ |
app/page.ts | app/api/route.ts | 🙆♂️ |
app/[user]/page.ts | app/api/route.ts | 🙆♂️ |
HTTP リクエストメソッドごとの定義
Route Handlers は HTTP リクエストメソッドである GET
、POST
、PUT
、PATCH
、DELETE
、HEAD
、OPTIONS
をサポートしています。
サポート対象外のメソッドがコールされた場合、405 Method Not Allowed
を返します。
import { NextResponse } from "next/server";
export async function HOGE() {
return new NextResponse("hoge");
}
NextRequest
/ NextReaponse
Route Handlers は Web 標準の Fetch API に準拠しています。
そのため、Next.js の NextRequest
や NextReaponse
は、それぞれ Fetch API の Request
と Response
を基に作られています。
以下のように HTTP Status コードの指定もできます。
if (!authorized) {
return new NextResponse.json({ message: "Unauthorized" }, { status: 401 });
}