请求库
- axios
- ky
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等polyfill | ky提供跨环境一致性,简化全栈开发中的HTTP客户端选择。 |
使用
const api = ky.create({
prefixUrl: 'https://example.com/',
retry: 0, // 请求出错时 不自动重试 默认会自动重试2次
});
const data = api.get('api/user').json();