🚀 Capítulo 18: Protegendo a Batcaverna

NOTE

Este capítulo utiliza a temática de Batman para explicar a Validação de Dados no FastAPI usando o Pydantic. Proteja o seu sistema contra dados inválidos ou maliciosos!


🎯 Objetivo da Aula

Compreender a importância de validar os dados que chegam das requisições e aprender a usar o Pydantic para criar esquemas de dados seguros e tipados no FastAPI.

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

Para entrar na Batcaverna, não basta apenas saber onde fica a passagem secreta. O computador central do Batman faz uma série de verificações de segurança: a retina precisa ser do Bruce Wayne, a voz precisa ser reconhecida e o peso do carro precisa bater com o do Batmóvel. Se alguém tentar entrar digitando uma senha errada ou sem identificação, o sistema bloqueia o acesso na hora!

Na sua API ou site:

  • Você não pode confiar no que o usuário digita. Se ele deixar o campo “e-mail” em branco, ou digitar um texto onde deveria ser a idade, o seu banco de dados pode dar erro!
  • O FastAPI usa uma biblioteca chamada Pydantic para fazer esse papel de segurança. Nós criamos um “Esquema” (Schema) dizendo exatamente como os dados devem chegar. Seu desafio é criar as regras de segurança da Batcaverna!

🧠 Fundamentos: A Teoria Traduzida

🛡️ 1. O que é o Pydantic?

É uma biblioteca de validação de dados baseada nos tipos do Python. Você cria uma classe que herda de BaseModel e diz quais são os campos e seus tipos.

📋 2. Criando um Esquema (Schema):

from pydantic import BaseModel
 
 
class VilaoCreate(BaseModel):
    nome: str
    periculosidade: int  # Precisa ser um número inteiro
    email_contato: str  # Podemos validar formato de e-mail também!

🎯 3. Usando no FastAPI:

Basta dizer que a função da sua rota espera receber um objeto desse tipo. O FastAPI valida tudo sozinho antes mesmo de rodar o seu código!

@app.post("/viloes")
def cadastrar_vilao(vilao: VilaoCreate):
    # Se os dados chegarem aqui, significa que já foram validados!
    return {"mensagem": f"Vilão {vilao.nome} cadastrado com sucesso!"}

📖 Exemplo Guiado: Adicionando Regras Extras

O Pydantic permite colocar regras mais estritas, como tamanho mínimo de texto ou valor mínimo de um número:

from pydantic import BaseModel, Field
 
 
class HeroiCreate(BaseModel):
    nome: str = Field(..., min_length=3)  # Mínimo 3 caracteres
    idade: int = Field(..., ge=18)  # Maior ou igual a 18 (Greater or Equal)
 
 
# O '...' significa que o campo é OBRIGATÓRIO!

🛠️ Prática Obrigatória 1: Criando as Regras

  1. Escreva o código de um esquema Pydantic chamado Item que tenha um campo nome (texto) e um campo preco (número flutuante/float).

🛠️ Prática Obrigatória 2: O Guardião

  1. O que acontece no FastAPI se o usuário enviar um JSON com a idade sendo um texto (ex: "vinte") para uma rota que espera o esquema HeroiCreate (onde idade é int)?

📤 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_18_batman.md

💡 Checkpoint de Lógica

Se a validação falhar, o FastAPI devolve automaticamente uma resposta com código de erro (Unprocessable Entity) e uma lista detalhada dizendo exatamente qual campo falhou e por quê! Você não precisa escrever nenhuma linha de código para gerar esse erro!

🔥 Desafio de Fixação (Opcional)

Pesquise como usar o tipo EmailStr do Pydantic para validar se um texto é realmente um e-mail válido (Dica: precisa instalar o pacote email-validator).

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

from pydantic import BaseModel
 
 
class Item(BaseModel):
    nome: str
    preco: float

Gabarito da Prática 2:

  1. O FastAPI vai barrar a requisição automaticamente e devolver um erro JSON com código , explicando que o campo idade deveria ser um número inteiro e não um texto.

Capitulo Anterior | Proximo Capitulo