API routes no Next.js: exemplos de Route Handlers

Exemplos de Route Handlers no Next.js

API routes no Next.js (Route Handlers): GET, POST, autenticação | We.Inc

Exemplos de Route Handlers do Next.js para o App Router, prontos para copiar: GET com query params, POST com validação, params dinâmicos como promise, verificação de autenticação, CORS e webhooks.

No App Router, um endpoint de API é um arquivo route.ts dentro de app, por exemplo app/api/todos/route.ts. Exporte funções async com o nome dos métodos HTTP, como GET e POST; cada uma recebe um Request e retorna um Response, normalmente Response.json(). Os segmentos dinâmicos chegam como uma promise params que você aguarda com await. Desde o Next.js 15, os handlers GET são dinâmicos por padrão.

O básico dos Route Handlers

As API routes do Pages Router usavam os objetos req e res. Os Route Handlers usam no lugar deles os objetos padrão da Web, Request e Response, o que confunde quem copia respostas antigas. Abaixo estão os padrões de que você vai precisar em um app de verdade, todos escritos para o App Router atual, além de um pequeno testador que mostra os códigos de status que um POST com validação deve devolver.

Perguntas frequentes

As API routes do Next.js foram descontinuadas?

As rotas pages/api continuam funcionando no Pages Router. No App Router, o equivalente é um Route Handler, um arquivo route.ts que usa os objetos Request e Response da Web e não precisa de configuração de bodyParser.

Quais métodos HTTP um route.ts pode exportar?

GET, POST, PUT, PATCH, DELETE, HEAD e OPTIONS. Chamar um método que você não exportou retorna 405 Method Not Allowed.

Por que preciso usar await em params?

Desde o Next.js 15, o params do argumento de contexto é uma promise. Escreva const { id } = await params. O tipo auxiliar RouteContext, gerado por next dev, next build ou next typegen, dá a você params tipados a partir do caminho da rota.

Os Route Handlers GET ficam em cache?

Não mais por padrão. O Next.js 15 mudou os handlers GET de estáticos para dinâmicos. Para voltar a usar cache, use export const dynamic = 'force-static' ou um valor de revalidate. Com Cache Components ativado, coloque use cache em uma função auxiliar chamada pelo handler, não no corpo do handler.

Devo usar um Route Handler ou uma Server Action?

Use uma Server Action para mutações disparadas pelos seus próprios formulários e botões. Use um Route Handler quando algo fora da sua árvore React chamar a URL: um app mobile, um webhook, um cron job ou um script de terceiros.

Estrutura de arquivos

Códigos de status que os clientes entendem

Checklist de segurança

Exemplos de Route Handlers

GET com uma busca na query

app/api/todos/route.ts. O parâmetro q filtra a lista; uma busca vazia retorna tudo.

POST com validação Zod e verificação de autenticação

Retorna 401 sem sessão, 400 com erros por campo para um corpo inválido e, caso contrário, 201 com o novo registro. getSession representa a sua biblioteca de autenticação.

Segmento dinâmico com params aguardados

app/api/todos/[id]/route.ts. params é uma promise no Next.js 15 e versões posteriores.

CORS para uma origem confiável

Responde ao preflight do navegador e à requisição real com a mesma origem permitida.

Chamando o handler a partir de um Client Component

O helper de fetch lê primeiro o código de status, para que o formulário possa mostrar os erros por campo de um 400.

API routes do Pages Router vs Route Handlers

A mesma tarefa, APIs diferentes

Testador de POST

Edite um corpo JSON, escolha se quem chama está logado e veja o código de status e a resposta que o exemplo de POST com validação devolveria.

Método

Corpo da requisição (JSON)

Quem chama tem uma sessão válida

Resposta

PUT mostra o 405 que o Next.js envia para um método que o arquivo não exporta.

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site