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
- 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.
- Migrações Limpas: O D1 suporta migrações em SQL puro aplicadas diretamente via Wrangler CLI (
npx wrangler d1 migrations apply). - 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.