Duração: 3h30 (210 minutos) Data: 23/10/2025, 09:00–12:30 Local: Impacta - Sala 206
- Testar todas as etapas do tutorial
- Verificar se as dependências estão atualizadas
- Revisar este documento
- Chegar na sala e testar equipamento
- Testar projetor/tela
- Testar conexão com internet
- Abrir todos os terminais e abas necessárias
- Colocar fonte grande no terminal (legibilidade)
- Desligar notificações do sistema
- Terminal para rodar fastapi
- Navegador com abas:
- http://localhost:8000/docs (Swagger)
- http://localhost:8000/redoc
- https://fastapi.tiangolo.com (documentação oficial)
- Editor de código com o projeto aberto
Objetivos:
- Apresentar-se brevemente
- Nivelar expectativas
- Fazer participantes se sentirem à vontade
Roteiro:
-
Apresentação pessoal (2 min)
- Seu nome e experiência com Python/FastAPI
- Por que você gosta de FastAPI
-
Visão geral do tutorial (3 min)
- "Vamos construir APIs do zero"
- "Foco 100% prático"
- "Vocês vão sair daqui com uma API funcionando"
-
Verificar pré-requisitos (5 min)
- Perguntar: "Quem já programa em Python?"
- Perguntar: "Quem já trabalhou com APIs?"
- Ajudar quem precisar instalar uv
Frase de abertura sugerida:
"Bom dia! Eu sou o Felipe e nas próximas 3h30 vamos aprender a criar APIs com FastAPI. A ideia é ser bem prático - você vai codar comigo, testar, quebrar, consertar. No final, vocês vão ter uma API completa rodando na máquina de vocês!"
Objetivos:
- Contextualizar o que é API
- Explicar por que FastAPI
Tópicos:
-
O que é uma API? (3 min)
- "Forma de programas conversarem"
- Analogia: "Como um garçom entre você e a cozinha"
- Exemplo real: app de clima consultando API de meteorologia
-
O que é REST? (2 min)
- Usa HTTP (como sites)
- Métodos: GET (ler), POST (criar), PUT (atualizar), DELETE (remover)
- Retorna JSON (formato de dados)
-
Por que FastAPI? (5 min)
- Rápido (performance)
- Fácil de aprender
- Validação automática
- Documentação automática (esse é o GRANDE diferencial!)
- Usado por empresas reais (Microsoft, Uber, Netflix)
Slides/Demo:
- Mostrar exemplo de JSON no navegador
- Mostrar rapidamente como é a doc automática
Objetivos:
- Todo mundo com ambiente funcionando
- Instalar dependências
Roteiro:
-
Instalar uv (se necessário) (5 min)
# macOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
- Compartilhar o comando no chat/slides
- Circular pela sala ajudando
-
Clonar/baixar o repositório (3 min)
git clone <url-do-repositorio> # OU baixar o ZIP e extrair
- Fornecer a URL do repositório
-
Entrar na pasta do projeto (1 min)
cd tutorial-fast-api -
Instalar dependências com uv sync (6 min)
uv sync
- Isso cria o ambiente virtual E instala as dependências automaticamente
- Não precisa ativar manualmente, use
uv runpara executar comandos
Dica: Enquanto instala, explicar:
uv: gerenciador de pacotes Python moderno e rápidouv sync: cria ambiente virtual + instala dependências do pyproject.toml- FastAPI já vem instalado com todas as dependências necessárias
Objetivos:
- Primeira API funcionando
- Entender o básico
- Ver documentação automática
Roteiro:
-
Criar arquivo main.py (5 min)
- Codar junto, linha por linha
- Explicar cada linha
from fastapi import FastAPI app = FastAPI() @app.get("/") def raiz(): return {"mensagem": "Olá Python Brasil!"}
-
Rodar servidor (3 min)
uv run fastapi dev 01-hello-world/main.py
- Explicar cada parte do comando:
uv run: executa usando o ambiente virtual do projetofastapi dev: comando do FastAPI CLI para desenvolvimento01-hello-world/main.py: arquivo da aplicação- Modo
devjá inclui auto-reload automático
- Explicar cada parte do comando:
-
Testar no navegador (2 min)
- Abrir http://localhost:8000
- Mostrar o JSON retornado
-
MOMENTO WOW: Documentação automática (10 min)
- Abrir http://localhost:8000/docs
- Explorar a interface
- Testar a rota pelo Swagger
- Mostrar http://localhost:8000/redoc também
- Enfatizar: "Não escrevemos NADA de documentação!"
Checkpoint: Perguntar se todos conseguiram ver a resposta no navegador
Objetivos:
- Múltiplas rotas
- Path parameters
- Query parameters
Roteiro:
-
Criar lista de livros (3 min)
- Explicar que é simulação de banco de dados
-
Rota para listar todos (3 min)
@app.get("/livros") def listar_livros(): return livros
-
Path parameter (7 min)
@app.get("/livros/{livro_id}") def obter_livro(livro_id: int): ...
- Enfatizar a tipagem (
: int) - Testar com ID válido
- Mostrar validação: testar com
/livros/abc - "Olha o erro que o FastAPI dá automaticamente!"
- Enfatizar a tipagem (
-
Query parameter (7 min)
@app.get("/livros/buscar") def buscar(q: str): ...
- Explicar diferença entre path e query
- Testar:
/livros/buscar?q=python
Exercício rápido (se der tempo):
- "Criem uma rota que retorna o livro mais recente"
- Ir ao banheiro
- Beber água
- Ajudar quem ficou para trás
Durante a pausa: Preparar código da próxima etapa
Objetivos:
- Receber dados do cliente
- Introduzir Pydantic
- CRUD completo
Roteiro:
-
Introduzir Pydantic (5 min)
from pydantic import BaseModel class Tarefa(BaseModel): titulo: str descricao: str concluida: bool = False
- "Pydantic define a estrutura dos dados"
- "FastAPI valida automaticamente!"
-
Rota POST (8 min)
@app.post("/tarefas") def criar_tarefa(tarefa: Tarefa): ...
- Criar tarefa pelo /docs
- Mostrar validação automática
-
PUT e DELETE (7 min)
- Implementar rapidamente
- Focar em mostrar funcionando
Momento importante:
- "Vejam: não escrevemos nenhum código de validação!"
- "FastAPI + Pydantic fazem tudo por nós"
Objetivos:
- Validações avançadas
- Field()
- Validadores customizados
Roteiro:
-
Field() com restrições (8 min)
nome: str = Field(min_length=2, max_length=100) idade: int = Field(ge=18, le=120)
- Mostrar cada tipo de validação
- Testar valores inválidos
-
EmailStr (3 min)
from pydantic import EmailStr email: EmailStr
- Testar email inválido
-
Validador customizado (9 min)
@field_validator('nome') @classmethod def nome_sem_numeros(cls, valor): if any(char.isdigit() for char in valor): raise ValueError('Nome não pode ter números') return valor
- Testar validação
Enfatizar:
- "Com Pydantic, seus dados chegam sempre válidos"
- "Menos bugs em produção!"
Objetivos:
- Separar código em arquivos
- APIRouter
- Estrutura profissional
Roteiro:
-
Problema de ter tudo em um arquivo (3 min)
- "Imagina 50 rotas no mesmo arquivo"
- "Difícil de manter"
-
Criar models.py (5 min)
- Mover modelos Pydantic
-
Criar routers.py (7 min)
- Explicar APIRouter
router = APIRouter(prefix="/livros", tags=["livros"])
- Criar algumas rotas
-
Incluir no main.py (5 min)
app.include_router(router_livros)
- Mostrar que funciona igual
- Mostrar tags na documentação
Checkpoint:
- "Agora vocês sabem estruturar uma API de verdade!"
Objetivos:
- Consolidar aprendizado
- Inspirar a continuar
Roteiro:
-
Revisão do que foi visto (5 min)
- GET, POST, PUT, DELETE ✅
- Pydantic e validação ✅
- Documentação automática ✅
- Organização de código ✅
-
Próximos passos (5 min)
- Banco de dados (SQLAlchemy)
- Autenticação (OAuth2, JWT)
- Testes (pytest)
- Deploy (Railway, Render)
- Compartilhar recursos
Frase de encerramento:
"Vocês agora têm a base para criar qualquer API! O resto é praticar e ir adicionando funcionalidades conforme precisarem."
- Responder dúvidas
- Ajudar individualmente
- Circular pela sala
- Trocar contatos/redes sociais
Ritmo:
- Fale devagar e pausadamente
- Dê tempo para as pessoas digitarem
- Pause depois de conceitos importantes
Interação:
- Pergunte constantemente: "Deu certo aí?"
- Incentive perguntas: "Sem pergunta boba!"
- Use nomes dos participantes quando possível
Problemas Técnicos:
- Tenha paciência
- Use tempo de instalação para explicar conceitos
- Tenha código de backup pronto
Energia:
- Mostre entusiasmo pelo FastAPI
- Comemore quando algo funciona
- "Olha que legal isso!"
Para ganhar tempo:
- "Enquanto instala, deixa eu explicar..."
- "Quem já terminou pode ajudar o colega do lado"
Para verificar entendimento:
- "Faz sentido até aqui?"
- "Alguém com dúvida nessa parte?"
Para motivar:
- "Vocês estão indo muito bem!"
- "Isso que vocês fizeram, muita gente acha difícil"
- "Em poucas linhas, olha o que conseguimos!"
Se estiver atrasado:
- Pule exemplos extras
- Mostre código pronto ao invés de digitar
- Foque no essencial
Se estiver adiantado:
- Exercícios extras
- Perguntas e discussões
- Aprofunde em tópicos de interesse
Internet cair:
- Toda documentação deve estar offline
- Exemplos funcionam sem internet
- Use tempo para Q&A
Projetor parar:
- Continue no terminal, pessoas podem acompanhar
- Use mais tempo individual
Sua máquina travar:
- Tenha backup em outra máquina/USB
- Use máquina de participante (último caso)
-
Link do repositório GitHub
- Código completo
- READMEs de cada etapa
-
Recursos adicionais:
- Documentação FastAPI: https://fastapi.tiangolo.com
- Tutorial oficial: https://fastapi.tiangolo.com/tutorial/
- Pydantic docs: https://docs.pydantic.dev
-
Comunidade:
- Discord FastAPI (se houver)
- Grupo Python Brasil no Telegram
- Suas redes sociais para contato
- Compartilhar slides (se tiver)
- Disponibilizar gravação (se houver)
- Pedir feedback
Você está bem preparado!
- O material está completo e testado
- Os participantes querem aprender
- Erros acontecem e tudo bem
- O importante é a jornada de aprendizado
Respire fundo e divirta-se! 🚀
Você está compartilhando conhecimento valioso com a comunidade Python brasileira. Isso é incrível!
Boa sorte na Python Brasil 2025! 🐍🇧🇷