> For AI agents: the complete documentation index is available at https://docs.halo.run/llms.txt, the full documentation bundle is available at https://docs.halo.run/llms-full.txt.

# API Client 请求库

在 2.17.0 版本中，Halo 提供了新的 `@halo-dev/api-client` JS 库，用于简化在 Halo 内部、插件的 UI 中、外部应用程序中请求 Halo 接口的逻辑。

此文档将介绍如何通过 `@halo-dev/api-client` 发起 API 请求。

## 安装

```shell
pnpm install @halo-dev/api-client axios
```

:::info 推荐使用 TypeScript
推荐在项目中引入 TypeScript，可以获得更好的类型提示。
:::

## 模块介绍

在 `@halo-dev/api-client` 包中导出了以下模块：

```ts
import {
  coreApiClient,
  consoleApiClient,
  ucApiClient,
  publicApiClient,
  createCoreApiClient,
  createConsoleApiClient,
  createUcApiClient,
  createPublicApiClient,
  axiosInstance,
} from "@halo-dev/api-client";
```

- **coreApiClient**: 为 Halo 所有[自定义模型](https://github.com/halo-dev/rfcs/tree/main/extension)的 CRUD 接口封装的 API Client。
- **consoleApiClient**: 为 Halo 针对 Console 提供的接口封装的 API Client。
- **ucApiClient**: 为 Halo 针对 UC 提供的接口封装的 API Client。
- **publicApiClient**: 为 Halo 所有公开访问的接口封装的 API Client。
- **createCoreApiClient**: 用于创建[自定义模型](https://github.com/halo-dev/rfcs/tree/main/extension)的 CRUD 接口封装的 API Client，需要传入 axios 实例。
- **createConsoleApiClient**: 用于创建 Console 接口封装的 API Client，需要传入 axios 实例。
- **createUcApiClient**: 用于创建 UC 接口封装的 API Client，需要传入 axios 实例。
- **createPublicApiClient**: 用于创建公开访问接口封装的 API Client，需要传入 axios 实例。
- **axiosInstance**: 内部默认创建的 axios 实例。

## 使用

### 在 Halo 插件中使用

参考：[插件开发 / API 请求](https://docs.halo.run/developer-guide/plugin/api-reference/ui/api-request.md#%E4%BD%BF%E7%94%A8)

### 在 Halo 内部使用

如果需要在 Halo 核心模块中使用 `@halo-dev/api-client`，可以直接使用 `coreApiClient`、`consoleApiClient`、`ucApiClient`、`publicApiClient`，无需单独处理异常逻辑和认证逻辑。

示例

```ts
import { coreApiClient } from "@halo-dev/api-client";

coreApiClient.content.post.listPost().then((response) => {
  // handle response
});
```

### 在外部程序中使用

在外部程序中使用时，需要自行创建 axios 实例，并使用 `createCoreApiClient`、`createConsoleApiClient`、`createUcApiClient`、`createPublicApiClient` 创建 API Client，这样可以方便处理异常逻辑和认证逻辑。

```ts
import axios from "axios";

const axiosInstance = axios.create({
  baseURL: "http://localhost:8090",
  headers: {
    // 使用个人令牌进行认证
    Authorization: "Bearer pat_1234567890abcdef",
  },
});

// 添加请求拦截器
axiosInstance.interceptors.request.use(
  (config) => {
    return config;
  },
  (error) => {
    return Promise.reject(error);
  },
);

// 添加响应拦截器
axiosInstance.interceptors.response.use(
  (response) => {
    return response;
  },
  async (error: AxiosError) => {
    // handle error
  },
);

const coreApiClient = createCoreApiClient(axiosInstance);

coreApiClient.content.post.listPost().then((response) => {
  // handle response
});
```

:::info 查看认证方式
认证方式的说明请参考：[认证方式](https://docs.halo.run/developer-guide/restful-api/introduction.md#%E8%AE%A4%E8%AF%81%E6%96%B9%E5%BC%8F)
:::
