Programação

Como Criar uma API REST com Node.js e Express em 2025

Vinicius Farias12 min de leitura2414 visualizações
#Node.js#Express#API REST#Backend

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.

Compartilhar este artigo: