Что такое Route Handlers
Route Handlers — API-роуты в App Router. Создаются файлами route.ts внутри app/.
Базовый пример
app/api/hello/route.ts:
import { NextResponse } from 'next/server';
export async function GET() {
return NextResponse.json({ message: 'Hello' });
}
URL: /api/hello.
Когда использовать
- Webhooks — от внешних сервисов
- Публичные API — для мобильных приложений
- Внешние интеграции — OAuth, платежи
- Streaming — SSE, AI-ответы
- Файлы — загрузка, скачивание
Когда не использовать
- Внутренние мутации — Server Actions проще
- Загрузка данных в Server Components — прямой доступ к БД
- Формы — Server Actions
Отличие от API Routes (Pages Router)
В Pages Router был pages/api/*.ts с export default function handler(req, res). В App Router — app/api/*/route.ts с экспортами GET, POST.
Методы
export async function GET(request: Request) {}
export async function POST(request: Request) {}
export async function PUT(request: Request) {}
export async function PATCH(request: Request) {}
export async function DELETE(request: Request) {}
export async function HEAD(request: Request) {}
export async function OPTIONS(request: Request) {}
Каждая функция — свой HTTP-метод. Если метод не экспортирован — 405.
Динамические сегменты
app/api/posts/[id]/route.ts
export async function GET(
request: Request,
{ params }: { params: Promise<{ id: string }> }
) {
const { id } = await params;
return NextResponse.json({ id });
}
Catch-all
app/api/[...path]/route.ts
export async function GET(
request: Request,
{ params }: { params: Promise<{ path: string[] }> }
) {
const { path } = await params;
return NextResponse.json({ path });
}
Response
// JSON
return NextResponse.json({ data });
return Response.json({ data });
// Статус
return NextResponse.json({ error: 'Not found' }, { status: 404 });
// Пустой
return new Response(null, { status: 204 });
// Текст
return new Response('Hello');
// Редирект
return NextResponse.redirect(new URL('/login', request.url));
Итоги
route.tsвapp/api/- Экспорты
GET,POST,PUT,PATCH,DELETE - Для внешних клиентов
- Server Actions для внутренних мутаций
params— промис