Introdução: por que TypeScript para REST API?
O desenvolvimento web moderno é impensável sem APIs claras e escaláveis. TypeScript, sendo uma extensão estritamente tipada sobre JavaScript, permite criar REST APIs confiáveis com um número mínimo de erros em tempo de execução. Neste artigo, na prática, passo a passo, criaremos uma REST API completa em TypeScript usando o popular framework Express. Todo o processo levará no máximo 30 minutos, e o resultado estará pronto para uso em projetos reais.
Abordaremos: inicialização do projeto, configuração do TypeScript, criação de rotas, trabalho com middleware, tratamento de erros e teste de endpoints. Todos os exemplos de código podem ser executados imediatamente e adaptados às suas necessidades.
Passo 1: Inicialização do projeto e instalação de dependências
Primeiro, criaremos um novo diretório para o projeto e o inicializaremos. Abra o terminal e execute:
mkdir my-ts-apicd my-ts-apinpm init -yAgora instalaremos os pacotes necessários:
npm install expressnpm install -D typescript @types/node @types/express ts-node nodemonCriaremos o arquivo de configuração do TypeScript:
npx tsc --initEdite o tsconfig.json, incluindo as seguintes opções:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true }}Adicione os scripts no package.json:
"scripts": { "build": "tsc", "start": "node dist/index.js", "dev": "nodemon --exec ts-node src/index.ts"}Passo 2: Criação da estrutura básica e do primeiro endpoint
Crie a pasta src e dentro dela o arquivo index.ts. Vamos começar com um servidor simples que responderá a requisições GET:
import express, { Request, Response } from 'express';
const app = express();const PORT = process.env.PORT || 3000;
// Middleware para parsing de JSONapp.use(express.json());
// Rota básicaapp.get('/', (req: Request, res: Response) => { res.send('REST API em TypeScript está funcionando!');});
app.listen(PORT, () => { console.log(`Servidor rodando em http://localhost:${PORT}`);});Execute o servidor com o comando npm run dev e abra http://localhost:3000. Você verá a mensagem de boas-vindas.
Criação do modelo de dados
Para uma API completa, precisamos de uma entidade. Vamos criar um modelo simples de usuário:
// src/models/user.tsexport interface User { id: number; name: string; email: string; age: number;}
export type CreateUserDto = Omit; Passo 3: Implementação das operações CRUD
Agora criaremos um controller e rotas para trabalhar com usuários. Crie o arquivo src/routes/users.ts:
import { Router, Request, Response } from 'express';import { User, CreateUserDto } from '../models/user';
const router = Router();let users: User[] = [ { id: 1, name: 'Ivan', email: 'ivan@example.com', age: 28 }, { id: 2, name: 'Maria', email: 'maria@example.com', age: 32 }];let nextId = 3;
// GET /users - obter todos os usuáriosrouter.get('/', (req: Request, res: Response) => { res.json(users);});
// GET /users/:id - obter usuário por IDrouter.get('/:id', (req: Request, res: Response) => { const id = parseInt(req.params.id); const user = users.find(u => u.id === id); if (!user) { return res.status(404).json({ message: 'Usuário não encontrado' }); } res.json(user);});
// POST /users - criar novo usuáriorouter.post('/', (req: Request, res: Response) => { const { name, email, age }: CreateUserDto = req.body; if (!name || !email || !age) { return res.status(400).js