跳到主要内容

请求库

  • axios
  • ky

ky​

  • https://github.com/sindresorhus/ky

  • 基于Fetch API

  • 小巧而优雅

  • 跨多平台支持,支持在浏览器、Node.js、Deno等不同的运行环境中使用

  • 提供了很多优雅的api, 如提供了hooks钩子方法、提供了get、post等方法

  • 支持请求超时处理、错误处理

  • 支持设置url前缀

  • 等等特性

对比维度ky库原生Fetch API核心差异与优势分析
核心功能
HTTP方法支持提供.get(), .post()等快捷方法需手动设置method参数ky通过方法快捷方式减少代码冗余,提升开发效率。
JSON处理自动序列化请求体/反序列化响应体,无需手动处理需手动调用response.json(),并处理可能的解析错误ky简化了JSON交互流程,减少开发者手动操作。
错误处理默认将非2xx状态码视为错误,自动抛出异常需手动检查response.ok状态,自行处理错误逻辑ky提供开箱即用的错误处理机制,避免遗漏状态码检查。
重试机制内置可配置的重试策略(如限制次数、指定状态码)无内置重试功能,需自行实现ky通过retry选项增强请求可靠性,适合网络不稳定的场景。
开发体验
代码简洁性链式调用+Promise,支持async/await基础Promise支持,但需多层.then()处理响应ky代码更简洁,例如POST请求代码量减少30%-50%。
默认配置提供prefixUrl统一设置URL前缀,headers默认包含Accept: application/json需手动为每个请求添加公共配置ky通过extend()创建实例复用配置,提升代码可维护性。
超时控制支持全局或单次请求的超时设置(timeout选项)需通过AbortController手动实现ky的timeout参数简化了超时逻辑,避免复杂的手动中断逻辑。
高级特性
Hooks系统提供beforeRequest, beforeRetry, afterResponse等生命周期钩子无钩子机制,需通过封装函数模拟ky的钩子支持实现日志记录、请求修改等高级功能,扩展性更强。
进度跟踪支持上传/下载进度监听(通过onDownloadProgress等选项)需依赖ReadableStream API手动实现ky为大数据传输场景提供更友好的进度监控方案。
取消请求兼容AbortController,支持与Fetch相同的取消机制原生支持AbortController两者在此特性上能力相当,ky保持与原生API的兼容性。
性能与兼容性
包体积约3KB(gzip后)浏览器原生支持,无额外体积ky在轻量化方面表现优异,适合对包大小敏感的项目。
浏览器支持支持现代浏览器,旧版需polyfill原生支持所有实现Fetch标准的浏览器Fetch兼容性更广,ky依赖现代浏览器特性但可通过polyfill降级。
服务端支持通过ky-universal支持Node.js环境仅限浏览器环境,Node.js需使用node-fetch等polyfillky提供跨环境一致性,简化全栈开发中的HTTP客户端选择。

使用​

js
const api = ky.create({
prefixUrl: 'https://example.com/',
retry: 0, // 请求出错时 不自动重试 默认会自动重试2次
});
const data = api.get('api/user').json();