Publicado
- 3 min read
Usando APIs no Next.js 15: Guia Essencial para Iniciantes

Introdução
O Next.js 15 não é apenas uma ferramenta para criar interfaces de usuário com React — ele também permite que você construa APIs diretamente dentro da sua aplicação. Essa funcionalidade elimina a necessidade de um backend separado para projetos simples ou de médio porte, tornando o desenvolvimento mais ágil.
Neste post, vamos explorar como criar rotas de API no Next.js 15, entender como elas funcionam e como consumi-las no frontend com exemplos práticos.
Pré-requisitos
Para acompanhar este guia, é bom ter:
- Conhecimentos básicos de JavaScript
- Familiaridade com React
- Node.js e npm instalados
- Conhecimento básico sobre requisições HTTP (GET, POST)
Criando APIs com Next.js 15
Estrutura do diretório api/
No Next.js 15, rotas de API são criadas dentro da pasta app/api/
. Cada arquivo representa um endpoint.
app/
└── api/
└── hello/
└── route.ts
Exemplo: Criando a rota GET /api/hello
// app/api/hello/route.ts
import { NextResponse } from 'next/server'
export async function GET() {
return NextResponse.json({ message: 'Olá do backend Next.js!' })
}
Inicie o servidor com npm run dev
e acesse: http://localhost:3000/api/hello
Consumindo a API no Frontend
Agora vamos criar uma página que consome esse endpoint usando fetch
.
// app/page.tsx
'use client'
import { useEffect, useState } from 'react'
export default function Home() {
const [mensagem, setMensagem] = useState('')
useEffect(() => {
fetch('/api/hello')
.then((res) => res.json())
.then((data) => setMensagem(data.message))
}, [])
return (
<div>
<h1>Mensagem da API:</h1>
<p>{mensagem}</p>
</div>
)
}
Mini-projeto: Criando uma API de Comentários
Objetivo
Criar uma API que aceita comentários via POST
e os retorna com GET
.
Estrutura
app/
└── api/
└── comentarios/
└── route.ts
Código da API
// app/api/comentarios/route.ts
import { NextRequest, NextResponse } from 'next/server'
let comentarios: string[] = []
export async function GET() {
return NextResponse.json({ comentarios })
}
export async function POST(request: NextRequest) {
const { texto } = await request.json()
comentarios.push(texto)
return NextResponse.json({ ok: true })
}
Consumindo no Frontend
// app/page.tsx
'use client'
import { useState, useEffect } from 'react'
export default function ComentariosPage() {
const [comentarios, setComentarios] = useState<string[]>([])
const [novoComentario, setNovoComentario] = useState('')
useEffect(() => {
fetch('/api/comentarios')
.then((res) => res.json())
.then((data) => setComentarios(data.comentarios))
}, [])
const enviarComentario = async () => {
await fetch('/api/comentarios', {
method: 'POST',
body: JSON.stringify({ texto: novoComentario })
})
setNovoComentario('')
const res = await fetch('/api/comentarios')
const data = await res.json()
setComentarios(data.comentarios)
}
return (
<div>
<h1>Comentários</h1>
<input value={novoComentario} onChange={(e) => setNovoComentario(e.target.value)} />
<button onClick={enviarComentario}>Enviar</button>
<ul>
{comentarios.map((c, i) => (
<li key={i}>{c}</li>
))}
</ul>
</div>
)
}
Próximos passos
- Adicionar persistência usando banco de dados com Prisma ou Supabase
- Criar autenticação com middleware e cookies
- Explorar rotas dinâmicas de API
- Implementar validação de dados com Zod
Materiais de Apoio
- 📘 Documentação de API Routes no Next.js
- 🎥 Vídeo: Construindo APIs com Next.js
- 📕 HTTP para iniciantes (MDN)
- 📗 React - useEffect e fetch
Com esse conhecimento, você já pode criar aplicações completas usando apenas Next.js! 🚀