TL;DR
Next.js の App Router で、app ディレクトリ内に置く特別なファイルの 1 つ。Web API(Route Handler)のエンドポイントになる。
なぜ必要か
Web 標準の Request と Response の API を使って、ルートごとに独自のリクエストハンドラを作れる。Pages Router の API Routes と違い、bodyParser などの追加の設定なしでリクエストボディを読める。
仕組み
route.ts から HTTP メソッド名(GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS)の関数を export すると、そのメソッドのリクエストを処理する。OPTIONS を定義しなければ、Next.js がほかに定義したメソッドをもとに Allow ヘッダを設定して自動で実装する。
第 1 引数の request は、Web の Request を拡張した NextRequest で、Cookie や解析済みの URL(nextUrl)を扱いやすい。第 2 引数の context の params は、Dynamic Routes のパラメータを返す Promise である。ページやレイアウトと同じ Route Segment Config も使える。
例
export async function GET(request: Request) {
return new Response("Hello, Next.js!")
}注意点
拡張子は .ts でなくてもよく、.js でもよい。
Next.js 15 で、GET ハンドラのデフォルトのキャッシュは静的から動的に変わり、context.params は Promise になった。