🧩 Exercícios: Ecossistema FastAPI, Uvicorn e ASGI
Spec Backend Com Python E Fastapi • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 01.1 — Aplicação ASGI Simples e Healthcheck
Contexto: Aplicação ASGI Simples e Healthcheck no contexto de Ecossistema FastAPI, Uvicorn e ASGI.
Requisitos de Execução:
- Criar app FastAPI com rota
/healthretornando status, timestamp e versão. - Configurar metadados do OpenAPI (title, version).
Resultado Esperado
GET /health -> 200 OK {'status': 'healthy', 'version': '1.0.0'}
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_01_1_SeuNome - Envie na tarefa:
Atividade Cap 01 - Ecossistema FastAPI, Uvicorn e ASGI
🔑 Gabarito de Código & Solução Comentada
# main.py
from fastapi import FastAPI
import time
app = FastAPI(title="Core API", version="1.0.0")
@app.get("/health")
async def health_check():
return {"status": "healthy", "timestamp": int(time.time()), "version": "1.0.0"}
🔍 Nível 2: Prática
Problema 01.2 — Manipulação de Ciclo de Vida com Lifespan Context Manager
Contexto: Manipulação de Ciclo de Vida com Lifespan Context Manager no contexto de Ecossistema FastAPI, Uvicorn e ASGI.
Requisitos de Execução:
- Implementar gerenciador de contexto
lifespanconectando e desconectando pool de banco de dados simulado.
Resultado Esperado
Startup: Inicializando pool de conexões...
Shutdown: Fechando pool de conexões.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_01_2_SeuNome - Envie na tarefa:
Atividade Cap 01 - Ecossistema FastAPI, Uvicorn e ASGI
🔑 Gabarito de Código & Solução Comentada
# lifespan_demo.py
from fastapi import FastAPI
from contextlib import asynccontextmanager
db_pool = {}
@asynccontextmanager
async def lifespan(app: FastAPI):
print("Startup: Inicializando pool de conexões...")
db_pool["conn"] = "ActiveDatabaseConnection"
yield
print("Shutdown: Fechando pool de conexões...")
db_pool.clear()
app = FastAPI(lifespan=lifespan)
⚡ Nível 3: Integração
Problema 01.3 — Roteamento Modular com APIRouter e Prefixos Versionados
Contexto: Roteamento Modular com APIRouter e Prefixos Versionados no contexto de Ecossistema FastAPI, Uvicorn e ASGI.
Requisitos de Execução:
- Criar sub-rotas modulares com
APIRouter(prefix='/api/v1/users', tags=['Users'])e incluí-las no app principal.
Resultado Esperado
GET /api/v1/users/ -> 200 OK [{'id': 1, 'nome': 'Alice'}]
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_01_3_SeuNome - Envie na tarefa:
Atividade Cap 01 - Ecossistema FastAPI, Uvicorn e ASGI
🔑 Gabarito de Código & Solução Comentada
# routers_users.py
from fastapi import FastAPI, APIRouter
user_router = APIRouter(prefix="/api/v1/users", tags=["Users"])
@user_router.get("/")
async def list_users():
return [{"id": 1, "nome": "Alice"}, {"id": 2, "nome": "Bob"}]
app = FastAPI()
app.include_router(user_router)
🏆 Nível 4: Desafio Corporativo
Problema 01.4 — Servidor de Produção com Configuração Multiprocess Uvicorn
Contexto: Servidor de Produção com Configuração Multiprocess Uvicorn no contexto de Ecossistema FastAPI, Uvicorn e ASGI.
Requisitos de Execução:
- Criar script de inicialização programática do Uvicorn com suporte a múltiplos workers, logs customizados e timeouts.
Resultado Esperado
Uvicorn configurado para 4 workers com timeout de keep-alive de 30s.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_01_4_SeuNome - Envie na tarefa:
Atividade Cap 01 - Ecossistema FastAPI, Uvicorn e ASGI
🔑 Gabarito de Código & Solução Comentada
# server_prod.py
import uvicorn
import multiprocessing
def iniciar_servidor_producao():
config = uvicorn.Config(
app="main:app",
host="0.0.0.0",
port=8000,
workers=min(multiprocessing.cpu_count(), 4),
timeout_keep_alive=30
)
return config
cfg = iniciar_servidor_producao()
print(f"Configuração pronta: Host={cfg.host}, Workers={cfg.workers}")