Criação de APIs Robústas com FastAPI e Autenticação Avançada em Python
1. Estrutura Básica de uma API com FastAPI
from fastapi import FastAPI
app = FastAPI()
@app.get("/ping")
async def ping():
return {"message": "pong"}
@app.get("/rota")
define endpoints HTTPFunções assíncronas (
async def
) permitem concurrency nativa
2. Modelos e Validação de Dados
FastAPI integra Pydantic para validação de dados:
from pydantic import BaseModel
class Usuario(BaseModel):
username: str
email: str
is_active: bool = True
@app.post("/usuarios/")
async def criar_usuario(usuario: Usuario):
return usuario
Tipagem estática garante validação automática e documentação OpenAPI.
3. Autenticação Avançada
3.1 Autenticação JWT
JWT (JSON Web Tokens) permite stateless authentication:
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt
SECRET_KEY = "segredo_super_secreto"
ALGORITHM = "HS256"
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
def validar_token(token: str = Depends(oauth2_scheme)):
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
usuario = payload.get("sub")
if usuario is None:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
return usuario
except JWTError:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
Tokens contêm informações do usuário e podem ser verificados sem consultar banco de dados.
3.2 Endpoint de Login
from datetime import datetime, timedelta
def criar_token(data: dict, expires_delta: timedelta):
to_encode = data.copy()
expire = datetime.utcnow() + expires_delta
to_encode.update({"exp": expire})
return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
@app.post("/token")
async def login(username: str, password: str):
# valida usuário (ex: banco de dados)
if username == "admin" and password == "123":
token = criar_token({"sub": username}, expires_delta=timedelta(minutes=30))
return {"access_token": token, "token_type": "bearer"}
raise HTTPException(status_code=400, detail="Usuário ou senha inválidos")
3.3 Protegendo Endpoints
@app.get("/usuarios/me")
async def ler_usuario_atual(usuario: str = Depends(validar_token)):
return {"usuario": usuario}
Depends(validar_token)
exige token válido antes de acessar o endpoint.
4. Autenticação OAuth2 e Roles
FastAPI suporta OAuth2 scopes, permitindo controle de permissões:
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token", scopes={"admin": "Acesso de administrador"})
@app.get("/admin")
async def admin_area(usuario: str = Depends(validar_token)):
if "admin" not in usuario.scopes:
raise HTTPException(status_code=403, detail="Permissão negada")
Permite controle refinado de acesso por função.
5. Boas Práticas para APIs Profissionais
Versionamento de API (
/v1/usuarios
) para compatibilidade futura.Rate limiting para proteger endpoints contra abuso:
Usar Redis ou FastAPI-Limiter
Documentação automática com OpenAPI e Swagger (
/docs
)CORS configurado para segurança em front-ends externos:
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["https://meusite.com"],
allow_methods=["*"],
allow_headers=["*"],
)
Logging estruturado para monitoramento de requisições e erros.
Teste automatizado usando pytest + HTTPX.
Deploy seguro com HTTPS, containers ou PaaS.
6. Segurança Avançada
Proteção contra brute force: limitar tentativas de login.
Expiração de token e refresh token para controle de sessão.
Hash de senhas com
bcrypt
oupasslib
.
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
senha_hash = pwd_context.hash("minha_senha")
pwd_context.verify("minha_senha", senha_hash)
7. Escalabilidade e Performance
FastAPI + Uvicorn / Gunicorn para multi-worker:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
Asynchronous endpoints permitem alta concorrência em I/O-bound.
Integração com Redis ou RabbitMQ para tasks assíncronas.
8. Aplicações Profissionais
APIs web e mobile com autenticação JWT/OAuth2
Microservices distribuídos
Plataformas financeiras com controle de permissões e auditoria
Sistemas de IoT que exigem alta performance e escalabilidade
Plataformas SaaS com múltiplos usuários e roles
9. Conclusão
FastAPI permite criar APIs robustas, seguras e de alto desempenho.
Técnicas avançadas incluem:
JWT, OAuth2, roles e scopes
Rate limiting e CORS
Logging e monitoramento
Asynchronous endpoints para alta concorrência
Seguindo boas práticas, é possível criar APIs profissionais, escaláveis e seguras, prontas para ambientes de produção.
Comentários
Postar um comentário