并非每个 API 都有 OpenAPI 规范,有些端点手写反而更清楚。一个带 api frontmatter 的页面记录一个端点:它的字段描述请求与响应,OpenAPI 参考页面的其余部分则由 Blume 依据这些字段生成 —— 顶部是 HTTP 方法与路径,内容旁边一列是 Try it 面板和请求示例,以及钉在它们下方的任何请求与响应示例。
---
title: Create a user
api: POST /workspaces/{workspaceId}/users
---
Creates a user and sends them an invite.
<ParamField path="workspaceId" type="string" required>
The workspace to add the user to.
</ParamField>
<ParamField body="email" type="string" required placeholder="ada@example.com">
The user's email address.
</ParamField>
<ParamField body="role" type="string" default="member">
One of `owner`, `admin`, or `member`.
</ParamField>
<ResponseField name="id" type="string" required>
The new user's ID.
</ResponseField>
<ResponseExample>
```json 201
{ "id": "usr_8f2k", "status": "invited" }
```
</ResponseExample>
api 接一个 HTTP 方法,加上一条路径或一个完整 URL。路径参数写在大括号里 —— {workspaceId} —— 并由对应的 path 字段填入。完整 URL,例如 GET https://api.acme.com/v1/users,会按原样发出;而路径则拼接站点的 api.server。
演练场与示例#
页面里的 ParamField 会变成 Try it 面板的输入项,就像规范中一个接口的参数那样:path、query 和 header 字段都是参数,body 字段拼成 JSON 请求体,而某个字段的嵌套字段(写在它自己的 Expandable 里)则成为该对象的属性。type 为 string[] 表示数组;若 type 不是 JSON 类型,例如 enum<string>,就按字符串发送。字段的 default 用来预填请求体,它的 placeholder 则是示例里显示的示例值。
面板旁边,页面还会给出 cURL、JavaScript 和 Python 三种请求示例。页面若自带 RequestExample,就由它来展示。
还有两个 frontmatter 键用来调整页面:
authMethod设置该端点的认证方式:bearer、basic、key(放在请求头里的 API key)或none。它会覆盖站点的api.auth。playground设置页面显示什么:interactive(默认)显示 Try it 面板和示例,simple只显示示例,none两者都不显示。方法、路径以及任何示例都保留。
站点默认值#
blume.config.ts 里的 api 设置每个端点页面共享的内容:
export default defineConfig({
api: {
server: "https://api.acme.com/v1",
auth: { method: "key", name: "x-api-key" },
playground: { proxy: true },
},
});
server是api路径拼接时用的基础 URL。auth是页面未设置authMethod时请求的认证方式:method为bearer、basic、key或none,name是 API key 所在的请求头(默认x-api-key)。没有auth时,页面不发送任何凭据。playground接受与 OpenAPI 参考的 playground 选项 相同的取值:false在每个页面上隐藏 Try it 面板,proxy则把它的请求经由 CORS 代理发出 —— 可以是你自己的 URL,也可以是true表示使用 Blume 内置的那个。内置代理需要服务端输出,并且只转发到server的 origin 以及apifrontmatter 中任何完整 URL 的 origin。
页面的布局、字段和示例与其它地方用的是同一套组件,因此页面的 Markdown 副本 会列出每个字段,搜索也像对其它页面一样为它建立索引。
frontmatter 的键和组件属性与 Mintlify 一致,因此为它写好的页面无需改动即可继续工作。