R
Interview Deckreact · next.js · senior/staff
0·0·122
Next.js

Route Handlers

API routes do App Router. Arquivos route.ts com export GET/POST/PUT/DELETE.

Route Handlers são o equivalente App Router das API Routes (Pages Router). Arquivos route.ts (ou .js) que exportam funções nomeadas pelos métodos HTTP. Recebem Request, retornam Response. Suportam Edge ou Node runtime.

Problema
Pages Router usava /pages/api/* com export default. App Router precisava de uma nova convenção alinhada com Server Components.
Solução
app/api/.../route.ts com exports GET, POST, etc. Recebem Web Request standard, retornam Web Response. Mais alinhado com Web Standards.
Tip
Para mutações usadas só pelo seu app, prefira Server Actions. Para APIs públicas, webhooks, ou GET cacheável, use Route Handlers.
// app/api/posts/route.ts
import { NextResponse } from 'next/server';

export async function GET() {
  const posts = await db.posts.findAll();
  return NextResponse.json(posts);
}

export async function POST(req: Request) {
  const data = await req.json();
  const post = await db.posts.create({ data });
  return NextResponse.json(post, { status: 201 });
}

// app/api/posts/[id]/route.ts
export async function GET(
  req: Request,
  { params }: { params: { id: string } }
) {
  const post = await db.posts.findUnique({ where: { id: params.id } });
  if (!post) return new Response('Not found', { status: 404 });
  return NextResponse.json(post);
}
Q.Route Handler vs Server Action?
A.Route Handler: API endpoint público, webhook, GET cacheável, integração com app externo. Server Action: mutação tightly-coupled ao seu app, formularios.
Q.Como tipar Route Handlers?
A.params são tipados via second arg: GET(req: Request, { params }: { params: { id: string } }). Use Zod para validar body. NextResponse para tipos Next-específicos.
Q.Como cachear GET handlers?
A.GET handlers são cacheados por padrão (em build estático) se não usar APIs dinâmicas. Adicione export const dynamic = 'force-dynamic' para sempre dinâmico, ou export const revalidate = 60 para ISR.
40/122← →