Files
docs/versioned_docs/version-2.20/developer-guide/restful-api/api-client.md
Ryan Wang 9876911e3a docs: update documentation for Halo 2.20 (#429)
为 [Halo 2.20](https://github.com/halo-dev/halo/releases/tag/v2.20.0) 更新文档。

/kind documentation

```release-note
None
```
2024-10-14 03:33:15 +00:00

3.3 KiB
Raw Blame History

title, description
title description
API Client 请求库 介绍使用 API Client 请求库发起 API 请求的方式

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

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

安装

pnpm install @halo-dev/api-client axios

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

模块介绍

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

import {
  coreApiClient,
  consoleApiClient,
  ucApiClient,
  publicApiClient,
  createCoreApiClient,
  createConsoleApiClient,
  createUcApiClient,
  createPublicApiClient,
  axiosInstance
} from "@halo-dev/api-client"
  • coreApiClient: 为 Halo 所有自定义模型的 CRUD 接口封装的 API Client。
  • consoleApiClient: 为 Halo 针对 Console 提供的接口封装的 API Client。
  • ucApiClient: 为 Halo 针对 UC 提供的接口封装的 API Client。
  • publicApiClient: 为 Halo 所有公开访问的接口封装的 API Client。
  • createCoreApiClient: 用于创建自定义模型的 CRUD 接口封装的 API Client需要传入 axios 实例。
  • createConsoleApiClient: 用于创建 Console 接口封装的 API Client需要传入 axios 实例。
  • createUcApiClient: 用于创建 UC 接口封装的 API Client需要传入 axios 实例。
  • createPublicApiClient: 用于创建公开访问接口封装的 API Client需要传入 axios 实例。
  • axiosInstance: 内部默认创建的 axios 实例。

使用

在 Halo 插件中使用

参考:插件开发 / API 请求

在 Halo 内部使用

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

示例

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

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

在外部程序中使用

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

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 提示 认证方式的说明请参考:认证方式 :::