Skip to content

Zod OpenAPI

Zod OpenAPI Hono는 OpenAPI를 지원하는 확장된 Hono 클래스다. 이를 통해 Zod를 사용해 값과 타입을 검증하고 OpenAPI Swagger 문서를 생성할 수 있다. 이 웹사이트에서는 기본적인 사용법만 소개한다.

먼저 Zod로 스키마를 정의한다. z 객체는 @hono/zod-openapi에서 임포트해야 한다:

ts
import { z } from '@hono/zod-openapi'

const ParamsSchema = z.object({
  id: z
    .string()
    .min(3)
    .openapi({
      param: {
        name: 'id',
        in: 'path',
      },
      example: '1212121',
    }),
})

const UserSchema = z
  .object({
    id: z.string().openapi({
      example: '123',
    }),
    name: z.string().openapi({
      example: 'John Doe',
    }),
    age: z.number().openapi({
      example: 42,
    }),
  })
  .openapi('User')

다음으로 라우트를 생성한다:

ts
import { createRoute } from '@hono/zod-openapi'

const route = createRoute({
  method: 'get',
  path: '/users/{id}',
  request: {
    params: ParamsSchema,
  },
  responses: {
    200: {
      content: {
        'application/json': {
          schema: UserSchema,
        },
      },
      description: '사용자 정보 조회',
    },
  },
})

마지막으로 앱을 설정한다:

ts
import { OpenAPIHono } from '@hono/zod-openapi'

const app = new OpenAPIHono()

app.openapi(route, (c) => {
  const { id } = c.req.valid('param')
  return c.json({
    id,
    age: 20,
    name: 'Ultra-man',
  })
})

// OpenAPI 문서는 /doc에서 확인할 수 있다
app.doc('/doc', {
  openapi: '3.0.0',
  info: {
    version: '1.0.0',
    title: 'My API',
  },
})

Hono와 동일한 방식으로 앱을 시작할 수 있다. Cloudflare Workers와 Bun을 사용한다면 다음 진입점을 사용한다:

ts
export default app

관련 자료

Released under the MIT License.