Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine um aplicativo de rede social. Temos usuários e cada usuário pode ter um perfil. Essa relação de um usuário para um perfil é um exemplo prático de relacionamento um-para-um. Agora, imagine que cada usuário pode publicar vários posts. Isso representa um relacionamento um-para-muitos. Finalmente, considere que cada post pode ter várias tags e cada tag pode estar associada a vários posts. Este é um exemplo de relacionamento muitos-para-muitos.
Dominar esses relacionamentos é fundamental para construir APIs modernas e robustas, permitindo representar conexões complexas entre dados. Nesta aula, você vai dominar a teoria e a prática por trás desses relacionamentos, utilizando Node.js e Express.js, preparando-se para construir aplicações web profissionais.
Conceito Fundamental (7 min)
Relacionamentos em APIs descrevem como diferentes entidades de dados se conectam. No contexto de bancos de dados, esses relacionamentos definem como as tabelas se inter-relacionam.
- Um-para-um (1:1): Cada registro em uma tabela se relaciona com no máximo um registro em outra tabela, e vice-versa. Exemplo: Um usuário possui um único perfil.
- Um-para-muitos (1:N): Um registro em uma tabela pode se relacionar com vários registros em outra tabela, mas cada registro na segunda tabela se relaciona com apenas um na primeira. Exemplo: Um autor escreve vários livros.
- Muitos-para-muitos (N:M): Registros em ambas as tabelas podem se relacionar com múltiplos registros na outra tabela. Exemplo: Alunos matriculados em várias disciplinas e disciplinas com vários alunos.
Em APIs RESTful, esses relacionamentos são frequentemente representados usando IDs nas requisições e respostas. Tecnologias como o Sequelize ORM simplificam a gestão desses relacionamentos no Node.js.
Vantagens: Organização de dados, integridade referencial e consultas eficientes. Desvantagens: Complexidade aumentada no design e implementação.
Implementação Prática (10 min)
Vamos simular um relacionamento 1:N entre autores e livros (sem banco de dados para simplificar):
const express = require('express');
const app = express();
app.use(express.json());
const autores = [
{ id: 1, nome: 'Machado de Assis' },
{ id: 2, nome: 'Clarice Lispector' }
];
const livros = [
{ id: 1, titulo: 'Dom Casmurro', autorId: 1 },
{ id: 2, titulo: 'Memórias Póstumas de Brás Cubas', autorId: 1 },
{ id: 3, titulo: 'A Hora da Estrela', autorId: 2 }
];
// Rota para obter os livros de um autor específico
app.get('/autores/:id/livros', (req, res) => {
const autorId = parseInt(req.params.id);
const livrosDoAutor = livros.filter(livro => livro.autorId === autorId);
if (livrosDoAutor.length === 0) {
return res.status(404).json({ mensagem: 'Livros não encontrados' }); // Error handling
}
res.json(livrosDoAutor);
});
// Configuração específica para HostGator Plano M (porta)
const port = process.env.PORT || 3050;
app.listen(port, () => console.log(Servidor rodando na porta ${port}));
npm install express
node index.js # ou nodemon index.js, se você tiver o nodemon instalado
Neste exemplo, autorId em livros estabelece o relacionamento. A rota /autores/:id/livros recupera os livros de um autor específico. O código inclui error handling e configurações para o HostGator.
Exercício Hands-On (5 min)
Crie uma rota que retorne um autor específico dado o ID de um livro. Utilize a estrutura de dados existente.
Solução:
app.get('/livros/:id/autor', (req, res) => {
const livroId = parseInt(req.params.id);
const livro = livros.find(l => l.id === livroId);
if (!livro) return res.status(404).json({ mensagem: 'Livro não encontrado' });
const autor = autores.find(a => a.id === livro.autorId);
if (!autor) return res.status(404).json({ mensagem: 'Autor não encontrado' }); // Lidando com possível erro
res.json(autor);
});
Teste a nova rota fazendo uma requisição GET para /livros/1/autor. Você deverá receber os dados do Machado de Assis.
Próximos passos: Explore bibliotecas ORM como o Sequelize para gerenciar relacionamentos em bancos de dados relacionais.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!