Bun é o runtime JavaScript que combina velocidade de startup (~7ms), fetch nativo otimizado e test runner integrado em um único binário. Para consumir a API de CPF da CPFHub.io, o overhead mínimo do Bun garante que o tempo de resposta total seja determinado pela rede, não pelo runtime. Não publicamos um número de latência — meça no seu ambiente. A disponibilidade contratada por plano é Grátis 95%, Pro 99% e Corporativo 99,9%; veja preços.
Consulta básica com fetch nativo
O Bun implementa a Web Fetch API como global, assim como o Deno. A diferença está na performance — o Bun otimiza internamente as conexões HTTP para throughput máximo. Consulte a documentação oficial do Bun para detalhes sobre as otimizações de rede:
// src/cpfhub.ts
interface CPFData {
cpf: string;
name: string;
nameUpper: string;
gender: string;
birthDate: string;
day: number;
month: number;
year: number;
}
interface CPFApiResponse {
success: boolean;
data?: CPFData;
}
const API_URL = "https://api.cpfhub.io/cpf";
const API_KEY = Bun.env.CPFHUB_API_KEY ?? "";
const TIMEOUT_MS = 10000;
export async function consultarCPF(cpf: string): Promise<{
sucesso: boolean;
dados?: CPFData;
erro?: string;
}> {
const cpfLimpo = cpf.replace(/\D/g, "");
if (cpfLimpo.length !== 11) {
return { sucesso: false, erro: "CPF deve conter 11 digitos" };
}
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);
try {
const response = await fetch(`${API_URL}/${cpfLimpo}`, {
method: "GET",
headers: {
"x-api-key": API_KEY,
"Accept": "application/json",
},
signal: controller.signal,
});
clearTimeout(timeoutId);
if (!response.ok) {
return { sucesso: false, erro: `Status ${response.status}` };
}
const resultado: CPFApiResponse = await response.json();
if (!resultado.success || !resultado.data) {
return { sucesso: false, erro: "CPF nao encontrado" };
}
return { sucesso: true, dados: resultado.data };
} catch (error) {
clearTimeout(timeoutId);
if (error instanceof Error && error.name === "AbortError") {
return { sucesso: false, erro: "Timeout na consulta" };
}
return { sucesso: false, erro: String(error) };
}
}
Note o uso de Bun.env para acessar variáveis de ambiente — a API específica do Bun, embora process.env também funcione por compatibilidade com Node.js.
Servidor HTTP com Bun.serve
O Bun inclui um servidor HTTP integrado que é significativamente mais rápido que o http do Node.js. Veja como criar uma API de validação de CPF:
// src/server.ts
import { consultarCPF } from "./cpfhub";
const PORT = parseInt(Bun.env.PORT ?? "3000");
function jsonResponse(body: object, status = 200): Response {
return new Response(JSON.stringify(body), {
status,
headers: {
"Content-Type": "application/json",
"X-Powered-By": "Bun",
},
});
}
const server = Bun.serve({
port: PORT,
async fetch(req: Request): Promise<Response> {
const url = new URL(req.url);
const inicio = performance.now();
// Health check
if (url.pathname === "/health") {
return jsonResponse({
status: "ok",
runtime: "bun",
version: Bun.version,
timestamp: new Date().toISOString(),
});
}
// Rota de consulta de CPF
if (req.method === "GET" && url.pathname.startsWith("/api/cpf/")) {
const cpf = url.pathname.split("/api/cpf/")[1];
if (!cpf || cpf.replace(/\D/g, "").length !== 11) {
return jsonResponse(
{ erro: "CPF invalido. Informe 11 digitos na URL." },
400
);
}
const resultado = await consultarCPF(cpf);
const duracao = (performance.now() - inicio).toFixed(2);
if (!resultado.sucesso) {
return jsonResponse(
{ erro: resultado.erro, duracaoMs: duracao },
resultado.erro?.includes("nao encontrado") ? 404 : 500
);
}
return jsonResponse({
valido: true,
dados: {
nome: resultado.dados!.name,
cpf: resultado.dados!.cpf,
genero: resultado.dados!.gender,
dataNascimento: resultado.dados!.birthDate,
},
duracaoMs: duracao,
});
}
return jsonResponse({ erro: "Rota nao encontrada" }, 404);
},
error(error: Error): Response {
console.error("Erro no servidor:", error);
return jsonResponse({ erro: "Erro interno do servidor" }, 500);
},
});
console.log(`Servidor Bun rodando em http://localhost:${server.port}`);
Execute com:
CPFHUB_API_KEY=sua_chave bun run src/server.ts
Testes com bun:test
O Bun inclui um test runner nativo que é até 30x mais rápido que o Jest:
// src/cpfhub.test.ts
import { describe, test, expect, mock } from "bun:test";
import { consultarCPF } from "./cpfhub";
describe("consultarCPF", () => {
test("rejeita CPF com menos de 11 digitos", async () => {
const resultado = await consultarCPF("12345");
expect(resultado.sucesso).toBe(false);
expect(resultado.erro).toBe("CPF deve conter 11 digitos");
});
test("remove formatacao do CPF", async () => {
const resultado = await consultarCPF("123.456.789-01");
expect(resultado.erro).not.toBe("CPF deve conter 11 digitos");
});
test("retorna timeout apos limite", async () => {
const fetchOriginal = globalThis.fetch;
globalThis.fetch = mock(() =>
new Promise((_, reject) => {
setTimeout(() => reject(new DOMException("Aborted", "AbortError")), 100);
})
);
const resultado = await consultarCPF("12345678901");
expect(resultado.sucesso).toBe(false);
expect(resultado.erro).toContain("Timeout");
globalThis.fetch = fetchOriginal;
});
});
Execute os testes:
bun test
Comparativo de performance entre runtimes
O Bun se destaca em cenários de alta concorrência e baixa latência:
| Métrica | Node.js 20 | Deno 1.38 | Bun 1.1 |
|---|---|---|---|
| Tempo de startup | ~50ms | ~30ms | ~7ms |
| Requisições/s (HTTP) | ~45.000 | ~55.000 | ~105.000 |
| Fetch (latência) | ~2ms | ~1.8ms | ~0.8ms |
| Install de pacotes | ~15s | ~12s | ~3s |
Para uma API de validação de CPF, o overhead mínimo do Bun significa que a maior parte do tempo de resposta é determinada pela rede e pela API, não pelo runtime. Não publicamos um número de latência da CPFHub.io — meça no seu ambiente. A disponibilidade por plano está em preços.
Configuração para produção
Para deploy em produção, crie um Dockerfile otimizado:
FROM oven/bun:1.1 AS base
WORKDIR /app
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile --production
COPY src ./src
ENV NODE_ENV=production
EXPOSE 3000
CMD ["bun", "run", "src/server.ts"]
Perguntas frequentes
O Bun é compatível com pacotes npm existentes para chamadas HTTP?
Sim. O Bun mantém compatibilidade com o ecossistema npm — pacotes como axios e node-fetch funcionam sem modificação. Dito isso, o fetch nativo do Bun já é otimizado e não requer bibliotecas externas para a maioria dos casos de uso, incluindo integração com a CPFHub.io.
Como lidar com o limite de consultas do plano gratuito no Bun?
O plano gratuito da CPFHub.io oferece 50 consultas por mês. Ao atingir esse limite, a API não bloqueia as requisições — cobra R$0,15 por consulta adicional. Para controlar o consumo no Bun, implemente um contador em memória com Bun.env e persista o estado em um arquivo JSON usando Bun.write() se precisar sobreviver a restarts.
Como configurar variáveis de ambiente no Bun para a chave de API?
O Bun lê automaticamente arquivos .env na raiz do projeto — sem necessidade de bibliotecas como dotenv. Use Bun.env.CPFHUB_API_KEY para acessar a chave. Em produção, defina a variável diretamente no ambiente de execução (Docker, systemd, etc.) e nunca commite o arquivo .env no repositório.
O Bun suporta TypeScript nativamente para integração com APIs?
Sim. O Bun executa TypeScript sem transpilação prévia — basta rodar bun run arquivo.ts. Isso acelera o desenvolvimento e elimina a necessidade de configurar tsc ou ts-node. Os tipos TypeScript para as respostas da CPFHub.io podem ser definidos diretamente no projeto, como demonstrado nos exemplos acima.
Conclusão
O Bun traz uma proposta convincente para integrações com APIs externas: performance excepcional, fetch nativo otimizado, servidor HTTP integrado e testes rápidos — tudo em um único runtime. Para aplicações que precisam validar CPF com overhead mínimo de runtime, a combinação do Bun com a API da CPFHub.io é uma escolha sólida. A CPFHub.io não publica um número de latência — meça no seu ambiente — e oferece disponibilidade contratada por plano (Grátis 95%, Pro 99%, Corporativo 99,9%); detalhes em preços.
Cadastre-se em cpfhub.io
CPFHub.io
Pronto para integrar a API?
50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.
Sobre a redação
Redação CPFHub.io
Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.



