FastAPI: Criando APIs Modernas com Python
Por que FastAPI?
FastAPI ganhou enorme popularidade nos últimos anos por combinar velocidade, simplicidade e robustez. Baseado em Starlette e Pydantic, oferece performance comparável ao Node.js e Go, com a produtividade do Python.
Setup Inicial
pip install fastapi uvicorn[standard] pydantic# main.py
from fastapi import FastAPI
app = FastAPI(title="Minha API", version="1.0.0")
@app.get("/")
async def root():
return {"message": "API funcionando!"}Para rodar:
uvicorn main:app --reloadModelos com Pydantic
O coração do FastAPI é a validação automática via Pydantic:
from pydantic import BaseModel, EmailStr
from typing import Optional
class Usuario(BaseModel):
nome: str
email: EmailStr
idade: Optional[int] = None
@app.post("/usuarios", status_code=201)
async def criar_usuario(usuario: Usuario):
# FastAPI valida automaticamente o body da requisição
return {"id": 1, **usuario.model_dump()}Parâmetros de Path e Query
from typing import List
@app.get("/usuarios/{usuario_id}")
async def buscar_usuario(usuario_id: int, campos: List[str] = None):
# usuario_id vem do path, campos é query param opcional
return {"id": usuario_id, "campos": campos}Dependências
O sistema de injeção de dependências é uma das features mais poderosas:
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
async def get_current_user(token: str = Depends(oauth2_scheme)):
user = verificar_token(token)
if not user:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Token inválido"
)
return user
@app.get("/me")
async def read_profile(current_user = Depends(get_current_user)):
return current_userDocumentação Automática
FastAPI gera Swagger UI em /docs e ReDoc em /redoc automaticamente — sem nenhuma configuração adicional. Isso acelera muito o desenvolvimento em equipe.
Async e Performance
import httpx
@app.get("/dados-externos")
async def buscar_dados():
async with httpx.AsyncClient() as client:
resp = await client.get("https://api.exemplo.com/dados")
return resp.json()FastAPI é nativo async, então chamadas I/O não bloqueiam o event loop — fundamental para APIs com alta concorrência.
Conclusão
FastAPI é hoje uma das melhores escolhas para APIs Python: tipagem forte, validação automática, documentação gerada e performance excelente. Vale muito o investimento no aprendizado.