Web前端开发网

fly63.com

首页 资源 工具 文章 教程 栏目
  • 在线搜索
  • 文章标签
  • 广告合作
  • 网站投稿
  • 赞助一下
  • 关于我们
搜索

在线工具_工作生活好帮手

打造各种简单、易用、便捷的在线工具,网友无需注册和下载安装即可使用

点击查看

资源分类

AI智能 酷站推荐 招聘/兼职 框架/库 模块/管理 移动端UI框架 Web-UI框架 Js插件 Jquery插件 CSS相关 IDE环境 在线工具 图形动效 游戏框架 node相关 调试/测试 在线学习 社区/论坛 博客/团队 前端素材 图标/图库 建站资源 设计/灵感 IT资讯
提交资源 / 链接反馈

Ky

分享
复制链接
新浪微博
QQ 好友

扫一扫分享

GitHub:https://github.com/sindresorhus/ky
网站描述:现代HTTP请求的Axios和Fetch的最佳替代品
GitHub

在JavaScript项目中处理HTTP请求时,我们通常会在Axios和Fetch之间选择。但现在,出现了一个更优秀的替代方案——Ky。


什么是Ky?

Ky是一个轻量级的HTTP客户端,大小只有约157KB。它基于原生的Fetch api构建,但提供了更丰富的功能和更好的开发体验。

简单来说,Ky具备了Axios的强大功能,同时保持了Fetch的简洁API。


为什么你应该考虑Ky?

1. 极致的轻量级设计

Ky的体积很小,对于关注性能的项目来说是个理想选择。它不会明显增加你的打包体积,却能提供完整的功能。

2. 现代化的API设计

Ky的API既直观又强大。看看这个简单的GET请求:

import ky from 'ky';

// 发起请求就是这么简单
const data = await ky.get('https://api.example.com/data').json();
console.log(data);

3. 内置重试机制

网络请求可能会失败,Ky内置了重试功能:

// 如果请求失败,会自动重试2次
const response = await ky.get('https://api.example.com/data', {
  retry: 2
}).json();

这在处理不稳定的网络连接时特别有用。


Ky的独特优势

强大的钩子系统

Ky提供了两个重要的钩子:beforeRequest和afterResponse,让你可以轻松控制请求和响应的处理。

为所有请求添加认证令牌:

const api = ky.extend({
  hooks: {
    beforeRequest: [
      request => {
        // 从本地存储获取令牌
        const token = localStorage.getItem('authToken');
        // 自动添加到请求头
        request.headers.set('Authorization', `Bearer ${token}`);
      }
    ]
  }
});

// 现在所有使用api发起的请求都会自动携带令牌
const userData = await api.get('https://api.example.com/user').json();

自动处理Token过期:

const apiWithAuth = ky.extend({
  hooks: {
    afterResponse: [
      async (request, options, response) => {
        // 如果收到401未授权响应
        if (response.status === 401) {
          // 自动刷新令牌
          const newToken = await refreshAuthToken();
          // 更新请求头
          request.headers.set('Authorization', `Bearer ${newToken}`);
          // 重新发起请求
          return ky(request);
        }
      }
    ]
  }
});

更智能的错误处理

Ky会自动为不成功的HTTP状态码(如404、500)抛出错误,这让错误处理变得更加简单:

try {
  const data = await ky.get('https://api.example.com/data').json();
} catch (error) {
  console.error('请求失败:', error.message);
  // 这里可以显示用户友好的错误信息
}


实际使用示例

示例1:获取数据

// 获取用户列表
async function getUsers() {
  try {
    const users = await ky.get('/api/users').json();
    return users;
  } catch (error) {
    console.error('获取用户失败:', error);
    return [];
  }
}

示例2:提交数据

// 创建新用户
async function createUser(userData) {
  try {
    const response = await ky.post('/api/users', {
      json: userData,
      retry: 3  // 失败时重试3次
    }).json();
    
    return response;
  } catch (error) {
    console.error('创建用户失败:', error);
    throw error;
  }
}

// 使用示例
await createUser({
  name: '张三',
  email: 'zhangsan@example.com'
});

示例3:上传文件

// 上传文件
async function uploadFile(file) {
  const formData = new FormData();
  formData.append('file', file);
  
  const response = await ky.post('/api/upload', {
    body: formData,
    timeout: 30000  // 30秒超时
  }).json();
  
  return response;
}


与Axios和Fetch的对比

特性KyAxiosFetch
包大小约157KB约300KB内置,无需额外包
重试机制内置需要额外配置需要手动实现
请求取消支持支持需要AbortController
JSON处理自动自动需要手动处理
错误处理自动抛出非2xx错误自动抛出非2xx错误需要手动检查状态
钩子系统内置需要拦截器需要手动封装

什么时候选择Ky?

适合使用Ky的场景:

  • 新项目或需要重构HTTP层的现有项目

  • 对打包体积敏感的应用

  • 需要现代化、简洁API的项目

  • 需要内置重试和高级错误处理的场景

可能继续使用Axios的场景:

  • 现有项目已经大量使用Axios,迁移成本高

  • 需要请求取消等高级功能(Ky也支持,但API略有不同)

  • 团队对Axios已经很熟悉


迁移建议

如果你决定从Axios迁移到Ky,这里有一些提示:

  1. 逐步迁移:可以先在新功能中使用Ky,逐步替换旧的Axios代码

  2. 创建适配层:可以创建一个统一的HTTP客户端,隐藏具体实现细节

  3. 注意差异:

    • Ky默认抛出非2xx状态码的错误,而Axios不会

    • 超时设置的方式不同

    • 请求取消的API不同


总结

Ky提供了一个在现代Web开发中处理HTTP请求的优雅方案。它结合了Fetch的简洁和Axios的强大,同时保持了轻量级的特点。

Ky的优势总结:

  • 更小的打包体积

  • 更现代的API设计

  • 内置实用功能(重试、钩子等)

  • 更好的开发体验

  • 活跃的维护和更新

对于新项目,Ky绝对值得尝试。它可能会成为你下一个项目的默认HTTP客户端选择。

无论你最终选择Ky、Axios还是Fetch,重要的是根据项目需求做出合适的技术决策。Ky的出现给了我们一个很好的新选择,让我们的代码更加简洁和现代化。

仅供个人学习参考/导航指引使用,具体请以第三方网站说明为准,本站不提供任何专业建议。如果地址失效或描述有误,请联系站长反馈~感谢您的理解与支持!

链接: https://fly63.com/nav/4806

广告图片

more>>
相关栏目
layer
layer是一款口碑极佳的web弹层组件
点击进入 GitHub
iScroll.js
IScroll是移动页面上被使用的一款仿系统滚动插件。
官网 GitHub
wangEditor
基于javascript和css开发的 Web富文本编辑器
官网 GitHub
ueditor
由百度web前端研发部开发所见即所得富文本web编辑器
官网 GitHub
highlight
Highlight.js 是一个用 JavaScript 写的代码高亮插件,在客户端和服务端都能工作。
官网 GitHub
UglifyJS
一个js 解释器、最小化器、压缩器、美化器工具集
官网 GitHub
lozad.js
高性能,轻量级,可配置的懒加载图片工具
官网 GitHub
Sortable.js
简单灵活的 JavaScript 拖放排序插件
官网 GitHub
validate.js
表单提供了强大的验证功能,让客户端表单验证变得更简单
官网 GitHub
Draggin.js
一款兼容移动手机的js拖拽插件
官网 GitHub
lazysizes.js
响应式图像延迟加载JS插件【懒加载】
官网 GitHub
cropper.js
通过canvas实现图片裁剪
官网 GitHub
clipboard.js
浏览器中复制文本到剪贴板的插件,不需要Flash,仅仅2kb
官网 GitHub
siema
轻量级简单的纯 Js轮播插件
官网 GitHub
Mermrender
用于生成序列和UML图的RESTful渲染管道
官网 GitHub
Editor.js
JSON格式输出数据的富文本和媒体编辑器
官网 GitHub

手机预览

首页 技术导航 在线工具 技术文章 教程资源 AI工具集 前端库/框架 实用工具箱

Copyright © 2018 Web前端开发网提供免费在线工具、编程学习资源(教程/框架/库),内容以学习参考为主,助您解决各类实际问题,快速提升专业能力。