Ky

2024-06-21 20:59:59 290
Ky 是一个基于 Fetch API 的现代化 HTTP 客户端,提供了简洁易用的 API,支持浏览器和 Node.js 环境。Ky 的设计理念是简化 HTTP 请求,使得开发者能够更快速地进行网络通信操作。

主要特点和功能

  1. 基于 Fetch API: 使用 Fetch API 实现,具备 Fetch 的所有优势。
  2. 简洁 API: 提供了简洁且现代化的 API,易于使用。
  3. 内置超时支持: 默认支持请求超时。
  4. 拦截器: 提供了请求和响应拦截器,方便进行请求预处理和响应处理。
  5. 自动 JSON 处理: 自动处理 JSON 请求和响应。
  6. 浏览器和 Node.js 支持: 兼容浏览器和 Node.js 环境。
  7. 轻量级: 库的体积小,适合前端应用。
  8. 自动重试: 支持自动重试机制。
  9. TypeScript 支持: 提供了完善的 TypeScript 类型定义。
  10. 流式响应: 支持处理流式响应。

使用场景

Ky 适用于各种需要进行 HTTP 请求的场景,特别是在需要简洁、现代化和高效的网络通信解决方案时:

  • 前端应用: 在前端应用中进行 API 请求。
  • 服务器端应用: 在 Node.js 环境中进行 HTTP 请求。
  • 数据获取: 从远程服务器获取数据。
  • 文件上传和下载: 实现文件上传和下载功能。
  • 请求拦截: 对请求和响应进行拦截和处理。

核心概览

Ky 的核心设计理念是提供一个简洁且现代化的 HTTP 客户端,使得 HTTP 请求变得简单、高效和灵活。其核心组件包括:

  • Fetch API 封装: 基于 Fetch API 实现的 HTTP 客户端。
  • 请求和响应拦截器: 方便进行请求预处理和响应处理。
  • 自动 JSON 处理: 自动将请求和响应处理为 JSON 格式。
  • 自动重试: 支持自动重试机制,提高请求的可靠性。

安装

可以通过 npm 或 yarn 安装 Ky:

使用 npm 安装

npm install ky

使用 yarn 安装

yarn add ky

基本用法

以下是一些基本的 Ky 示例,展示了如何使用 Ky 进行 HTTP 请求操作:

引入 Ky

const ky = require('ky');
// 或者使用 ES6 模块
import ky from 'ky';

发起 GET 请求

const response = await ky.get('https://jsonplaceholder.typicode.com/posts/1').json();
console.log(response); // 获取并解析 JSON 响应

发起 POST 请求

const response = await ky.post('https://jsonplaceholder.typicode.com/posts', {
  json: {
    title: 'foo',
    body: 'bar',
    userId: 1
  }
}).json();
console.log(response); // 解析 JSON 响应

设置请求超时

try {
  const response = await ky.get('https://jsonplaceholder.typicode.com/posts/1', { timeout: 5000 }).json();
  console.log(response);
} catch (error) {
  console.log('请求超时或失败', error);
}

自动重试

const response = await ky.get('https://jsonplaceholder.typicode.com/posts/1', { retry: 2 }).json();
console.log(response); // 自动重试最多 2 次

高级用法

使用中间件

const loggingMiddleware = {
  async beforeRequest(request) {
    console.log('发起请求:', request);
  },
  async afterResponse(request, options, response) {
    console.log('收到响应:', response);
    return response;
  }
};

const kyInstance = ky.create({ hooks: loggingMiddleware });

const response = await kyInstance.get('https://jsonplaceholder.typicode.com/posts/1').json();
console.log(response);

处理流式响应

const response = await ky.get('https://jsonplaceholder.typicode.com/posts/1');
const reader = response.body.getReader();

while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  console.log(new TextDecoder().decode(value));
}

常用 API 说明

GET 请求

  • ky.get(url, [options]): 发起 GET 请求。
  • ky.head(url, [options]): 发起 HEAD 请求。

POST 请求

  • ky.post(url, [options]): 发起 POST 请求。
  • ky.put(url, [options]): 发起 PUT 请求。
  • ky.patch(url, [options]): 发起 PATCH 请求。
  • ky.delete(url, [options]): 发起 DELETE 请求。

请求配置

  • json: 自动将请求体转换为 JSON。
  • searchParams: 设置 URL 查询参数。
  • timeout: 设置请求超时时间。
  • retry: 设置请求重试次数。

响应处理

  • json(): 解析 JSON 响应。
  • text(): 解析文本响应。
  • blob(): 解析 Blob 响应。
  • arrayBuffer(): 解析 ArrayBuffer 响应。

官方资源