🚀 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
- Escreva o código de um esquema Pydantic chamado
Itemque tenha um camponome(texto) e um campopreco(número flutuante/float).
🛠️ Prática Obrigatória 2: O Guardião
- 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 esquemaHeroiCreate(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:
- Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
- Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
- Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
- 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).
- No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex:
- 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.
- ⚠️ 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.
- 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!
- Copie o link do seu repositório no GitHub (ex:
📂 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: floatGabarito da Prática 2:
- O FastAPI vai barrar a requisição automaticamente e devolver um erro JSON com código , explicando que o campo
idadedeveria ser um número inteiro e não um texto.