0

0

Hono OpenAPI 简介:简化 HonoJS 的 API 文档

霞舞

霞舞

发布时间:2024-12-08 08:00:23

|

715人浏览过

|

来源于dev.to

转载

hono openapi 简介:简化 honojs 的 api 文档

第一件事:为什么要在已经存在一个 openapi 库的情况下为 hono 创建另一个 openapi 库?

这是很多人问过的问题。是的,有由 yusuke 创建的 zod openapi。虽然它是一个很棒的软件包,但它有一些重大的局限性,导致了新解决方案的创建。

@hono/zod-openapi 面临的挑战

让我们通过比较这两种方法来解释为什么要构建 hono-openapi。

1. 语法和工作流程差异

这是使用 @hono/zod-openapi 的示例:

// using @hono/zod-openapi 
import { openapihono, createroute, z } from '@hono/zod-openapi';

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

const route = createroute({
  method: 'get',
  path: '/users/{id}',
  request: {
    params: paramsschema,
  },
});

const app = new openapihono();

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

// the openapi documentation will be available at /doc
app.doc('/doc', {
  openapi: '3.0.0',
  info: {
    version: '1.0.0',
    title: 'my api',
  },
});

现在将其与使用 hono-openapi 编写的同一应用程序进行比较:

// Using Hono-OpenAPI
import z from 'zod';
import { Hono } from 'hono';
import { describeRoute } from 'hono-openapi';
import { resolver, validator as zValidator } from 'hono-openapi/zod';

// Extending the Zod schema with OpenAPI properties
import 'zod-openapi/extend';

const paramSchema = z.object({
  id: z.string().min(3).openapi({ example: '1212121' }),
});

const app = new Hono();

app.get(
  '/',
  zValidator('param', paramSchema),
  (c) => {
    const param = c.req.valid('param');
    return c.text(`Hello ${param?.id}!`);
  }
);

app.get(
  '/openapi',
  openAPISpecs(app, {
    documentation: {
      info: {
        title: 'Hono',
        version: '1.0.0',
        description: 'API for greeting users',
      },
      servers: [
        { url: 'http://localhost:3000', description: 'Local server' },
      ],
    },
  })
);

区别很明显:hono-openapi 让您可以直接在标准 honojs 工作流程中工作。这消除了陡峭的学习曲线,并确保语法与 honojs 文档和约定保持一致。

2. 选择加入的挑战

使用 @hono/zod-openapi,改造现有的 honojs 应用程序以生成 openapi 规范是一项重大挑战。为大型应用程序重写路由可能非常耗时且容易出错。 hono-openapi 通过作为中间件来解决这个问题,因此您可以将其添加到现有应用程序中,而无需进行重大更改。

3. 验证者支持有限

原库仅支持zod。虽然 zod 非常出色,但许多开发人员使用 valibot、arktype 和 typebox 等替代品。 hono-openapi 与验证器无关,为多个库提供一流的支持。

知鹿匠
知鹿匠

知鹿匠教师AI工具,新课标教案_AI课件PPT_作业批改

下载

为什么 openapi 规范很重要

有些人可能会想,“为什么要费心 openapi 规范呢?没有它们我的应用程序也能正常工作。”

这就是为什么生成 openapi 规范会改变游戏规则:

  1. api客户端生成:使用规范自动生成各种编程语言的客户端,节省开发时间。
  2. 开发人员协作:让您的团队与最新的 api 文档保持同步,减少沟通不畅和错误。
  3. 简化调试:通过为所有端点提供清晰、准确的文档,消除 api 失败时的猜测。
  4. 最佳实践:自动生成随代码库一起发展的文档,确保跨分支和版本的一致性。

如果您曾经在前端和后端开发人员必须手动同步 api 详细信息的团队工作过,您就会知道这有多痛苦。 openapi 规范通过提供单一事实来源解决了这个问题。


为什么选择hono-openapi?

为了应对这些挑战并推广最佳实践,hono-openapi 的构建考虑了以下目标:

  • 与验证器无关:使用您喜欢的验证库 - zod、typebox、arktype、valibot 或其他库。
  • 无缝集成:将其作为中间件添加到任何 honojs 项目中,只需进行最少的更改。
  • 自动 openapi 生成:定义一次架构,让库处理其余的事情。
  • 类型安全:使用 typescript 构建,以实现可靠且一致的类型验证。
  • 可定制:定制生成的 openapi 规范以满足您项目的要求。

准备好开始了吗?

如果这听起来像是您一直在等待的解决方案,请查看库并加入对话:

  • github 存储库:hono-openapi
  • 文档:github 自述文件 |荣誉示例

我希望本文能够说服您尝试 hono-openapi 并了解它如何简化 api 的构建和文档记录。您的反馈很重要!让我们一起建立一个更强大的 honojs 社区。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

178

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

217

2025.12.18

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

1080

2026.01.21

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

4

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

1

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

16

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3.2万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号