Capítulo 18: Rotas e Parâmetros no FastAPI 🦔💨
Neste capítulo, vamos aprender a criar rotas dinâmicas que aceitam parâmetros na URL, permitindo responder de forma personalizada para cada usuário, com o tema do Sonic!
📖 O que são Rotas Dinâmicas?
São rotas que contêm variáveis na sua estrutura. Por exemplo, em vez de criar uma rota para cada personagem (/velocidade/sonic, /velocidade/tails), criamos uma rota /velocidade/{nome} e o FastAPI captura o nome digitado!
A grande vantagem do FastAPI é que podemos usar a tipagem do Python para validar esses parâmetros automaticamente.
📖 Exemplo Guiado: Velocidade dos Personagens
Vamos criar um servidor que recebe o nome de um personagem do Sonic e retorna sua velocidade característica.
- Crie o arquivo
app_sonic.pyna pastasrc/:
from fastapi import FastAPI
app = FastAPI()
# Rota dinâmica que recebe o nome do personagem (como string)
@app.get('/velocidade/{nome}')
def velocidade(nome: str):
nome_limpo = nome.lower()
if nome_limpo == "sonic":
return f"O {nome.capitalize()} corre na velocidade do som! 🔊"
elif nome_limpo == "tails":
return f"O {nome.capitalize()} voa com suas duas caudas! ✈️"
elif nome_limpo == "knuckles":
return f"O {nome.capitalize()} é o mais forte do grupo! 💪"
else:
return f"Personagem {nome.capitalize()} não cadastrado no banco de dados da G.U.N."🕹️ Como Executar e Testar no VS Code
- Abra o terminal na pasta do arquivo.
- Execute o comando:
uvicorn app_sonic:app --reload - Abra o navegador e acesse:
http://127.0.0.1:8000/velocidade/sonic - Depois mude para:
http://127.0.0.1:8000/velocidade/tails
Resultado Esperado no Navegador (para sonic):
"O Sonic corre na velocidade do som! 🔊"📊 Ilustração Visual: Parâmetros na URL
Veja como o FastAPI captura a variável da URL:
graph LR A["Navegador: /velocidade/sonic"] -->|Envia| B["💻 FastAPI"] B -->|Mapeia para| C["função velocidade(nome='sonic')"] C -->|Retorna| D["Texto personalizado"]
🛠️ Prática Obrigatória 1: Contador de Anéis
Crie uma nova rota chamada /aneis/{quantidade} que receba um número inteiro e retorne a mensagem: “Você coletou X anéis!“. Lembre-se de tipar o parâmetro na função como int (ex: quantidade: int). O FastAPI vai bloquear automaticamente se alguém tentar passar um texto em vez de um número!
🔑 Gabarito de Código
Prática 1: Nova rota no app_sonic.py
@app.get('/aneis/{quantidade}')
def contar_aneis(quantidade: int):
return f"Incrível! Você coletou {quantidade} anéis dourados! 🟡"📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
(Siga o mesmo padrão do Capítulo 01)