# 常见场景示例

URL: https://caijiao.org/ky/examples
Source: docs/ky/examples.md
Description: 提供 Ky 在实际开发中常见请求场景的示例，包括 GET、POST、文件上传、分页查询等。

本章节提供一些 Ky 在实际项目中常见的请求场景示例，帮助快速上手。

## 1. 分页获取列表

```javascript
import ky from 'ky';

async function fetchUsers(page = 1, limit = 10) {
  const users = await ky.get('https://api.example.com/users', {
    searchParams: { page, limit }
  }).json();
  console.log(users);
}

fetchUsers();
````

## 2. 创建新资源（POST 请求）

```javascript
async function createPost() {
  const post = await ky.post('https://api.example.com/posts', {
    json: { title: '新文章', content: '内容示例' }
  }).json();
  console.log(post);
}

createPost();
```

## 3. 更新资源（PUT / PATCH 请求）

```javascript
async function updatePost() {
  const updated = await ky.put('https://api.example.com/posts/1', {
    json: { title: '更新后的标题', content: '更新内容' }
  }).json();
  console.log(updated);
}
```

## 4. 删除资源（DELETE 请求）

```javascript
async function deletePost() {
  await ky.delete('https://api.example.com/posts/1');
  console.log('删除成功');
}
```

## 5. 文件上传

```javascript
const formData = new FormData();
formData.append('file', fileInput.files[0]);

await ky.post('https://api.example.com/upload', { body: formData });
```

## 6. 文件下载

```javascript
const blob = await ky.get('https://api.example.com/file.pdf').blob();
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'file.pdf';
a.click();
URL.revokeObjectURL(url);
```

## 7. 带身份验证的请求

```javascript
const api = ky.create({
  headers: { 'Authorization': 'Bearer YOUR_TOKEN' }
});

const data = await api.get('https://api.example.com/protected').json();
```

## 小结

* Ky 的请求场景覆盖 GET/POST/PUT/PATCH/DELETE、分页查询、文件上传下载、带认证请求等。
* 使用实例可复用配置，提高代码可维护性。
* 简洁 API 和自动 JSON 解析让开发更高效。
