一、基本概念
- 分享链接:
/web/ID网页查看(支持 Markdown)·/raw/ID纯文本 ·/raw/ID?dl=1触发下载 - ID 规则:1–64 位,可用中文、英文、数字、
-、_; 创建时可通过id字段自定义,留空则自动生成 10 位随机 ID;重复会返回 409 - 内容字段:
title标题 ·language语言(md表示按 Markdown 渲染)·content正文(上限 100 万字符)
二、鉴权(三选一)
| 方式 | 写法 | 适用场景 |
|---|---|---|
| 入门密码 | Authorization: Bearer 你的密码 | 临时脚本、curl 调试 |
| API Key | Authorization: Bearer csk_xxxx_yyyy | 程序长期调用(可设有效期,推荐) |
| 会话 Cookie | 登录后浏览器自动携带 | 网页后台 |
# 用入门密码
curl -s -X POST "https://你的域名/api/snippets" \
-H "Authorization: Bearer 你的密码" \
-H "Content-Type: application/json" \
-d '{"title":"hello","language":"text","content":"world"}'
# 用 API Key(在后台「API 管理」页创建)
curl -s -X POST "https://你的域名/api/snippets" \
-H "Authorization: Bearer csk_xxxx_yyyy" \
-H "Content-Type: application/json" \
-d '{"title":"hello","language":"text","content":"world"}'
注意:API Key 只能操作内容,不能修改密码或管理 Key(这些接口只接受会话或入门密码)。
三、接口一览
| 方法 | 路径 | 说明 | 鉴权 |
|---|---|---|---|
| POST | /api/snippets | 创建内容(可带自定义 id) | 需要 |
| GET | /api/snippets?limit=100 | 内容列表(元数据) | 需要 |
| GET | /api/snippets/ID | 读取单条完整内容 | 公开 |
| PUT/PATCH | /api/snippets/ID | 更新 title / language / content | 需要 |
| DELETE | /api/snippets/ID | 删除 | 需要 |
| POST | /api/login / /api/logout | 获取 / 清除会话 Cookie | — |
| POST | /api/password | 修改入门密码 | 会话或密码 |
| GET | /api/keys | API Key 列表 | 会话或密码 |
| POST | /api/keys | 创建 API Key(name + expiresInDays) | 会话或密码 |
| DELETE | /api/keys/ID | 吊销 API Key | 会话或密码 |
| GET | /api/status | 查看是否已初始化、当前请求是否已鉴权 | 公开 |
四、内容增删改查示例
1)创建 —— 自定义中文 ID
curl -s -X POST "https://你的域名/api/snippets" \
-H "Authorization: Bearer csk_xxxx_yyyy" \
-H "Content-Type: application/json" \
-d '{
"id": "笔记-01",
"title": "Python 速查表",
"language": "md",
"content": "# 标题\n内容 **加粗**"
}'
# 返回(201)
{
"ok": true,
"id": "笔记-01",
"web": "/web/笔记-01",
"raw": "/raw/笔记-01",
"item": { "id": "笔记-01", "title": "Python 速查表", "language": "md", ... }
}
不传 id 则自动生成:{"title":"...","language":"text","content":"..."}。
2)列表(需鉴权)
curl -s "https://你的域名/api/snippets?limit=50" -H "Authorization: Bearer csk_xxxx_yyyy"
# 返回
{ "total": 2, "items": [ { "id": "笔记-01", "title": "...", "language": "md",
"createdAt": 1727000000000, "updatedAt": 1727000000000 }, ... ] }
3)读取单条
curl -s "https://你的域名/api/snippets/笔记-01"
# 中文 ID 在 URL 中会被自动百分号编码,curl / 浏览器都会正确处理
curl -s "https://你的域名/api/snippets/%E7%AC%94%E8%AE%B0-01"
4)更新(字段均可选,只传要改的)
curl -s -X PUT "https://你的域名/api/snippets/笔记-01" \
-H "Authorization: Bearer csk_xxxx_yyyy" \
-H "Content-Type: application/json" \
-d '{"title":"新标题","content":"更新后的正文"}'
5)删除
curl -s -X DELETE "https://你的域名/api/snippets/笔记-01" \
-H "Authorization: Bearer csk_xxxx_yyyy"
# => {"ok":true,"deleted":"笔记-01"}
6)拿纯文本 / 网页链接
curl -s "https://你的域名/raw/笔记-01" # text/plain 原文
curl -sO "https://你的域名/raw/笔记-01?dl=1" # 下载为文件
# 网页分享地址:https://你的域名/web/笔记-01
五、API Key 管理示例
# 创建:有效期单位为天,0 = 永不过期
curl -s -X POST "https://你的域名/api/keys" \
-H "Authorization: Bearer 你的入门密码" \
-H "Content-Type: application/json" \
-d '{"name":"CI 脚本","expiresInDays":90}'
# 返回(key 只显示这一次,请立即保存)
{ "ok": true, "id": "aB3x...", "key": "csk_aB3x..._z9Q...", "item": { ... } }
# 列出(只含前缀、时间等元数据,不含密钥)
curl -s "https://你的域名/api/keys" -H "Authorization: Bearer 你的入门密码"
# 吊销
curl -s -X DELETE "https://你的域名/api/keys/aB3x..." \
-H "Authorization: Bearer 你的入门密码"
也可以在网页后台「API 管理」标签页里完成创建、查看有效期与吊销。
六、错误码
| 状态码 | 含义 |
|---|---|
| 400 | 参数错误:内容为空、ID 不合法、有效期超出范围、请求体不是 JSON |
| 401 | 未鉴权 / 密码或 Key 错误 / Key 已过期或被吊销 |
| 403 | 当前密码不正确、重复初始化、API Key 越权访问(改密码 / 管理 Key) |
| 404 | 内容或接口不存在、ID 不合法 |
| 409 | 自定义 ID 已存在 |
| 413 | 内容超过 100 万字符 |
| 405 | 该路径不支持此 HTTP 方法 |
| 503 | 尚未设置入门密码(先访问 /setup) |
七、注意事项
- API Key 明文只在创建时返回一次,服务端只保存 SHA-256 哈希,丢了只能重建;
- 修改入门密码会让所有已登录会话失效,但不影响已创建的 API Key;
- 单条读取与
/web、/raw分享链接是公开的 —— 拿到链接的人都能看, 请勿存放敏感信息;内容列表需要鉴权,未登录不会看到任何内容; - 请求头请带
Content-Type: application/json,否则会返回「请求体必须是 JSON」。