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()