This website uses cookies

Our website, platform and/or any sub domains use cookies to understand how you use our services, and to improve both your experience and our marketing relevance.

A Agência da Próxima Geração chegou. Junte-se a mais de 3.000 profissionais de agências na Agency Advantage 2026. Registar gratuitamente→

Next.js API Routes: como funcionam e como criar pontos finais REST

Atualizado em Agosto 7, 2026

4 min de leitura

Pontos-chave

  • Base de código unificada: as rotas da API do Next.js permitem-te criar e gerir pontos de extremidade do backend diretamente no teu projeto frontend.
  • Métodos padrão: Os endpoints gerem os dados ao associar métodos HTTP padrão (GET, POST, PUT, DELETE) a ações específicas do backend.
  • Fiabilidade da API: Independentemente da base de dados ou das ferramentas específicas utilizadas, um ponto de acesso seguro requer uma validação rigorosa dos dados introduzidos e um tratamento adequado dos erros.

Os endpoints REST são usados pelas aplicações para ligar o front-end ao back-end. Seja qual for a aplicação web que usares, por exemplo, a Amazon, onde carregas dados, preenches um formulário ou atualizas itens no teu carrinho de compras, todas as ações acontecem através de uma API.

Instalar o Node.js

C:\Users\abdulrehman\Downloads\node-v24.15.0-win-x64\node-v24.15.0-win-x64

Abrir a pasta do projeto no Prompt de Comandos

cd C:\Users\abdulrehman\Desktop\tasks-api

Configurar o Prompt de Comando para o executável do Node

set PATH=%PATH%;C:\Users\abdulrehman\Downloads\node-v24.15.0-win-x64\node-v24.15.0-win-x64
node -v
npm -v

Criar o projeto Next.js

npx create-next-app@latest .

Executar o projeto

npm run dev

Instalar o Prisma

npm install prisma@^6 --save-dev
npm install @prisma/client@^6

A inicializar o Prisma

npx prisma init --datasource-provider sqlite

Verificar os ficheiros gerados

DATABASE_URL="file:./dev.db"
generator client {
  provider = "prisma-client-js"
}
datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

Adicionar o modelo «Tarefa»

model Task {
  id          Int      @id @default(autoincrement())
  title       String
  description String?
  completed   Boolean  @default(false)
  createdAt   DateTime @default(now())
}

Executar a primeira migração

npx prisma migrate dev --name init

Configurar o cliente Prisma

import { PrismaClient } from "@prisma/client";
const globalForPrisma = global as unknown as { prisma: PrismaClient };
export const prisma = globalForPrisma.prisma || new PrismaClient();
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;

Criar o ficheiro de percurso

app/api/tasks/route.ts

O ponto de extremidade GET

import { NextResponse } from "next/server";
import { prisma } from "@/app/lib/prisma";
export async function GET() {
  const tasks = await prisma.task.findMany();
  return NextResponse.json(tasks);
}

O Endpoint POST

export async function POST(request: Request) {
  const body = await request.json();
  const task = await prisma.task.create({
    data: {
      title: body.title,
      description: body.description,
    },
  });
  return NextResponse.json(task, { status: 201 });
}

Testar os pontos finais

npm run dev

GET /api/tasks

[]

POST /api/tasks

{
  "title": "Write the tutorial",
  "description": "Finish the Next.js API routes guide"
}
{
  "id": 1,
  "title": "Write the tutorial",
  "description": "Finish the Next.js API routes guide",
  "completed": false,
  "createdAt": "2026-05-12T10:32:14.000Z"
}
[
  {
    "id": 1,
    "title": "Write the tutorial",
    "description": "Finish the Next.js API routes guide",
    "completed": false,
    "createdAt": "2026-05-12T10:32:14.000Z"
  }
]

Criar o ficheiro de rotas dinâmicas

app/api/tasks/[id]/route.ts

O ponto de acesso GET por ID

import { NextResponse } from "next/server";
import { prisma } from "@/app/lib/prisma";
export async function GET(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  const { id } = await params;
  const task = await prisma.task.findUnique({
    where: { id: Number(id) },
  });
  if (!task) {
    return NextResponse.json({ error: "Task not found" }, { status: 404 });
  }
  return NextResponse.json(task);
}

O Endpoint PUT

export async function PUT(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  const { id } = await params;
  const body = await request.json();
  const task = await prisma.task.update({
    where: { id: Number(id) },
    data: {
      title: body.title,
      description: body.description,
      completed: body.completed,
    },
  });
  return NextResponse.json(task);
}

O Endpoint DELETE

export async function DELETE(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  const { id } = await params;
  await prisma.task.delete({
    where: { id: Number(id) },
  });
  return NextResponse.json({ message: "Task deleted" });
}

GET /api/tasks/1

{
  "id": 1,
  "title": "Write the tutorial",
  "description": "Finish the Next.js API routes guide",
  "completed": false,
  "createdAt": "2026-05-12T10:32:14.000Z"
}

PUT /api/tasks/1

{
  "title": "Write the tutorial",
  "description": "Finish the Next.js API routes guide",
  "completed": true
}
{
  "id": 1,
  "title": "Write the tutorial",
  "description": "Finish the Next.js API routes guide",
  "completed": true,
  "createdAt": "2026-05-12T10:32:14.000Z"
}

DELETE /api/tasks/1

{
  "message": "Task deleted"
}

Instalar o Zod

npm install zod

Criar um esquema de validação

import { z } from "zod";
export const taskSchema = z.object({
  title: z.string().min(1, "Title is required"),
  description: z.string().optional(),
  completed: z.boolean().optional(),
});

Incorporar a validação

import { taskSchema } from "@/app/lib/validations";
export async function POST(request: Request) {
  const body = await request.json();
  const result = taskSchema.safeParse(body);
  if (!result.success) {
    return NextResponse.json(
      { error: result.error.issues },
      { status: 400 }
    );
  }
  const task = await prisma.task.create({
    data: result.data,
  });
  return NextResponse.json(task, { status: 201 });
}
export async function PUT(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  const { id } = await params;
  const body = await request.json();
  const result = taskSchema.safeParse(body);
  if (!result.success) {
    return NextResponse.json(
      { error: result.error.issues },
      { status: 400 }
    );
  }
  const task = await prisma.task.update({
    where: { id: Number(id) },
    data: result.data,
  });
  return NextResponse.json(task);
}

Testar a validação

{
  "title": "",
  "description": "Trying to break the API"
}

P1: O que são as rotas API no Next.js?

As rotas da API permitem criar pontos de extremidade do backend dentro de projetos Next.js.

P2: O Next.js trata do encaminhamento?

Sim. O Next.js tem o seu próprio sistema de encaminhamento.

P3: Que métodos HTTP são suportados nas rotas do Next.js?

No ficheiro de rotas, podes ter manipuladores para métodos HTTP comuns.

P4: Qual é a diferença entre as rotas da API e as ações do servidor?

As rotas da API são pontos de extremidade do backend que podem ser chamados a partir de qualquer lugar.

Share your opinion in the comment section. COMMENT NOW

Share This Article

Abdul Rehman

O Abdul é um profissional de marketing experiente em tecnologia, movido a café e criativo, que adora manter-se a par das últimas actualizações de software e gadgets tecnológicos. É também um escritor técnico competente que consegue explicar conceitos complexos de forma simples para um público alargado. Abdul gosta de partilhar os seus conhecimentos sobre a indústria da nuvem através de manuais de utilizador, documentação e publicações em blogues.

×

Webinar: How to Get 100% Scores on Core Web Vitals

Join Joe Williams & Aleksandar Savkovic on 29th of March, 2021.

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Want to Experience the Cloudways Platform in Its Full Glory?

Take a FREE guided tour of Cloudways and see for yourself how easily you can manage your server & apps on the leading cloud-hosting platform.

Start my tour