Ky 2.0 Fetch API Wrapper with Revamped Hooks, Smarter Timeouts, and Built-In Schema Validation

TL;DR · AI 摘要
Ky 2.0 引入了统一的钩子、智能超时、更清晰的 URL 处理和内置的响应验证,提升 HTTP 请求体验。
核心要点
- Ky 2.0 统一了所有钩子,使用单个状态对象,提升 API 一致性。
- 新增 totalTimeout 选项,限制整个操作的总时间,避免超时问题。
- 支持 Zod、Valibot 等验证器,实现 JSON 响应的类型验证。
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- Ky 2.0 的更新
- 统一的钩子系统
- 基于单个状态对象
- 提升 API 一致性
- 智能超时机制
- totalTimeout 选项
- 限制总操作时间
- 内置响应验证
- 支持 Zod、Valibot
- JSON 响应类型验证
金句 / Highlights
值得收藏与分享的关键句。
Ky 2.0 统一了所有钩子,使用单个状态对象,提升 API 一致性。
新增 totalTimeout 选项,限制整个操作的总时间,避免超时问题。
支持 Zod、Valibot 等验证器,实现 JSON 响应的类型验证。
Ky 2.0 Fetch API 封装器,焕新的钩子、更智能的超时设置以及内置的模式验证 - InfoQ
InfoQ 首页 News Ky 2.0 Fetch API 封装器,焕新的钩子、更智能的超时设置以及内置的模式验证
Web 开发
面向代理时代工程:如何定义、构建、测试和运营 AI 驱动的系统(网络研讨会 7 月 16 日)
Ky 2.0 Fetch API 封装器,焕新的钩子、更智能的超时设置以及内置的模式验证
6 月 18 日,2026 年 2 分钟阅读
作者
- Daniel Curtis
#### 为 InfoQ 写作
激发你的好奇心。
每月帮助 55 万+ 全球
高级开发人员
保持领先。
联系我
收听这篇文章 -
0:00
音频准备播放
你的浏览器不支持音频元素。
正常
1.25x
1.5x
喜欢
新下拉阅读列表
- 阅读列表
由 Sindre Sorhus 创建的 Ky,这是一个基于 Fetch API 的小型而优雅的 JavaScript HTTP 客户端,已经发布了版本 2.0,这是多年来的第一个主要版本,带来了焕新的钩子、更智能的超时设置、更清晰的 URL 处理方式以及内置的响应验证功能。
Ky 2.0 将所有钩子统一到一个单一的状态对象周围。beforeRequest、afterResponse、beforeRetry 和 beforeError 钩子现在都接收一个 {request, options, retryCount, ...} 参数,而不是单独的参数,使 API 更具一致性,并且在未来更容易扩展。一个新的 init 钩子在所有其他操作之前运行,而 beforeError 现在会针对每种错误类型触发,而不仅仅是 HTTPError。
超时设置也进行了重新设计。除了现有的每尝试一次超时设置之外,还新增了一个 totalTimeout 选项,用于限制整个操作在所有重试和延迟中的总时间,如果超过这个时间,将抛出一个 TimeoutError。重试处理更加严格,专门的 NetworkError 类用于处理网络错误,而自动重试仅限于真正的网络故障,如 DNS 错误或连接被拒绝,而不是编程错误。
URL 处理,长期以来一直是一个令人困惑的问题,现在被拆分为两个更清晰的选项。prefixUrl 选项已被重命名为 prefix,并且现在允许输入中带有前导斜杠,而一个新的 baseUrl 选项遵循标准的 URL 解析方式。
此次发布还为 .json() 带来了标准模式验证,允许开发人员使用 Zod、Valibot 和其他兼容的验证器来验证和类型化响应。HTTPError 现在暴露了一个预解析的 data 属性,这解决了资源泄漏问题,并且无需等待第二次调用即可访问错误体。
在 Hacker News 上,维护者 Seth Holladay 描述了预发布的工作:
许多生活质量的改进。超时和钩子已经焕新。与自定义实例相关的基础 URL 的一些怪异问题已经解决。所有已知的错误都已修复。
当被问及 Ky 与 axios 的比较时,他回答:
Ky 从一开始就设计为使用 fetch,而 Axios 则试图适应 fetch,这并不总是能很好地工作。我们还拥有更好的 TypeScript 支持,包括内置的模式验证和类型推断。
在 Reddit 上,开发者们对 ky 表示了赞赏:
这非常酷。基本上是 fetch++。这些基本上是我会为 fetch 编写封装器的内容,但编写封装器有点烦人,而且需要一些我不太想做的测试。
在另一个帖子中,一位从 axios 转换过来的评论者表示他们“喜欢它”,另一位则将新的更改描述为非常实用。
Ky 2.0 现在需要 Node.js 22,钩子回调必须转移到单个状态对象形式,.json() 在遇到空响应和 204 响应时会抛出异常,而不是返回空字符串,searchParams 现在会与 URL 中已有的查询参数合并,错误体必须从 error.data 读取,而不是从 error.response.json()。发布说明中附带了完整的迁移指南,每个更改都有更改前后的示例。
Ky 是由 Sindre Sorhus、Seth Holladay 和 Szymon Marczak 维护的开源 HTTP 客户端。它仅占用几个千字节,并且可以在浏览器、Node.js、Bun 和 Deno 上运行,将其定位为比 axios 更轻量、更符合 fetch 原生的替代方案。
作者部分的主要包装器
关于作者
部分标题
每个作者的主要包装器
#### Daniel Curtis
显示更多
显示更少
#### 此内容属于 Web 开发主题
##### 相关主题:
- 开发
- Web 开发
- Node.js
- TypeScript
- API
- 相关编辑
- 相关赞助商 缺失的代理 AI 堆栈层:为什么 AI 应用需要持久会话
- 相关赞助商 使用 Ably AI Transport。专为整个代理到用户体验构建的基础设施。立即开始构建。
InfoQ 新闻通讯
每周二发送上一周 InfoQ 内容的汇总。加入超过 250,000 名高级开发者的社区。查看示例
我们保护您的隐私。