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 になった。

関連

出典