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:

  1. Criar app FastAPI com rota /health retornando status, timestamp e versão.
  2. Configurar metadados do OpenAPI (title, version).

Resultado Esperado

GET /health -> 200 OK {'status': 'healthy', 'version': '1.0.0'}

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_01_1_SeuNome
  2. 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:

  1. Implementar gerenciador de contexto lifespan conectando 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)

  1. Salve o arquivo como: Atividade_01_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_01_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_01_4_SeuNome
  2. 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}")