Pular para o conteúdo
upgbp

APIs & Resiliência

Webhooks, filas, rate limit e tudo que falha de forma intermitente.

APIs & Resiliência10 min

Cortando o custo de API de LLM: medir, rotear e cachear

A fatura triplicou sem o uso triplicar. Como atribuir custo por funcionalidade e quais alavancas realmente rendem, na ordem de retorno.

  • Node 22
  • Postgres 15
  • API de LLM compatível com OpenAI
APIs & Resiliência11 min

Fila no Postgres com SKIP LOCKED, ou serviço de fila: qual escolher

ERROR: deadlock detected — Process 18442 waits for ShareLock on transaction 9912

Dois workers pegando a mesma tarefa é o defeito clássico de fila caseira. A cláusula que resolve, e quando vale trocar o banco por um serviço.

  • PostgreSQL 15
  • Node 22
  • Prisma 6.5
  • Upstash QStash
APIs & Resiliência9 min

Cron em serverless: Vercel Cron, pg_cron ou Cloudflare Workers

Cron job failed: GET /api/cron/faturas returned 401 Unauthorized

As três opções resolvem agendamento de formas incompatíveis. O critério de escolha, e os quatro erros que aparecem em qualquer uma delas.

  • Vercel Cron
  • Supabase pg_cron 1.6
  • Cloudflare Workers
  • Postgres 15
APIs & Resiliência7 min

429 em API de IA: fila com concorrência e orçamento de tokens

RateLimitError: 429 Rate limit reached. Limit: 30000 tokens/min. Try again in 1.28s

Promise.all sobre quinhentos itens não é paralelismo, é um ataque. Como respeitar os dois limites que essas APIs impõem sem serializar tudo.

  • Node 22
  • TypeScript 5.8
  • API de LLM compatível com OpenAI
APIs & Resiliência8 min

fetch failed com ECONNRESET no Node: undici, keep-alive e timeouts

TypeError: fetch failed { cause: Error: read ECONNRESET (code: ECONNRESET, syscall: read) }

A mensagem do fetch nativo não diz nada sozinha. O erro real está em err.cause, e a causa quase sempre é uma conexão reaproveitada tarde demais.

  • Node 22.14
  • undici 7
  • Next.js 15.3
APIs & Resiliência7 min

Retry com backoff, jitter e circuit breaker em TypeScript

HTTP 503 Service Unavailable: upstream connect error or disconnect/reset before headers

Repetir na hora piora a queda que você está tentando contornar. As quatro regras que separam um retry útil de um ataque contra o seu próprio fornecedor.

  • Node 22
  • TypeScript 5.8
  • Next.js 15.3
APIs & Resiliência9 min

FUNCTION_INVOCATION_TIMEOUT: quebrando trabalho longo em lotes

504: GATEWAY_TIMEOUT Code: FUNCTION_INVOCATION_TIMEOUT

Aumentar o maxDuration só empurra a falha para um arquivo maior. A correção é a requisição iniciar o trabalho em vez de executá-lo até o fim.

  • Next.js 15.3
  • Vercel
  • Prisma 6.5
  • Postgres 15
APIs & Resiliência9 min

Webhook executando duas vezes: como garantir idempotência

Webhook signature verification failed: No signatures found matching the expected signature for payload

Todo provedor de webhook entrega pelo menos uma vez, o que significa às vezes duas. A trava que resolve é uma constraint de banco, não um if.

  • Next.js 15.3
  • Stripe SDK 18
  • Prisma 6.5
  • Postgres 15