🚀 Capítulo 10: Prática: CRUD Completo (Tema: Vingadores)
NOTE
Este capítulo utiliza a temática de Vingadores para o encerramento do módulo! Vamos criar o sistema de cadastro da SHIELD para os heróis!
1. 🎯 Objetivo da Aula
Juntar todos os conceitos aprendidos até aqui (Servidor, Rotas, Verbos HTTP, Parâmetros e JSON) para construir uma API com CRUD completo em memória.
2. 🏢 O Cenário Prático (Seu Desafio)
Nick Fury precisa de um sistema para gerenciar os heróis da iniciativa Vingadores. Como ainda não temos banco de dados (veremos no próximo módulo), vamos guardar os dados em uma lista (Array) na memória do servidor. Você deve criar as rotas para:
- Listar todos os heróis.
- Buscar um herói pelo ID.
- Adicionar um novo herói.
- Atualizar os dados de um herói.
- Deletar um herói.
Seu desafio é entregar esse sistema funcionando para a SHIELD!
3. 🧠 Fundamentos: A Teoria Traduzida
Um CRUD completo exige o uso combinado de diferentes verbos e caminhos:
GET /herois→ Lista todos.GET /herois/:id→ Busca um específico.POST /herois→ Cria um novo.PUT /herois/:id→ Atualiza um específico.DELETE /herois/:id→ Deleta um específico.
4. 📖 Exemplo Guiado: O Código do CRUD
Aqui está o esqueleto do código no Express usando um array como “banco de dados”:
const express = require('express');
const app = express();
app.use(express.json());
let herois = [
{ id: 1, nome: "Homem de Ferro", poder: "Armadura" },
{ id: 2, nome: "Thor", poder: "Deus do Trovão" }
];
// 1. Listar Todos
app.get('/herois', (req, res) => {
res.json(herois);
});
// 2. Criar Novo
app.post('/herois', (req, res) => {
const novoHeroi = req.body;
herois.push(novoHeroi);
res.status(201).json(novoHeroi);
});
// 3. Deletar
app.delete('/herois/:id', (req, res) => {
const id = parseInt(req.params.id);
herois = herois.filter(h => h.id !== id);
res.status(204).send();
});
app.listen(3000, () => console.log("Sistema da SHIELD online!"));5. 🛠️ Prática Obrigatória 1: Completando o CRUD
No código acima, falta a rota de Buscar por ID (GET /herois/:id).
- Escreva o código dessa rota.
- Ela deve buscar no array
heroiso herói com o ID passado e retorná-lo em formato JSON.
6. 🛠️ Prática Obrigatória 2: O Problema da Memória
O que acontece com a lista de heróis se o servidor for desligado e ligado novamente? Por que isso acontece?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 10 Backend) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_07_backend_e_apis/
├── capitulos/
│ ├── capitulo_10_crud.md
│ └── codigos/
│ └── cap10/
│ └── crud_shield.js9. 💡 Checkpoint de Lógica
Por que usamos parseInt(req.params.id) no código de deletar? (Dica: Os parâmetros que vêm da URL são sempre de qual tipo de dado?).
10. 🔥 Desafio de Fixação
Tente implementar a rota de Atualizar (PUT /herois/:id) no código.
11. 🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1 (Buscar por ID):
app.get('/herois/:id', (req, res) => {
const id = parseInt(req.params.id);
const heroi = herois.find(h => h.id === id);
if (!heroi) {
return res.status(404).json({ erro: "Herói não encontrado" });
}
res.json(heroi);
});