Publicado
- 3 min read
Criando uma API com Node.js e TypeScript usando DDD

Introdução
O desenvolvimento de APIs se tornou uma habilidade essencial para programadores na era digital. Com a crescente demanda por aplicações que consomem e expõem dados através de APIs, dominar a construção de uma API eficaz é crucial. Neste post, vamos explorar como criar uma API usando Node.js e TypeScript, seguindo o padrão de projeto Domain-Driven Design (DDD). O DDD é uma abordagem que estrutura o projeto de software em torno do domínio do negócio, facilitando manutenção e escalabilidade.
Pré-requisitos
Para acompanhar este tutorial você vai precisar de:
- Conhecimentos básicos em JavaScript e TypeScript.
- Familiaridade com Node.js e npm (Node Package Manager).
- um editor de código, como VSCode.
- Ferramentas de teste de API, como Postman ou Insomnia.
Conceitos Principais
O que é DDD?
O Domain-Driven Design é um padrão que tem como foco a modelagem do negócio. Ele incentiva a colaboração entre desenvolvedores e especialistas no domínio para criar um modelo de software que reflete as regras de negócio. O DDD divide a aplicação em camadas, como:
- Domínio: Representa as regras e lógica do negócio.
- Aplicação: Orquestra a interação entre os componentes do domínio.
- Infraestrutura: Interage com o ambiente externo, como bancos de dados e serviços.
Estrutura Básica de um Projeto DDD
A estrutura recomendada para um projeto DDD em Node.js pode ser assim:
/src
├── application
├── domain
├── infrastructure
└── presentation
Exemplo de Código
Abaixo está um exemplo simples de um modelo de domínio e serviço:
// src/domain/user.ts
export class User {
constructor(
public id: string,
public name: string
) {}
}
// src/application/userService.ts
import { User } from '../domain/user'
export class UserService {
private users: User[] = []
public createUser(name: string): User {
const newUser = new User(String(this.users.length + 1), name)
this.users.push(newUser)
return newUser
}
public getUsers(): User[] {
return this.users
}
}
Mini-Projeto Prático
Criando a API
- Configuração do Projeto:
mkdir ddd-api-example
cd ddd-api-example
npm init -y
npm install typescript ts-node express @types/express
npx tsc --init
- Criar o Servidor Express:
// src/index.ts
import express from 'express'
import { UserService } from './application/userService'
const app = express()
const userService = new UserService()
app.use(express.json())
app.post('/users', (req, res) => {
const user = userService.createUser(req.body.name)
res.status(201).json(user)
})
app.get('/users', (req, res) => {
const users = userService.getUsers()
res.json(users)
})
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000')
})
- Executar o Servidor:
npx ts-node src/index.ts
A API agora está rodando, e você pode usar o Postman para testar as rotas.
Padrões de Projeto Aconselháveis
- Injeção de Dependências: Facilita a gestão de dependências e testes.
- Repositórios: Encapsulam a lógica de acesso a dados.
- Eventos de Domínio: Para comunicar mudanças e ações dentro do sistema.
Próximos Passos
- Explore como usar bancos de dados com TypeORM ou Mongoose.
- Aprenda sobre testes automatizados utilizando Jest.
- Estude mais sobre arquiteturas hexagonais e CQRS.
Possíveis Erros e Soluções
- Erro ao iniciar o servidor: Certifique-se de que a porta não está em uso e que o código não possui erros de sintaxe.
- Erro 500 – Internal Server Error: Verifique a lógica no seu serviço, assegurando que não há exceções não tratadas.
Links Úteis
Prós e Contras do DDD
Prós
- Foco no Domínio: Facilita a modelagem e entendimento do negócio.
- Escalabilidade: Estruturas claras permitem crescimento sem grandes refatorações.
- Manutenção: Códigos bem organizados facilitam a manutenção futura.
Contras
- Curva de Aprendizado: Pode ser complicado para iniciantes.
- Complexidade: Em pequenos projetos, pode introduzir complexidade desnecessária.
Performance das Ferramentas
- Node.js: Ótima performance para operações I/O, ideal para aplicações em tempo real.
- TypeScript: Adiciona tipagem estática, possibilitando encontrar erros em tempo de compilação.
Esse guia proporcionou uma introdução sólida à construção de uma API com Node.js e TypeScript, orientada pelo padrão DDD. Siga explorando e desenvolvendo suas habilidades para se tornar um desenvolvedor mais completo!