Noções Básicas de FastAPI
10 exemplos para você começar com FastAPI - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para você começar com FastAPI - 7 básicos e 3 intermediários.
uv venv && source .venv/bin/activate
uv pip install "fastapi[standard]>=0.115" uvicorn httpxfastapi dev main.py.App mínimo com docs OpenAPI automáticos.
from fastapi import FastAPI
app = FastAPI(title="API de Demonstração")
@app.get("/")
def read_root() -> dict[str, str]:
return {"message": "Olá, FastAPI"}FastAPI() cria o objeto de aplicação ASGI./docs.uvicorn main:app --reload ou fastapi dev main.py.Relacionado: Modelos de Requisição e Resposta - corpos de requisição tipados
Capture valores tipados do path da URL.
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id: int) -> dict[str, int]:
if user_id < 1:
raise HTTPException(status_code=404, detail="Usuário não encontrado")
return {"user_id": user_id}HTTPException para respostas 4xx explícitas.Relacionado: Middleware e Tratamento de Erros - corpos de erro consistentes
Filtros opcionais e paginação da string de query.
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items")
def list_items(
skip: int = Query(0, ge=0),
limit: int = Query(20, ge=1, le=100),
q: str | None = None,
) -> dict[str, object]:
return {"skip": skip, "limit": limit, "q": q}Query() adiciona metadados de validação além de um padrão simples.str | None = None.ge e le aparecem no OpenAPI.POST JSON validado por modelos Pydantic 2.
from fastapi import FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class ItemCreate(BaseModel):
name: str = Field(min_length=1, max_length=100)
price: float = Field(gt=0)
@app.post("/items", status_code=201)
def create_item(item: ItemCreate) -> ItemCreate:
return itemdetail em nível de campo.Relacionado: Modelos de Requisição e Resposta - filtragem com
response_model
Oculte campos internos de respostas serializadas.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str
class UserOut(BaseModel):
username: str
@app.post("/users", response_model=UserOut)
def create_user(user: UserIn) -> UserIn:
return userresponse_model controla tanto o OpenAPI quanto o payload JSON.Swagger UI interativo incluído com cada app.
from fastapi import FastAPI
app = FastAPI(
title="API de Inventário",
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc",
)
@app.get("/health")
def health() -> dict[str, str]:
return {"status": "ok"}/docs para Swagger UI e /redoc para ReDoc.docs_url=None quando a política exigir.Defina semânticas HTTP em respostas de sucesso.
from fastapi import FastAPI, Response
app = FastAPI()
@app.post("/notify", status_code=202)
def enqueue(response: Response) -> dict[str, str]:
response.headers["X-Job-Id"] = "job-42"
return {"status": "accepted"}Response para definir cabeçalhos sem alterar o tipo do corpo.responses={}.Compartilhe sessões e configurações entre rotas.
from collections.abc import Generator
from fastapi import Depends, FastAPI
app = FastAPI()
def get_db() -> Generator[dict[str, str], None, None]:
db = {"connected": "true"}
yield db
@app.get("/items")
def list_items(db: dict[str, str] = Depends(get_db)) -> dict[str, str]:
return dbDepends resolve provedores uma vez por requisição.yield para configuração e desmontagem de conexões.app.dependency_overrides.Relacionado: Injeção de Dependência - sub-dependências e escopos
Divida APIs grandes em roteadores de funcionalidades.
from fastapi import APIRouter, FastAPI
users_router = APIRouter(prefix="/users", tags=["users"])
@users_router.get("/")
def list_users() -> list[str]:
return ["ada", "grace"]
app = FastAPI()
app.include_router(users_router)APIRouter agrupa endpoints com prefixo e tags compartilhados.Relacionado: Implantando FastAPI - layout de projeto de produção
I/O não bloqueante com endpoints async def.
import httpx
from fastapi import FastAPI
app = FastAPI()
@app.get("/external")
async def proxy() -> dict[str, str]:
async with httpx.AsyncClient() as client:
resp = await client.get("https://httpbin.org/get", timeout=5.0)
return {"status": str(resp.status_code)}async def ao aguardar I/O de HTTP, banco de dados ou cache.run_in_threadpool.Relacionado: Rotas Assíncronas e Bancos de Dados - sessões SQLAlchemy assíncronas
Versões da Stack: Esta página foi escrita para Python 3.14.0 (3.14 estável, 3.13 de manutenção), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026