🚀 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:

  1. Listar todos os heróis.
  2. Buscar um herói pelo ID.
  3. Adicionar um novo herói.
  4. Atualizar os dados de um herói.
  5. 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 herois o 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)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 10 Backend) e clique em Commit to main.
  2. 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.js

9. 💡 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);
});

Capitulo Anterior | Proximo Capitulo