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.

  1. Crie o arquivo app_sonic.py na pasta src/:
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

  1. Abra o terminal na pasta do arquivo.
  2. Execute o comando: uvicorn app_sonic:app --reload
  3. Abra o navegador e acesse: http://127.0.0.1:8000/velocidade/sonic
  4. 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)


Capitulo Anterior | Proximo Capitulo