本文へ移動

Hono OpenAPI ​

hono-openapi は、Zod、Valibot、ArkType、TypeBox などの検証ライブラリや、Standard Schema に対応するすべてのライブラリと連携し、Hono API の OpenAPI ドキュメントを自動生成するミドルウェアです。

🛠️ インストール ​

このパッケージと、使用する検証ライブラリおよびその依存関係をインストールします。

bash
npm install hono-openapi @hono/standard-validator

このガイドでは valibot を使います。

bash
npm install valibot @valibot/to-json-schema

インストールの詳細はこちらを参照してください:https://honohub.dev/docs/openapi#installation


🚀 はじめに ​

1. スキーマを定義する ​

使用する検証ライブラリでリクエストとレスポンスのスキーマを定義します。Valibot を使った例を示します。

ts
import * as v from 'valibot'

const querySchema = v.object({
  name: v.optional(v.string()),
})

const responseSchema = v.string()

2. ルートを作成する ​

describeRoute を使ってルートのドキュメントと検証を設定します。

ts
import { Hono } from 'hono'
import { describeRoute, resolver, validator } from 'hono-openapi'

const app = new Hono()

app.get(
  '/',
  describeRoute({
    description: 'Say hello to the user',
    responses: {
      200: {
        description: 'Successful response',
        content: {
          'text/plain': { schema: resolver(responseSchema) },
        },
      },
    },
  }),
  validator('query', querySchema),
  (c) => {
    const query = c.req.valid('query')
    return c.text(`Hello ${query?.name ?? 'Hono'}!`)
  }
)

注意:
hono-openapi の validator() を使うと、query、json、param、form に追加した検証が OpenAPI のリクエストスキーマに自動的に含まれます。
describeRoute() 内でリクエストパラメーターを手動で定義する必要はありません。


3. OpenAPI 仕様を生成する ​

OpenAPI ドキュメント用のエンドポイントを追加します。

ts
import { openAPIRouteHandler } from 'hono-openapi'

app.get(
  '/openapi',
  openAPIRouteHandler(app, {
    documentation: {
      info: {
        title: 'Hono API',
        version: '1.0.0',
        description: 'Greeting API',
      },
      servers: [
        { url: 'http://localhost:3000', description: 'Local Server' },
      ],
    },
  })
)

さらに詳しく知りたい場合は、ドキュメントを参照してください:https://honohub.dev/docs/openapi

MIT ライセンスで公開されています。