Introducao
Construir APIs REST e uma das habilidades mais valorizadas no mercado de desenvolvimento. Neste guia, vamos criar uma API completa do zero usando Node.js e Express, seguindo as melhores praticas de 2025.
O Que Vamos Construir
Uma API de gerenciamento de tarefas com:
- CRUD completo (Create, Read, Update, Delete)
- Autenticacao JWT
- Validacao de dados com Zod
- Tratamento de erros centralizado
- Documentacao com Swagger
Configurando o Projeto
Comece criando o projeto e instalando as dependencias:
mkdir minha-api && cd minha-api
npm init -y
npm install express cors helmet morgan zod jsonwebtoken bcryptjs
npm install -D typescript @types/express @types/node tsx
Configure o tsconfig.json:
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
}
}
Estrutura de Pastas
Organize seu projeto assim:
src/
controllers/ # Logica das rotas
middleware/ # Auth, validacao, erros
routes/ # Definicao de rotas
services/ # Logica de negocio
types/ # Tipagens TypeScript
app.ts # Configuracao Express
server.ts # Entry point
Criando o Servidor
No src/app.ts, configure o Express com middleware essenciais:
import express from 'express';
import cors from 'cors';
import helmet from 'helmet';
import morgan from 'morgan';
import { errorHandler } from './middleware/error';
import { taskRoutes } from './routes/tasks';
const app = express();
app.use(helmet());
app.use(cors());
app.use(morgan('combined'));
app.use(express.json());
app.use('/api/tasks', taskRoutes);
app.use(errorHandler);
export default app;
Implementando Autenticacao JWT
A autenticacao e fundamental. Crie um middleware que verifica o token em cada requisicao protegida:
import jwt from 'jsonwebtoken';
export function authMiddleware(req, res, next) {
const token = req.headers.authorization?.split(' ')[1];
if (!token) return res.status(401).json({ error: 'Token nao fornecido' });
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.userId = decoded.id;
next();
} catch {
return res.status(401).json({ error: 'Token invalido' });
}
}
Validacao com Zod
Use Zod para validar dados de entrada. E mais seguro que confiar no cliente:
import { z } from 'zod';
const createTaskSchema = z.object({
title: z.string().min(1).max(200),
description: z.string().optional(),
priority: z.enum(['low', 'medium', 'high']),
dueDate: z.string().datetime().optional(),
});
Tratamento de Erros
Centralize o tratamento de erros num middleware global. Isso evita try/catch repetitivo em cada rota e garante respostas consistentes.
Deploy
Para produco, recomendo usar Docker com um Dockerfile multi-stage. Para hosting, Railway, Render ou uma VPS com Coolify sao otimas opcoes em 2025.
Conclusao
Com essa estrutura, voce tem uma API profissional, segura e escalavel. Os principios aqui se aplicam a qualquer projeto: separacao de responsabilidades, validacao rigorosa e tratamento de erros robusto.