
Bun.js + Hono + OpenAPI: документований API зі Scalar
Практичний посібник зі створення легкого API на Bun.js і Hono, валідації через Zod та автоматичної OpenAPI-документації у Scalar.
Hono маршрутизує запити на Bun, Zod перевіряє payload, OpenAPI описує контракт, а Scalar показує інтерактивну документацію. Коли ці шари походять з узгодженої схеми, frontend і backend менше розходяться.
Архітектура контракту
Схема має бути executable-документацією, а не окремим Markdown-файлом, який швидко застаріває.
Hono
Швидкий router із Web стандартами Request/Response та middleware.
Zod
Перевіряє params, query і JSON body до виконання handler-а.
OpenAPI
Формалізує endpoint-и, відповіді, помилки та security-схеми.
Scalar
Віддає зручний інтерактивний API reference для команди й інтеграторів.
Один route-контракт обслуговує запит, валідацію, OpenAPI JSON і документацію Scalar.
Скріншот секції architectureКрок 1: встановлення та базовий сервер
Встановіть пакети
bun init
bun add hono @hono/zod-openapi zod @scalar/hono-api-referenceСтворіть OpenAPI app
import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
import { apiReference } from "@scalar/hono-api-reference";
const app = new OpenAPIHono();
const task = z.object({ id: z.string(), title: z.string(), done: z.boolean() });
const route = createRoute({ method: "get", path: "/tasks/{id}", request: { params: z.object({ id: z.string().uuid() }) }, responses: { 200: { content: { "application/json": { schema: task } }, description: "A task" } } });
app.openapi(route, (c) => c.json({ id: c.req.valid("param").id, title: "Read docs", done: false }));Підключіть документацію
app.doc("/openapi.json", { openapi: "3.1.0", info: { title: "Tasks API", version: "1.0.0" } });
app.get("/docs", apiReference({ spec: { url: "/openapi.json" } }));
export default { port: Number(Bun.env.PORT ?? 3000), fetch: app.fetch };Запуск: bun run src/index.ts. Відкрийте /docs у браузері, а JSON-контракт доступний на /openapi.json.
Крок 2: валідація body та помилок
Описуйте не лише успішну відповідь. Клієнту потрібні стабільні схеми 400/404/500, інакше документація створює хибне відчуття типобезпеки.
const createTask = createRoute({
method: "post", path: "/tasks",
request: { body: { content: { "application/json": { schema: z.object({ title: z.string().trim().min(1).max(120) }) } } } },
responses: {
201: { content: { "application/json": { schema: task } }, description: "Created" },
422: { content: { "application/json": { schema: z.object({ error: z.string() }) } }, description: "Validation error" },
},
});
app.openapi(createTask, async (c) => {
const body = c.req.valid("json");
return c.json({ id: crypto.randomUUID(), title: body.title, done: false }, 201);
});Крок 3: contract-first для клієнтів
Frontend
Використовуйте /openapi.json як джерело для генерації fetch-клієнта або типів. Це зменшує дублювання DTO.
Публічна документація
Захистіть /docs у приватному API або додайте auth middleware, якщо endpoint-и не призначені для всіх.
Версіювання
Виносьте breaking changes у /v2 або окремий документ. Не змінюйте тихо required-поля в чинній схемі.
Тести та CI
Перевіряйте OpenAPI JSON
curl http://localhost:3000/openapi.jsonЗберігайте snapshot або запускайте OpenAPI validator у CI, щоб випадково не видалити response schema.
Тестуйте через app.fetch
import { expect, test } from "bun:test";
import app from "./index";
test("rejects invalid task id", async () => {
const response = await app.fetch(new Request("http://localhost/tasks/nope"));
expect(response.status).toBe(400);
});Типові помилки
Часті запитання
Обидва показують OpenAPI-документацію. Scalar — сучасний API reference UI, який легко підключити окремим маршрутом у Hono.
Ні. Hono використовує Web API і запускається на Bun, але залежності та runtime-specific API варто перевірити у своєму deployment.
Висновок
Опишіть задачу — перші 15 хвилин консультації безкоштовні.
Пов'язані статті

Скільки коштує розробка AI асистента у 2026: RAG чатбот, база знань, CRM, Telegram та підтримка
Практичний гід для бізнесу: від чого залежить ціна розробки AI асистента у 2026 році, що входить у RAG чатбот, інтеграції з CRM, Telegram, guardrails, оцінювання, моніторинг і супровід.

AI може зробити більше. Не краще: що насправді кажуть дослідження про розробку ігор
Generative AI входить у production ігор, але докази складніші за хайп. Розбираємо adoption, ставлення гравців, ризики якості та практичний workflow.

AI для розробки лендінгів: де він реально прискорює запуск, а де псує конверсію
Дослідження про використання AI у розробці лендінгів: v0, Webflow AI, Builder.io, Framer-подібні AI builders, генерація UX, copy, SEO, персоналізація, A/B тести, ризики шаблонності, безпеки, доступності та технічного боргу.

AI SEO / GEO у 2026: ваші наступні клієнти — не люди, а агенти
Пошук зміщується від кліків до відповідей. Боти та AI-агенти сканують, цитують, рекомендують і дедалі частіше купують. Дізнайтесь, що таке AI SEO / GEO, чому класичного SEO вже недостатньо, і як PAS7 Studio допомагає брендам перемагати у «агентному» вебі.
Професійна розробка для вашого бізнесу
Створюємо сучасні веб-рішення та боти для бізнесу. Дізнайтеся, як ми можемо допомогти вам досягти цілей.