🚀 Capítulo 15: O Arquivo X de Endpoints
NOTE
Este capítulo utiliza a temática de Arquivo X para explicar a passagem de parâmetros nas rotas do FastAPI. Aprenda a buscar informações específicas na sua API!
🎯 Objetivo da Aula
Compreender como receber dados do usuário através das rotas no FastAPI, utilizando Parâmetros de Rota (Path Parameters) e Parâmetros de Busca (Query Parameters).
🏢 O Cenário Prático (Seu Desafio)
Os agentes do FBI Mulder e Scully investigam casos paranormais arquivados no “Arquivo X”. Quando chega uma denúncia, eles precisam buscar no arquivo o caso específico pelo número dele (ex: caso ) ou buscar por palavras-chave (ex: casos sobre “ovni”).
No FastAPI:
- Para buscar pelo número exato, usamos a própria URL:
/caso/51. Isso é um Parâmetro de Rota. - Para filtrar por um tema, usamos interrogação na URL:
/caso?busca=ovni. Isso é um Parâmetro de Busca. - Seu desafio é criar as rotas de busca para os agentes!
graph TD A[URL: /caso/51] -->|Identifica| B[Parâmetro de Rota: caso_id = 51] C[URL: /casos?tag=ovni] -->|Filtra| D[Parâmetro de Busca: tag = ovni]
🧠 Fundamentos: A Teoria Traduzida
📍 1. Parâmetros de Rota (Path Parameters):
Você coloca o nome do parâmetro entre chaves {} na rota e o recebe como variável na função. O FastAPI já converte o tipo (ex: para número inteiro) se você especificar!
@app.get("/caso/{caso_id}")
def buscar_caso(caso_id: int):
return {"mensagem": f"Buscando arquivos do caso número {caso_id}"}🔍 2. Parâmetros de Busca (Query Parameters):
Se você declarar variáveis na função que não estão no endereço da rota, o FastAPI entende automaticamente que são parâmetros de busca (que vêm depois da ? na URL).
@app.get("/casos")
def listar_casos(investigador: str, tag: str = "todos"):
return {
"mensagem": f"Casos filtrados por {tag} para o agente {investigador}"
}- Nesse exemplo, a URL ficaria:
http://localhost:8000/casos?investigador=Mulder&tag=ovni.
📖 Exemplo Guiado: O Arquivo Secreto
Vamos criar uma rota que mistura os dois tipos de parâmetros:
@app.get("/arquivo/{pasta_id}")
def abrir_arquivo(pasta_id: int, senha: str):
if senha == "1234":
return {
"status": "Acesso Liberado",
"conteudo": f"Documentos da pasta {pasta_id}",
}
else:
return {"status": "Acesso Negado"}🛠️ Prática Obrigatória 1: Parâmetro de Rota
- Escreva o código de uma rota GET que receba o nome de um
agentena URL (ex:/agente/mulder) e retorne a mensagem{"bem_vindo": agente}.
🛠️ Prática Obrigatória 2: Parâmetro de Busca
- Na rota
@app.get("/busca") def pesquisar(q: str):, como ficaria a URL no navegador para passar o valor"alien"para a variávelq?
📤 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_15_arquivo_x.md💡 Checkpoint de Lógica
O FastAPI usa os tipos do Python (como int e str) para validar os dados. Se você disse que o caso_id é um int e o usuário digitar um texto na URL, o FastAPI devolve um erro automático dizendo que o dado está no formato errado!
🔥 Desafio de Fixação (Opcional)
Pesquise como tornar um parâmetro de busca opcional no FastAPI (Dica: use Optional do módulo typing ou dê um valor padrão None).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
@app.get("/agente/{agente}")
def boas_vindas(agente: str):
return {"bem_vindo": agente}Gabarito da Prática 2:
- A URL ficaria:
http://localhost:8000/busca?q=alien.