Skip to content

Commit 5608ded

Browse files
authored
docs: add documentation for RESTful API usage (#412)
添加 REST API 的使用文档。 Fixes #326 Fixes #216 ```release-note None ```
1 parent 3aadde1 commit 5608ded

File tree

17 files changed

+538
-85
lines changed

17 files changed

+538
-85
lines changed

docs/developer-guide/plugin/api-reference/ui/api-request.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ import {
2929
} from "@halo-dev/api-client"
3030
```
3131

32-
- **coreApiClient**: 为 Halo 所有自定义模型的 CRUD 接口封装的 api client
33-
- **consoleApiClient**: 为 Halo 针对 Console 提供的接口封装的 api client
34-
- **ucApiClient**: 为 Halo 针对 UC 提供的接口封装的 api client
35-
- **publicApiClient**: 为 Halo 所有公开访问的接口封装的 api client
36-
- **createCoreApiClient**: 用于创建自定义模型的 CRUD 接口封装的 api client,需要传入 axios 实例。
37-
- **createConsoleApiClient**: 用于创建 Console 接口封装的 api client,需要传入 axios 实例。
38-
- **createUcApiClient**: 用于创建 UC 接口封装的 api client,需要传入 axios 实例。
39-
- **createPublicApiClient**: 用于创建公开访问接口封装的 api client,需要传入 axios 实例。
32+
- **coreApiClient**: 为 Halo 所有自定义模型的 CRUD 接口封装的 API Client
33+
- **consoleApiClient**: 为 Halo 针对 Console 提供的接口封装的 API Client
34+
- **ucApiClient**: 为 Halo 针对 UC 提供的接口封装的 API Client
35+
- **publicApiClient**: 为 Halo 所有公开访问的接口封装的 API Client
36+
- **createCoreApiClient**: 用于创建自定义模型的 CRUD 接口封装的 API Client,需要传入 axios 实例。
37+
- **createConsoleApiClient**: 用于创建 Console 接口封装的 API Client,需要传入 axios 实例。
38+
- **createUcApiClient**: 用于创建 UC 接口封装的 API Client,需要传入 axios 实例。
39+
- **createPublicApiClient**: 用于创建公开访问接口封装的 API Client,需要传入 axios 实例。
4040
- **axiosInstance**: 内部默认创建的 axios 实例。
4141

4242
## 使用
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: 介绍
3-
description: 插件开发的准备工作
3+
description: Halo 插件机制的简介
44
---
55

66
Halo 采用可插拔架构,功能模块之间耦合度低、灵活性提高,支持用户按需安装、卸载插件,操作便捷。同时提供插件开发接口以确保较高扩展性和可维护性,这个系列的文档将帮助你了解如何开发 Halo 插件。
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
---
2+
title: API Client 请求库
3+
description: 介绍使用 API Client 请求库发起 API 请求的方式
4+
---
5+
6+
在 2.17.0 版本中,Halo 提供了新的 `@halo-dev/api-client` JS 库,用于简化在 Halo 内部、插件的 UI 中、外部应用程序中请求 Halo 接口的逻辑。
7+
8+
此文档将介绍如何通过 `@halo-dev/api-client` 发起 API 请求。
9+
10+
## 安装
11+
12+
```shell
13+
pnpm install @halo-dev/api-client axios
14+
```
15+
16+
:::info 提示
17+
推荐在项目中引入 TypeScript,可以获得更好的类型提示。
18+
:::
19+
20+
## 模块介绍
21+
22+
`@halo-dev/api-client` 包中导出了以下模块:
23+
24+
```ts
25+
import {
26+
coreApiClient,
27+
consoleApiClient,
28+
ucApiClient,
29+
publicApiClient,
30+
createCoreApiClient,
31+
createConsoleApiClient,
32+
createUcApiClient,
33+
createPublicApiClient,
34+
axiosInstance
35+
} from "@halo-dev/api-client"
36+
```
37+
38+
- **coreApiClient**: 为 Halo 所有[自定义模型](https://github.com/halo-dev/rfcs/tree/main/extension)的 CRUD 接口封装的 API Client。
39+
- **consoleApiClient**: 为 Halo 针对 Console 提供的接口封装的 API Client。
40+
- **ucApiClient**: 为 Halo 针对 UC 提供的接口封装的 API Client。
41+
- **publicApiClient**: 为 Halo 所有公开访问的接口封装的 API Client。
42+
- **createCoreApiClient**: 用于创建[自定义模型](https://github.com/halo-dev/rfcs/tree/main/extension)的 CRUD 接口封装的 API Client,需要传入 axios 实例。
43+
- **createConsoleApiClient**: 用于创建 Console 接口封装的 API Client,需要传入 axios 实例。
44+
- **createUcApiClient**: 用于创建 UC 接口封装的 API Client,需要传入 axios 实例。
45+
- **createPublicApiClient**: 用于创建公开访问接口封装的 API Client,需要传入 axios 实例。
46+
- **axiosInstance**: 内部默认创建的 axios 实例。
47+
48+
## 使用
49+
50+
### 在 Halo 插件中使用
51+
52+
参考:[插件开发 / API 请求](../plugin/api-reference/ui/api-request.md#使用)
53+
54+
### 在 Halo 内部使用
55+
56+
如果需要在 Halo 核心模块中使用 `@halo-dev/api-client`,可以直接使用 `coreApiClient``consoleApiClient``ucApiClient``publicApiClient`,无需单独处理异常逻辑和认证逻辑。
57+
58+
示例
59+
60+
```ts
61+
import { coreApiClient } from "@halo-dev/api-client"
62+
63+
coreApiClient.content.post.listPost().then(response => {
64+
// handle response
65+
})
66+
```
67+
68+
### 在外部程序中使用
69+
70+
在外部程序中使用时,需要自行创建 axios 实例,并使用 `createCoreApiClient``createConsoleApiClient``createUcApiClient``createPublicApiClient` 创建 API Client,这样可以方便处理异常逻辑和认证逻辑。
71+
72+
```javascript
73+
import axios from "axios"
74+
75+
const axiosInstance = axios.create({
76+
baseURL: "http://localhost:8090",
77+
headers: {
78+
// 使用个人令牌进行认证
79+
Authorization: 'Bearer pat_1234567890abcdef',
80+
}
81+
})
82+
83+
// 添加请求拦截器
84+
axiosInstance.interceptors.request.use(
85+
(config) => {
86+
return config;
87+
},
88+
(error) => {
89+
return Promise.reject(error);
90+
}
91+
);
92+
93+
// 添加响应拦截器
94+
axiosInstance.interceptors.response.use(
95+
(response) => {
96+
return response;
97+
},
98+
async (error: AxiosError) => {
99+
// handle error
100+
}
101+
);
102+
103+
const coreApiClient = createCoreApiClient(axiosInstance)
104+
105+
coreApiClient.content.post.listPost().then(response => {
106+
// handle response
107+
})
108+
```
109+
110+
:::info 提示
111+
认证方式的说明请参考:[认证方式](./introduction.md#认证方式)
112+
:::
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
---
2+
title: 介绍
3+
description: 介绍 Halo 的 RESTful API 使用方式
4+
---
5+
6+
Halo 提供了 RESTful 风格的 API,Halo 的前端(主要为 Console 和 UC)与后端的交互都是通过 API 完成的。
7+
8+
此文档将介绍如何使用 Halo 提供的 RESTful API。
9+
10+
## API 在线文档
11+
12+
文档地址:[https://api.halo.run](https://api.halo.run)
13+
14+
![API 文档预览](/img/developer-guide/rest-api/swagger-ui-overview.png)
15+
16+
其中,我们为 Halo 核心模块提供了几个分组,方便开发者查看:
17+
18+
- **Console API**:为 Console 控制台提供的自定义 API。
19+
- **User-center API**:为 UC 个人中心提供的自定义 API。
20+
- **Extension API**:核心[模型](https://github.com/halo-dev/rfcs/tree/main/extension)自动生成的 CRUD API。
21+
- **Public API**:公开的 API,无需认证。
22+
- **Aggregated API**:所有 API 的聚合。
23+
24+
## 认证方式
25+
26+
### 个人令牌(推荐)
27+
28+
个人令牌是一种用于访问 Halo API 的安全凭证,你可以使用个人令牌代替您的 Halo 账户密码进行身份验证。
29+
30+
在个人中心的**个人令牌**页面中,可以根据当前用户已有的权限创建个人令牌,创建方式可参考:[个人中心 / 个人令牌](../../user-guide/user-center.md#个人令牌)
31+
32+
创建成功后,将会得到一个 `pat_` 开头的字符串,接下来在所需请求的请求头中添加 `Authorization` 字段,值为 `Bearer <pat>` 即可。
33+
34+
#### 示例
35+
36+
cURL 请求示例:
37+
38+
```bash
39+
curl -X 'GET' \
40+
'https://demo.halo.run/apis/content.halo.run/v1alpha1/posts' \
41+
-H 'accept: */*' \
42+
-H 'Authorization: Bearer pat_1234567890abcdef'
43+
```
44+
45+
[Axios](https://www.axios-http.cn/) 请求示例:
46+
47+
```javascript
48+
import axios from 'axios';
49+
50+
axios.get('https://demo.halo.run/apis/content.halo.run/v1alpha1/posts', {
51+
headers: {
52+
Authorization: 'Bearer pat_1234567890abcdef',
53+
},
54+
})
55+
.then(response => {
56+
// handle response
57+
})
58+
```
59+
60+
### Basic Auth
61+
62+
:::warning
63+
通过 Basic Auth 认证将在未来的版本默认关闭,请谨慎使用。
64+
:::
65+
66+
Basic Auth 是一种通过用户名和密码进行身份验证的方式,你可以使用 Halo 账户的用户名和密码进行身份验证。
67+
68+
在请求头中添加 `Authorization` 字段,值为 `Basic <base64>` 即可,其中 `<base64>``username:password` 的 Base64 编码。
69+
70+
#### 示例
71+
72+
cURL 请求示例:
73+
74+
```bash
75+
curl -X 'GET' \
76+
'https://demo.halo.run/apis/content.halo.run/v1alpha1/posts' \
77+
-H 'accept: */*' \
78+
-H 'Authorization: Basic ZGVtbzpQQHNzdzByZDEyMy4u'
79+
```
80+
81+
[Axios](https://www.axios-http.cn/) 请求示例:
82+
83+
```javascript
84+
import axios from 'axios';
85+
86+
axios.get('https://demo.halo.run/apis/content.halo.run/v1alpha1/posts', {
87+
headers: {
88+
Authorization: `Basic ${Buffer.from('demo:P@ssw0rd123..').toString('base64')}`,
89+
},
90+
})
91+
.then(response => {
92+
// handle response
93+
})
94+
```
95+
96+
## 示例项目
97+
98+
列举一些使用了 Halo RESTful API 的项目,以供参考:
99+
100+
- [halo-sigs/attachment-upload-cli](https://github.com/halo-sigs/attachment-upload-cli):在 Terminal 中上传文件到 Halo 并得到链接,兼容 Typora 编辑器的图片上传。
101+
- [halo-sigs/vscode-extension-halo](https://github.com/halo-sigs/vscode-extension-halo):用于将 Markdown 文件发布到 Halo 的 Visual Studio Code 插件。
102+
- [halo-sigs/obsidian-halo](https://github.com/halo-sigs/obsidian-halo):Obsidian 插件,用于将 Markdown 文件发布到 Halo。
103+
- [LetTTGACO/elog](https://github.com/LetTTGACO/elog):开放式跨端博客解决方案,随意组合写作平台(语雀/飞书/Notion/FlowUs)和博客平台。
104+
- [GodlessLiu/Halo-Image-Plugin](https://github.com/GodlessLiu/Halo-Image-Plugin):一个浏览器插件,支持在浏览器中上传图片内容到 Halo 附件。
105+
- [terwer/siyuan-plugin-publisher](https://github.com/terwer/siyuan-plugin-publisher):支持将思源笔记的文章发布到 Halo。

docs/user-guide/user-center.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ description: 关于个人中心的功能说明
3131

3232
## 个人令牌
3333

34-
个人令牌是一种用于访问 Halo API 的凭证,可以通过个人令牌访问 Halo 的 REST API,而无需通过用户名和密码授权。
34+
个人令牌是一种用于访问 Halo API 的凭证,可以通过个人令牌访问 Halo 的 RESTful API,而无需通过用户名和密码授权。
3535

3636
![Entry](/img/uc/uc-pat.png)
3737

0 commit comments

Comments
 (0)