💻 Exemplos: Capítulo 01: Ecossistema FastAPI, Uvicorn, ASGI, Event Loop e Estrutura
Especialização em Backend com Python & FastAPI • Demonstrações Práticas Compiláveis
💻 Exemplo 1 — Aplicação Mínima com Healthcheck e Metadados OpenAPI
# main.py
from fastapi import FastAPI
from datetime import datetime, timezone
app = FastAPI(
title="Core API",
version="1.0.0",
description="API base do curso de Backend com Python e FastAPI.",
)
@app.get("/health", tags=["Infra"])
async def health_check() -> dict:
return {
"status": "healthy",
"timestamp": datetime.now(timezone.utc).isoformat(),
"version": app.version,
}
💻 Exemplo 2 — Ciclo de Vida com lifespan e Roteamento Modular
# database.py (simulação de pool de conexões)
class ConnectionPool:
def __init__(self) -> None:
self.ativo = False
async def conectar(self) -> None:
self.ativo = True
async def desconectar(self) -> None:
self.ativo = False
pool = ConnectionPool()
# routers/users.py
from fastapi import APIRouter
router = APIRouter(prefix="/api/v1/users", tags=["Users"])
_FAKE_DB = [{"id": 1, "nome": "Alice"}, {"id": 2, "nome": "Bob"}]
@router.get("/")
async def list_users() -> list[dict]:
return _FAKE_DB
# main.py
from contextlib import asynccontextmanager
from fastapi import FastAPI
from database import pool
from routers.users import router as users_router
@asynccontextmanager
async def lifespan(app: FastAPI):
await pool.conectar()
print("Startup: pool de conexões ativo.")
yield
await pool.desconectar()
print("Shutdown: pool de conexões encerrado.")
app = FastAPI(lifespan=lifespan)
app.include_router(users_router)
💻 Exemplo 3 — Inicialização Programática do Uvicorn em Produção
# server_prod.py
import multiprocessing
import uvicorn
def construir_configuracao_producao() -> uvicorn.Config:
return uvicorn.Config(
app="main:app",
host="0.0.0.0",
port=8000,
workers=min(multiprocessing.cpu_count(), 4),
timeout_keep_alive=30,
log_level="info",
)
if __name__ == "__main__":
config = construir_configuracao_producao()
server = uvicorn.Server(config)
server.run()