$ python modulo_6.py
APIs e webhooks
Consumir APIs externas e criar as suas próprias com FastAPI. Webhooks para receber eventos em tempo real.
O que você vai aprender
- Consumir APIs REST com requests (auth, paginação, rate limit)
- Criar API rápida com FastAPI + Pydantic
- Receber webhooks e validar assinatura
- Documentação automática (OpenAPI/Swagger)
- Deploy simples com uvicorn
1. Consumir API externa
import requests
r = requests.get(
"https://api.github.com/users/iri-afk",
headers={"Accept": "application/vnd.github+json"},
timeout=10
)
r.raise_for_status()
data = r.json()
print(data["name"], data["public_repos"])
2. FastAPI — API mínima
pip install fastapi uvicorn[standard] pydantic
main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, EmailStr
from datetime import datetime
app = FastAPI(title="IRN Devs API", version="1.0")
class Lead(BaseModel):
nome: str
email: EmailStr
mensagem: str
leads: list[dict] = []
@app.get("/health")
def health():
return {"status": "ok", "ts": datetime.utcnow().isoformat()}
@app.post("/leads", status_code=201)
def criar_lead(lead: Lead):
item = lead.model_dump()
item["criado_em"] = datetime.utcnow().isoformat()
leads.append(item)
return item
@app.get("/leads")
def listar_leads():
return leads
uvicorn main:app --reload --port 8000
# docs em http://localhost:8000/docs
3. Webhook receptor
from fastapi import Request, Header
import hmac, hashlib
SECRET = b"seu-segredo-webhook"
@app.post("/webhook/pagamento")
async def webhook(request: Request, x_signature: str = Header(None)):
body = await request.body()
esperado = hmac.new(SECRET, body, hashlib.sha256).hexdigest()
if not hmac.compare_digest(esperado, x_signature or ""):
raise HTTPException(401, "assinatura inválida")
payload = await request.json()
# processar evento...
return {"received": True}
PRODUÇÃO
Sempre valide assinatura de webhooks. Nunca confie apenas no IP de origem.
EXERCÍCIO
1. Crie endpoints GET/POST para um recurso (ex.: tarefas).
2. Adicione autenticação simples com header X-API-Key.
3. Consuma sua própria API com requests e salve em JSON.
4. Simule um webhook e valide a assinatura HMAC.
2. Adicione autenticação simples com header X-API-Key.
3. Consuma sua própria API com requests e salve em JSON.
4. Simule um webhook e valide a assinatura HMAC.