教程 ky tutorial

Ky 最佳实践

为了在项目中高效、稳定地使用 Ky,以下是一些推荐的最佳实践。

1. 创建统一实例

  • 使用 ky.create() 创建全局或模块实例,统一管理前缀 URL、请求头、超时和重试策略。
javascript
import ky from 'ky';

export const api = ky.create({
  prefixUrl: 'https://api.example.com',
  headers: { 'Authorization': 'Bearer TOKEN' },
  timeout: 5000,
  retry: 2
});

`

2. 使用 Hooks 统一拦截请求与响应

  • 统一处理请求日志、错误处理、响应格式化。
javascript
api.hooks.beforeRequest.push(request => {
  console.log('请求开始:', request.url);
});

api.hooks.afterResponse.push((request, options, response) => {
  if (!response.ok) console.warn('请求失败:', response.status);
});

3. 错误分类处理

  • 区分 HTTPError、TimeoutError、AbortError,针对不同类型采取不同处理策略。
javascript
try {
  await api.get('data').json();
} catch (error) {
  if (error.name === 'HTTPError') { /* 处理 HTTP 错误 */ }
  else if (error.name === 'TimeoutError') { /* 处理超时 */ }
  else if (error.name === 'AbortError') { /* 处理取消请求 */ }
}

4. 统一响应格式解析

  • 对返回数据结构一致的 API,可在 afterResponse 中统一解析 JSON 或处理状态码,减少重复代码。

5. 避免重复请求

  • 对于同一接口的频繁请求,可结合缓存或节流策略,避免不必要的网络请求。

6. 使用 TypeScript 类型

  • 对请求和响应数据使用类型定义,提高代码可维护性和可读性。
typescript
interface User {
  id: number;
  name: string;
}

const users: User[] = await api.get('users').json();

小结

  • 使用实例统一配置,减少重复代码。
  • Hooks 提供灵活拦截和处理能力。
  • 分类处理错误,提高稳定性。
  • 配合 TypeScript、缓存和统一解析,可构建高质量的请求层。