# 全局配置与实例

URL: https://caijiao.org/ky/global-config
Source: docs/ky/global-config.md
Description: 讲解如何通过全局配置和创建实例统一管理 Ky 请求，提高复用性和可维护性。

Ky 支持全局配置和实例化请求，使得在项目中可统一管理请求前缀、请求头、超时、重试等配置，提高代码复用性。

## 创建 Ky 实例

使用 `ky.create()` 可以创建自定义实例：

```javascript
import ky from 'ky';

const api = ky.create({
  prefixUrl: 'https://api.example.com',
  headers: {
    'Authorization': 'Bearer YOUR_TOKEN'
  },
  timeout: 5000,
  retry: 2
});
````

## 使用实例发送请求

```javascript
async function getUser() {
  const data = await api.get('user').json();
  console.log(data);
}

async function createPost() {
  const post = await api.post('posts', {
    json: { title: 'New Post', content: 'Hello World' }
  }).json();
  console.log(post);
}

getUser();
createPost();
```

## 全局默认配置

Ky 允许在创建实例时统一配置：

* **prefixUrl**：请求基础 URL
* **headers**：默认请求头
* **timeout**：请求超时
* **retry**：失败重试次数
* **hooks**：请求或响应拦截器

```javascript
const api = ky.create({
  prefixUrl: 'https://api.example.com',
  headers: { 'Authorization': 'Bearer TOKEN' },
  timeout: 8000,
  retry: 3,
  hooks: {
    beforeRequest: [
      request => console.log('发送请求:', request.url)
    ],
    afterResponse: [
      (request, options, response) => console.log('收到响应:', response.status)
    ]
  }
});
```

## 小结

* 使用实例可复用配置，减少重复代码。
* 统一管理请求前缀、请求头、超时、重试和拦截器。
* Ky 实例可灵活组合，满足不同模块或服务的请求需求。
