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.
Criando o Projeto
pnpm create hono@latest minha-api -- --template cloudflare-workers
cd minha-api
pnpm installEstrutura 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 appEnv 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 deployctx.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:
- Mock do KVNamespace (simular cache hit e cache miss)
- Mock do banco de dados (sucesso e erro de conexao)
- Verificacao de status HTTP e headers Content-Type
- 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