Начало работы с HonoJS для создания легковесных веб-API

Создание современных веб-API не должно требовать тяжелых фреймворков или сложных настроек. Если вы ищете быструю, легковесную альтернативу Express или Koa, которая работает в различных JavaScript-средах выполнения, HonoJS может быть именно тем, что вам нужно.
Ключевые моменты
- HonoJS — это сверхбыстрый веб-фреймворк, который работает в любой JavaScript-среде выполнения, включая Node.js, Bun, Deno и Cloudflare Workers
- Построен на веб-стандартах, таких как Request, Response и Fetch API, для максимальной портативности
- Минимальный размер бандла менее 20 КБ с лучшей производительностью по сравнению с Express
- Включает необходимые middleware для CORS, логирования и сжатия из коробки
Что делает HonoJS особенным
HonoJS — это небольшой, сверхбыстрый веб-фреймворк, построенный на веб-стандартах. В отличие от традиционных Node.js-фреймворков, он работает в любой JavaScript-среде выполнения — Node.js, Bun, Deno, Cloudflare Workers, AWS Lambda и других. Эта портативность достигается благодаря основе на стандартных веб-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
.
Создание REST-маршрутов с HonoJS
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)
})
// POST эндпоинт с парсингом JSON
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
) предоставляет все необходимое: данные запроса, помощники для ответов и утилиты для заголовков, cookies и многого другого.
Discover how at OpenReplay.com.
Middleware для production-готовых API
HonoJS включает необходимые middleware из коробки. Вот как добавить CORS, логирование и сжатие:
import { Hono } from 'hono'
import { cors } from 'hono/cors'
import { logger } from 'hono/logger'
import { compress } from 'hono/compress'
const app = new Hono()
// Применяем middleware
app.use('*', logger())
app.use('*', cors())
app.use('*', compress())
// Ваши маршруты здесь
app.get('/api/health', (c) => c.json({ status: 'ok' }))
export default app
Создание пользовательских middleware очень простое:
// Простой middleware для аутентификации
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 }
Это означает, что вы можете начать разработку локально и развернуть в edge-локациях без переписывания вашего 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 в бенчмарках. Его минимальные накладные расходы и основа на веб-стандартах означают более быстрое время отклика и меньшее использование памяти. Для edge-развертываний небольшой размер бандла (менее 20 КБ) означает более быстрые холодные старты.
Заключение
HonoJS предлагает освежающий подход к созданию веб-API. Его сочетание простоты, производительности и гибкости среды выполнения делает его отличным выбором для современных JavaScript-приложений. Независимо от того, создаете ли вы микросервисы, serverless-функции или традиционные REST API, HonoJS предоставляет необходимые инструменты без излишеств.
Начните с простого API, добавляйте middleware по мере необходимости и развертывайте где угодно — таков подход HonoJS.
Часто задаваемые вопросы
HonoJS обычно показывает в 2-3 раза лучшую производительность по сравнению с Express в бенчмарках благодаря минимальным накладным расходам и основе на веб-стандартах. Он имеет более быстрое время отклика, меньшее использование памяти и значительно более быстрые холодные старты для serverless-развертываний.
Да, HonoJS работает с большинством Node.js пакетов при работе на Node.js или Bun. Однако для edge-сред выполнения, таких как Cloudflare Workers, вам понадобятся пакеты, совместимые с веб-стандартами и не зависящие от специфичных для Node.js API.
Абсолютно. HonoJS готов к production и используется многими компаниями для API, обрабатывающих миллионы запросов. Его легковесная природа, встроенная поддержка TypeScript и комплексная экосистема middleware делают его идеальным как для небольших, так и для крупномасштабных приложений.
Кривая обучения минимальна. HonoJS использует похожие паттерны маршрутизации и концепции middleware, как и Express. Основные различия — это объект Context вместо req/res и использование 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.