为 Elysia 推出 OpenAPI 类型生成器

API 文档在 API 开发中扮演着至关重要的角色。
与团队、供应商或第三方服务合作时,通常需要一份完善的 API 文档,以确保顺畅的集成与协作。
如今大多数框架都将手动 OpenAPI 标注的负担留给了开发者。这可能耗时、容易出错,并且随着 API 的演进而难以维护。
但 Elysia 认真对待 OpenAPI
我们相信 API 文档应该是轻松且自动的,让开发者可以专注于构建出色的 API,而无需担心文档问题。
这就是为什么我们从一开始就在 Elysia 中围绕 OpenAPI 进行构建。
- 我们确保模式可以用于数据验证、类型推断和 OpenAPI 标注,所有这些都来自单一的真实来源。
- 我们提供了与 Standard Schema(Zod、Valibot 等)的集成,并在可能时将其转换为 OpenAPI 文档。
- 我们有一个仅需一行的 OpenAPI 插件,可以为您的 API 添加一个由 Scalar 提供的精美交互式 UI。

Elysia 仅用一行代码即可通过 Elysia OpenAPI 插件运行 Scalar UI
但即使是如此卓越的体验,我们仍希望将其推向更高境界。
今天,我们激动地宣布 OpenAPI 类型生成器 的发布,它可以从您的 Elysia 代码生成 OpenAPI 文档,无需任何手动标注。
OpenAPI 类型生成器
我们梦想着一个世界,您只需编写代码,文档就能自动、准确地生成,完全无需任何手动标注。
与我们梦想最接近的是 Python 的 FastAPI,它可以从 pydantic 模型生成 OpenAPI 文档。但这仅限于 pydantic 模型,无法与其他库或类型一起使用。
Elysia 类型生成器为 TypeScript 带来了类似的体验,但没有那个限制。它允许您将 任何 TypeScript 类型 自动转换为 OpenAPI 文档,来自任何库,不仅限于 Elysia。

Elysia 自动将请求体类型引用到响应模式中,列出了所有可能的响应状态码,完全无需任何手动模式标注。
它仅需 1 行 代码,即可直接从您的 TypeScript 类型 生成 OpenAPI 文档,完全无需任何标注。
这确实是开创性的
有史以来第一次,您现在可以真正地为您的 API 自动生成文档,无需任何手动标注。它开箱即用,适用于任何库。
它与现有的 Elysia 代码库和模式定义兼容,无需任何破坏性更改或像类型转换器(例如 Typia)这样的额外配置。
类型生成器与现有的模式定义共存,优先使用现有的模式定义,然后再回退到从类型进行推断。

从 Elysia 路由处理程序返回 Drizzle 查询将自动推断为 OpenAPI 模式。
它还兼容任何 TypeScript 库,即使是像 Drizzle 和 Prisma 这样的现代库中的复杂类型,也能开箱即用。
类型健全性
OpenAPI 类型生成器还支持复杂场景,例如来自生命周期/宏的多个状态,它们相互重叠,并由多个响应状态码分隔。
每个状态码可以返回多个值,Elysia 会将其作为联合类型处理,涵盖该状态码下所有可能的响应。准确列出所有可能的返回值。

自动从联合类型列出多个响应状态码。
这是意义深远的特性,其他任何框架都难以复制。
采用 OpenAPI 类型生成器
要将 OpenAPI 类型生成器添加到您的代码库,只需:
- 导出一个 Elysia 实例
- 提供根 Elysia 文件路径(如果未提供,Elysia 将使用
src/index.ts)
import { Elysia } from 'elysia'
import { openapi, fromTypes } from '@elysiajs/openapi'
export const app = new Elysia()
.use(
openapi({
references: fromTypes()
})
)Elysia 类型生成器将分析您的 Elysia 实例,并即时自动生成 OpenAPI 文档,无需构建步骤。
OpenAPI 类型生成器的文档可以在 模式:OpenAPI 中找到。
我们相信这个功能是 Elysia 真正独有的
虽然大多数 Web 框架需要花费大量精力和手动标注来创建 API 文档。
Elysia 可以为您编写 API 文档,没有任何其他框架能接近这种体验。
这之所以成为可能,完全得益于 Elysia 对端到端类型安全性的卓越支持。
我们很期待看到它将如何帮助您使用 Elysia 以最少的努力创建和维护高质量的 API 文档。
您可以通过今天将 @elysiajs/openapi 更新到最新版来尝试它,或者从 GitHub 仓库 实验我们的示例设置。