tutorial

Hono + Cloudflare Workers: API Tipada do Zero ao Deploy

17 de abril de 2026 3 min de leituraPor Autor
Hono + Cloudflare Workers: API Tipada do Zero ao Deploy

O que e Hono?

Hono e um framework web ultrarapido para edge runtimes. Funciona nativamente no Cloudflare Workers sem nenhuma adaptacao. Bundle menor que 12KB, TypeScript nativo, zero dependencias externas.

Express foi projetado para Node.js e nao roda em Cloudflare Workers nativamente. Hono usa Web Fetch API com tipagem de Bindings integrada — o mesmo modelo mental que os Workers esperam.

Criando o Projeto

pnpm create hono@latest minha-api -- --template cloudflare-workers
cd minha-api
pnpm install

Estrutura com Bindings Tipados

import { Hono } from "hono"

type Env = {
  Bindings: {
    DB_URL: string
    CACHE: KVNamespace
    JWT_SECRET: string
  }
}

const app = new Hono<Env>()

app.get("/health", (c) =>
  c.json({ status: "ok", region: c.req.raw.cf?.colo })
)

app.get("/artigos", async (c) => {
  const cached = await c.env.CACHE.get("artigos:list")
  if (cached) return c.json(JSON.parse(cached))

  const data = await buscarArtigos(c.env.DB_URL)
  await c.env.CACHE.put("artigos:list", JSON.stringify(data), {
    expirationTtl: 3600,
  })
  return c.json(data)
})

export default app
Sem a interface Env com os Bindings, o TypeScript nao autocompleta c.env.* e erros de nome de binding so aparecem em runtime. Declare a interface e passe como generic em new Hono<Env>().

Middleware de Autenticacao JWT

import { createMiddleware } from "hono/factory"
import { verifyToken } from "../lib/jwt"

export const authRequired = createMiddleware<Env>(async (c, next) => {
  const header = c.req.header("Authorization") ?? ""
  const token = header.startsWith("Bearer ") ? header.slice(7) : null

  if (!token) return c.json({ error: "Token ausente" }, 401)

  const payload = await verifyToken(token, c.env.JWT_SECRET)
  if (!payload) return c.json({ error: "Token invalido" }, 401)

  c.set("userId", payload.sub)
  await next()
})

Deploy na Edge Global

Um comando publica a API em mais de 300 datacenters simultaneamente:

wrangler deploy
Para enviar logs ou metricas sem bloquear a resposta, use ctx.waitUntil(enviarLog(...)) dentro do handler. O Workers executa a Promise apos retornar a resposta ao cliente.

Gerando Testes com IA

Contexto: API Hono no Cloudflare Workers com TypeScript.

Rotas a testar:

  • GET /health → retorna
  • GET /artigos → busca cache KV, fallback no banco, retorna JSON

Gere testes Vitest completos com:

  1. Mock do KVNamespace (simular cache hit e cache miss)
  2. Mock do banco de dados (sucesso e erro de conexao)
  3. Verificacao de status HTTP e headers Content-Type
  4. Teste de 401 ao acessar rota protegida sem token Bearer

Use @hono/testing para simular requests. Inclua beforeEach/afterEach para limpar mocks entre testes.

Conclusao

Hono e a escolha natural para Workers: pequeno, rapido, tipado e sem friccao com a plataforma. Em menos de 50 linhas temos uma API com cache KV, autenticacao JWT e deploy global automatizado.

Escrito por

Autor

Autor(a) do Portal Marina Bernardi.

Continue lendo

Artigos relacionados

Discussão

0 comentários

Entre para participar
Faça login para comentar e interagir com outros alunos.
Voltar para o Blog