Construindo APIs robustas com Cloudflare Workers e Bancos D1

Uma análise prática de como rotear APIs (index.js, db.js) e modelar bancos de dados globais direto no Edge.

Hospedar o frontend de graça é fácil. A verdadeira revolução dos últimos anos foi a capacidade de hospedar bancos de dados relacionais e APIs de altíssima performance no Edge, sem gerenciar um único servidor ou pagar por instâncias paradas.

A união do Cloudflare Workers com o Cloudflare D1 (banco de dados SQLite distribuído) tornou-se a stack padrão para nossos projetos mais ambiciosos, desde simuladores de concursos até apps de gestão.

O Padrão de Projeto no Worker

Diferente do Express.js, um Worker roda em um ambiente V8 Isolate. O código deve iniciar ultra-rápido.

A estrutura de API que utilizamos segue um padrão de injeção de dependências modular:

1. index.js (O Roteador Central) Aqui instanciamos o Hono ou o itty-router. Não há lógica de negócios aqui, apenas o mapeamento de URLs para funções.

import { Router } from 'itty-router';
import { handlePessoa } from './pessoaHandler.js';

const router = Router();
router.get('/api/pessoa/:id', handlePessoa);

export default {
  fetch: router.handle
}

2. db.js (A Camada de Acesso a Dados) O D1 é injetado no método fetch pelo ambiente (via env.DB). Nós geralmente criamos wrappers neste arquivo para evitar repetição de código (ex: tratar arrays vazios, parsear JSON de colunas dinâmicas).

3. Os Handlers (pessoaHandler.js, feedbackHandler.js) Aqui a mágica acontece. No caso do nosso simulador do TJRJ, o pessoaHandler.js recebe o número de inscrição, pega o objeto de banco de dados (env.DB) e roda uma query SQL direta no D1.

export async function handlePessoa(request, env) {
  const { id } = request.params;
  const { results } = await env.DB.prepare(
    "SELECT * FROM candidatos WHERE inscricao = ?"
  ).bind(id).all();
  
  return Response.json(results);
}

Vantagens dessa Arquitetura

  1. Latência Zero: Como a API e o banco de dados rodam “na borda” (nos servidores mais próximos do usuário, não em um data center na Virgínia), a resposta da API costuma voltar em menos de 30 milissegundos.
  2. Migrações Limpas: O D1 suporta migrações em SQL puro aplicadas diretamente via Wrangler CLI (npx wrangler d1 migrations apply).
  3. Escala Infinita: Se mil candidatos acessarem o simulador ao mesmo tempo para ver as notas de cotas e pontuações discursivas, o Worker escala instantaneamente sem derrubar o banco de dados, protegendo contra picos de acesso repentinos.

Migrar suas APIs legadas para Workers + D1 não é apenas sobre economizar custos de AWS, é sobre entregar uma velocidade absurda para os seus usuários.