Files
docs/versioned_docs/version-2.21/developer-guide/restful-api/api-client.md
Ryan Wang 9df9374ce3 docs: update documentations for 2.21 (#502)
Signed-off-by: Ryan Wang <i@ryanc.cc>
2025-06-15 14:49:12 +08:00

113 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: API Client 请求库
description: 介绍使用 API Client 请求库发起 API 请求的方式
---
在 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可以获得更好的类型提示。
:::
## 模块介绍
`@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 请求](../plugin/api-reference/ui/api-request.md#使用)
### 在 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这样可以方便处理异常逻辑和认证逻辑。
```javascript
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 提示
认证方式的说明请参考:[认证方式](./introduction.md#认证方式)
:::