Back

使用 HonoJS 构建轻量级 Web API 入门指南

使用 HonoJS 构建轻量级 Web API 入门指南

构建现代 Web API 不应该需要重型框架或复杂的设置。如果你正在寻找一个快速、轻量级的 Express 或 Koa 替代方案,并且能够在多个 JavaScript 运行时环境中工作,那么 HonoJS 可能正是你所需要的。

核心要点

  • HonoJS 是一个超快的 Web 框架,可以在任何 JavaScript 运行时环境中运行,包括 Node.js、Bun、Deno 和 Cloudflare Workers
  • 基于 Web 标准构建,如 Request、Response 和 Fetch API,具有最大的可移植性
  • 最小打包体积小于 20KB,性能优于 Express
  • 开箱即用包含 CORS、日志记录和压缩等基础中间件

HonoJS 的独特之处

HonoJS 是一个基于 Web 标准构建的小型、超快 Web 框架。与传统的 Node.js 框架不同,它可以在任何 JavaScript 运行时环境中运行——Node.js、Bun、Deno、Cloudflare Workers、AWS Lambda 等等。这种可移植性来源于它基于标准 Web API(如 Request、Response 和 Fetch)的基础架构。

import { Hono } from 'hono'
const app = new Hono()

app.get('/', (c) => c.text('Hello Hono!'))

export default app

这就是一个完整的 HonoJS 应用程序。没有样板代码,没有复杂的配置——只有简洁、现代的 JavaScript。

设置你的第一个 HonoJS API

让我们构建一个简单的 REST API 来看看 HonoJS 的实际应用。首先,创建一个新项目:

npm create hono@latest my-api

选择你偏好的运行时环境(Node.js、Bun 或 Cloudflare Workers)。在这个示例中,我们将使用 Node.js:

cd my-api
npm install
npm run dev

你的服务器现在运行在 http://localhost:3000

使用 HonoJS 构建 REST 路由

HonoJS 使用熟悉的路由语法,如果你使用过 Express,会感觉很自然:

import { Hono } from 'hono'
const app = new Hono()

// GET 端点
app.get('/api/users', (c) => {
  const users = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' }
  ]
  return c.json(users)
})

// 带有 JSON 解析的 POST 端点
app.post('/api/users', async (c) => {
  const body = await c.req.json()
  // 在生产环境中,保存到数据库
  return c.json({ message: 'User created', data: body }, 201)
})

// 动态路由
app.get('/api/users/:id', (c) => {
  const id = c.req.param('id')
  return c.json({ id, name: 'User ' + id })
})

export default app

Context 对象(c)提供了你需要的一切:请求数据、响应助手以及用于处理头部、cookie 等的工具。

用于生产就绪 API 的中间件

HonoJS 开箱即用地包含了基础中间件。以下是如何添加 CORS、日志记录和压缩的方法:

import { Hono } from 'hono'
import { cors } from 'hono/cors'
import { logger } from 'hono/logger'
import { compress } from 'hono/compress'

const app = new Hono()

// 应用中间件
app.use('*', logger())
app.use('*', cors())
app.use('*', compress())

// 你的路由在这里
app.get('/api/health', (c) => c.json({ status: 'ok' }))

export default app

创建自定义中间件很简单:

// 简单的认证中间件
const authMiddleware = async (c, next) => {
  const token = c.req.header('Authorization')
  if (!token || token !== 'Bearer secret-token') {
    return c.json({ error: 'Unauthorized' }, 401)
  }
  await next()
}

// 应用到特定路由
app.use('/api/protected/*', authMiddleware)
app.get('/api/protected/data', (c) => {
  return c.json({ secret: 'This is protected data' })
})

运行时可移植性:随处部署

HonoJS 最大的优势之一是其运行时灵活性。相同的代码可以在不同平台上工作,只需最小的修改:

对于 Cloudflare Workers:

export default app

对于 Node.js:

import { serve } from '@hono/node-server'
serve({ fetch: app.fetch, port: 3000 })

对于 Bun:

export default { port: 3000, fetch: app.fetch }

这意味着你可以在本地开始开发,然后部署到边缘位置,无需重写你的 API。

使用数据库集成扩展

以下是使用 Drizzle ORM 与 HonoJS 的快速示例:

import { Hono } from 'hono'
import { drizzle } from 'drizzle-orm/better-sqlite3'
import Database from 'better-sqlite3'
import { postsTable } from './schema'

const sqlite = new Database('app.db')
const db = drizzle(sqlite)

const app = new Hono()

app.get('/api/posts', async (c) => {
  const posts = await db.select().from(postsTable)
  return c.json(posts)
})

app.post('/api/posts', async (c) => {
  const { title, content } = await c.req.json()
  const result = await db.insert(postsTable).values({ title, content })
  return c.json(result, 201)
})

export default app

性能优势

HonoJS API 在基准测试中始终优于 Express。其最小的开销和 Web 标准基础意味着更快的响应时间和更低的内存使用。对于边缘部署,小的打包体积(小于 20KB)转化为更快的冷启动。

总结

HonoJS 为构建 Web API 提供了一种令人耳目一新的方法。它将简洁性、性能和运行时灵活性相结合,使其成为现代 JavaScript 应用程序的绝佳选择。无论你是在构建微服务、无服务器函数还是传统的 REST API,HonoJS 都能提供你需要的工具,而没有冗余。

从一个简单的 API 开始,根据需要添加中间件,并随处部署——这就是 HonoJS 的方式。

常见问题

在基准测试中,HonoJS 通常显示出比 Express 好 2-3 倍的性能,这得益于其最小的开销和 Web 标准基础。它具有更快的响应时间、更低的内存使用量,以及对于无服务器部署来说显著更快的冷启动速度。

是的,当在 Node.js 或 Bun 上运行时,HonoJS 可以与大多数 Node.js 包一起工作。但是,对于像 Cloudflare Workers 这样的边缘运行时环境,你需要使用与 Web 标准兼容且不依赖 Node.js 特定 API 的包。

绝对适合。HonoJS 已经生产就绪,被许多公司用于处理数百万请求的 API。其轻量级特性、内置的 TypeScript 支持和全面的中间件生态系统使其既适合小型应用程序也适合大规模应用程序。

学习曲线很小。HonoJS 使用与 Express 类似的路由模式和中间件概念。主要区别是使用 Context 对象而不是 req/res,以及使用 Web 标准 API。大多数 Express 开发者可以在几小时内熟练使用 HonoJS。

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay