🤖 AI 笔记接口 · 调用说明

本页是给 AI(或任何程序)使用的写入接口规范。人用后台请走 /admin。

一、认证方式(必须)

所有 /api/* 接口都需要 API Key,两种传法任选其一:

密钥错误返回 401 {"ok": false, "error": "..."}

二、端点总览

方法 + 路径用途说明
GET /api/notes列出所有笔记的元数据不含正文;返回 count(现有条数)和 next_order(下一个排序值),用于判断序号
GET /api/notes/<id>取一条完整笔记含正文 content,可参考已有笔记的写法风格
POST /api/notes新增笔记(AI 最常用)成功返回 201 + 新笔记(含 id)
PUT /api/notes/<id>PATCH修改笔记只传要改的字段即可(部分更新)
DELETE /api/notes/<id>删除笔记不可恢复,慎用
GET /api/style正文的样式类速查(JSON)content 字段该用什么 HTML 结构,一查便知
GET /api/export导出完整静态 HTML 备份返回和旧版 Unity学习笔记.html 同构的单文件

三、新增笔记 POST /api/notes

请求体(JSON)字段说明

字段必填说明
title必填目录短标题,纯文本(≤200字,写HTML会被去除),例:"广播与订阅事件机制原理"。带圈序号(⑦ 等)由系统自动加,不要自己写序号
question可选提问原文,纯文本(≤500字),鼠标悬停目录标题时显示;不填则用 title
date可选记录日期 YYYY-MM-DD(严格校验格式);不填默认服务器当天
ord可选排序值(整数,越小越靠前);不填默认追加到最后(即 next_order)
content建议必填正文,自定义标签 DSL(见下节),提交时自动转换为安全 HTML

请求示例(curl)

curl -X POST "http://服务器地址:端口/api/notes" \
  -H "X-API-Key: 你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "广播与订阅事件机制原理",
    "question": "这个项目中,广播事件,订阅事件机制原理是什么?举例说明",
    "content": "<ctx><t>前情提要:</t>来自 FPS 项目</ctx><h3>一、原理</h3><warnbox>坑:…</warnbox>"
  }'

请求示例(Python requests)

import requests

requests.post(
    "http://服务器地址:端口/api/notes",
    headers={"X-API-Key": "你的密钥"},
    json={
        "title": "广播与订阅事件机制原理",
        "question": "这个项目中,广播事件,订阅事件机制原理是什么?",
        "content": "<ctx><t>前情提要:</t>…</ctx><h3>一、原理</h3>",
    },
)

成功响应(201)

{
  "ok": true,
  "note": {
    "id": 8, "ord": 8, "title": "广播与订阅事件机制原理",
    "question": "这个项目中,广播事件,订阅事件机制原理是什么?",
    "date": "2026-09-15",
    "content": "<div class='ctx'><span class='t'>前情提要:</span>…</div>…"
  }
}

四、content 字段写作规范(自定义标签 DSL,重点!)

正文不写原生 HTML(写了也会被白名单过滤),改用下面的自定义标签,提交时系统自动转换:

你写的标签渲染效果
<ctx>…</ctx>蓝色前情提要框(开头放 <t>前情提要:</t> 蓝色加粗前缀)
<law>…</law>金色口诀/铁律框
<warnbox>…</warnbox>红色警告/坑框
<tipbox>…</tipbox>绿色建议/小结框
<flow>…</flow>浅色流程图/伪代码块
<codeblock>…</codeblock>深色代码块;内用 <k>关键字</k> <c>注释</c> <s>字符串</s> <m>方法</m> <t>类型</t> <hl>高亮</hl> 着色;代码里显示尖括号要写 &lt; &gt;
<ok>…</ok> <bad>…</bad> <star>…</star>绿/红/金着色强调(行内,或表格单元格内)
h3 / h4 / p / ul / ol / li / b / strong / i / em / br分节标题、段落、列表、加粗、换行(可直接使用)
table / thead / tbody / tr / th / td表格(可直接使用);th/td 可写 style="width:30%" 调列宽(仅允许列宽样式)
<code>…</code>行内代码

一个完整示例(照这个感觉写就行)

<ctx><t>前情提要:</t>来自 FPS Microgame 项目</ctx>
<law>一句话原理:事件就是一张方法订阅名单</law>
<h3>一、原理</h3>
<p>正文段落,<b>加粗</b>,行内代码 <code>Invoke()</code>。</p>
<table><thead><tr><th>写法</th><th>含义</th></tr></thead>
<tbody><tr><td class="ok">+=</td><td>订阅</td></tr></tbody></table>
<flow>子弹命中 → 扣血 → 广播 OnDamaged → 火花特效</flow>
<codeblock><k>public</k> UnityAction OnDie;   <c>// 广播名单</c></codeblock>
<warnbox>坑:订阅代码别写进 Update,会重复注册!</warnbox>
<tipbox>小结:发布方和订阅方互不认识,靠名单传话。</tipbox>
安全机制(白名单,自动生效):
  • "第 N 问"编号系统自动生成,content 里不要写序号(否则出现两个);
  • title / question 是纯文本字段:任何 HTML 标签都会被去除后再入库;
  • script / style / img / a / form / iframe 等白名单之外的标签连同内容一起被丢弃onclick 等事件属性、javascript: 链接、未知 class 一律剥离——想注入 JS 也没用,写什么都只会变成无害文本。

五、AI 添加一条笔记的标准流程

  1. GET /api/notes → 看现有条数 count 和 next_order,确认新笔记该排第几;
  2. (可选)GET /api/styleGET /api/notes/<某条id> → 校准写作风格;
  3. 把问答整理成规范 content(忠实原问答干货:原理、步骤、坑、对比表),
  4. POST /api/notes 写入;
  5. (可选)GET /api/notes 复查确认成功。

六、响应码速查

状态码含义
200 / 201成功(新增返回 201,其余 200)
400请求体不是 JSON / title 缺失或为空 / date 格式不对 / ord 非整数
401API Key 缺失或错误
404笔记 id 不存在
429认证失败次数过多被临时锁定(1 分钟内失败超 10 次锁 2 分钟,正常调用不会触发)