0%
API Routes Next.js - Criar APIs completas

API Routes

Crie APIs completas diretamente no Next.js

10-15 min

API Routes Next.js

As API Routes do Next.js permitem criar endpoints de API diretamente na sua aplicação, transformando o Next.js em uma solução full-stack completa.

Introdução às API Routes

Conceito básico

As API Routes são funções serverless executadas no lado do servidor. Cada arquivo dentro de pages/api/ se torna um endpoint de API.

pages/
└── api/
    ├── hello.js          → /api/hello
    ├── users/
    │   ├── index.js      → /api/users
    │   └── [id].js       → /api/users/123
    └── auth/
        ├── login.js      → /api/auth/login
        └── logout.js     → /api/auth/logout

Primeiro endpoint

// pages/api/hello.js
export default function handler(req, res) {
  res.status(200).json({ 
    message: 'Hello from Next.js API!',
    timestamp: new Date().toISOString()
  })
}

Teste com curl:

curl http://localhost:3000/api/hello

Gerenciamento dos métodos HTTP

Endpoint com múltiplos métodos

// pages/api/users/index.js
export default function handler(req, res) {
  const { method } = req

  switch (method) {
    case 'GET':
      return getUsers(req, res)
    case 'POST':
      return createUser(req, res)
    default:
      res.setHeader('Allow', ['GET', 'POST'])
      res.status(405).end(`Method ${method} Not Allowed`)
  }
}

async function getUsers(req, res) {
  try {
    // Recuperar os usuários do banco de dados
    const users = await db.user.findMany()
    res.status(200).json(users)
  } catch (error) {
    res.status(500).json({ error: 'Erreur serveur' })
  }
}

async function createUser(req, res) {
  try {
    const { name, email } = req.body
    
    // Validation
    if (!name || !email) {
      return res.status(400).json({ 
        error: 'Nom et email requis' 
      })
    }

    // Criar o usuário
    const user = await db.user.create({
      data: { name, email }
    })

    res.status(201).json(user)
  } catch (error) {
    res.status(500).json({ error: 'Erreur lors de la création' })
  }
}

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!