🚀 Capítulo 20: O Confronto Final

NOTE

Este capítulo utiliza a temática de Ultron para guiar o aluno no Projeto Final do curso. Una todos os conhecimentos adquiridos para criar uma API completa!


🎯 Objetivo da Aula

Aplicar todos os conceitos aprendidos ao longo do curso (Python básico, POO, FastAPI, Pydantic, SQLAlchemy e Autenticação) para construir uma API Restful completa e segura.

🏢 O Cenário Prático (Seu Desafio)

Chegou a hora do confronto final contra o Ultron! Os Vingadores precisam de um sistema centralizado para gerenciar a equipe, cadastrar novos heróis, registrar missões e garantir que apenas pessoas autorizadas acessem os dados.

Seu desafio é construir a API dos Vingadores contendo:

  1. Cadastro de Heróis (com validação Pydantic).
  2. Banco de Dados (usando SQLAlchemy para salvar os heróis).
  3. Rotas de Busca (por ID e por nome).
  4. Sistema de Login (gerando Token JWT para proteger as rotas mais sensíveis).

🧠 Fundamentos: A Teoria Traduzida

🏗️ A Estrutura do Projeto Ideal:

Um projeto profissional em FastAPI geralmente se organiza assim:

projeto_vingadores/
├── app/
│   ├── main.py          # Arquivo principal (cria o app)
│   ├── models.py        # Tabelas do banco (SQLAlchemy)
│   ├── schemas.py       # Validações (Pydantic)
│   ├── database.py      # Conexão com o banco de dados
│   └── auth.py          # Funções de Token e Senha
├── requirements.txt     # Lista de bibliotecas
└── README.md            # Explicação do projeto

📖 Exemplo Guiado: Juntando Tudo

Veja como ficaria a rota de cadastro de heróis salvando no banco de dados real:

from fastapi import Depends, FastAPI
from sqlalchemy.orm import Session
# Importando nossos arquivos
from . import database, models, schemas
 
app = FastAPI()
 
 
@app.post("/herois", response_model=schemas.HeroiResponse)
def criar_heroi(
    heroi: schemas.HeroiCreate, db: Session = Depends(database.get_db)
):
    # 1. Transforma o esquema Pydantic em modelo SQLAlchemy
    db_heroi = models.Heroi(nome=heroi.nome, poder=heroi.poder)
    # 2. Salva no banco
    db.add(db_heroi)
    db.commit()
    db.refresh(db_heroi)
    return db_heroi

🛠️ Prática Obrigatória 1: Requisitos do Projeto

  1. Liste quais são as 3 principais bibliotecas (pacotes) que você precisa instalar via Pip para começar a construir esse projeto final (Dica: vimos todas nos capítulos anteriores!).

🛠️ Prática Obrigatória 2: A Segurança

  1. Qual arquivo da estrutura do projeto ideal (mostrada acima) deve conter as funções para gerar e validar os tokens JWT?

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

Neste curso, você entregará suas atividades enviando o código para o seu repositório no GitHub usando o aplicativo GitHub Desktop. Siga o passo a passo detalhado:

  1. Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
  2. Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
  3. Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
  4. Faça o Commit:
    • No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex: Finaliza atividades do Capítulo.
    • Clique no botão azul Commit to main (ou o nome da sua branch).
  5. Envie para a Nuvem (Push): No topo da tela, clique no botão Push origin. Isso enviará seu código do seu computador para o seu perfil no GitHub.
  6. ⚠️ IMPORTANTE (Repositório Público): Para que o professor consiga corrigir, o seu repositório no GitHub DEVE SER PÚBLICO. Repositórios privados não podem ser visualizados por quem não foi convidado.
  7. Como entregar no Microsoft Teams:
    • Copie o link do seu repositório no GitHub (ex: https://github.com/seu-usuario/seu-repositorio).
    • Abra a tarefa correspondente no Microsoft Teams.
    • Clique no botão Adicionar trabalho (ou Add work).
    • Selecione a opção Link no menu lateral.
    • Cole o link do GitHub no campo “Endereço Web” e digite um texto (ex: Meu Repositório) no campo “Texto a ser exibido”.
    • Clique em Anexar.
    • MUITO IMPORTANTE: Clique no botão Entregar (ou Turn in) no canto superior direito para concluir o envio!

📂 Estrutura de Pastas

spec_backend_com_python_e_fastapi/
├── capitulos/
│   └── capitulo_20_ultron_p2.md

💡 Checkpoint de Lógica

Parabéns por chegar até aqui! Você aprendeu desde os conceitos mais básicos de variáveis até a construção de uma API segura e moderna usada por grandes empresas no mundo inteiro!

🔥 Desafio de Fixação (Opcional)

Crie o projeto completo no seu computador, rode o servidor e use a página /docs para cadastrar o seu herói favorito e ver ele sendo salvo no banco de dados!

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Você precisa de: fastapi, uvicorn (para rodar o servidor) e sqlalchemy (para o banco de dados). Gabarito da Prática 2:
  2. O arquivo auth.py.

Capitulo Anterior