本指南面向对接方,说明如何使用站点相关的接口进行站点信息查询、状态检查、配置状态获取等操作。仅包含使用方法与示例,不涉及实现细节。
- 基础路径:
/v2/api/site - 统一响应:
{ code: number, message: string, data: any }(code=0表示成功) - 认证方式: 站点相关接口无需认证,均为公开接口
- 方法: GET
- URL:
/v2/api/site/sitemap - Headers: 无需认证(返回
Content-Type: application/xml)
请求示例(cURL):
curl -X GET 'https://your-domain.com/v2/api/site/sitemap' \
-H 'Accept: application/xml'成功响应示例(200):
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://rote.ink/landing</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://rote.ink/demo</loc>
<lastmod>2024-01-01T00:00:00.000Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://rote.ink/rote/3fb32cfa-...</loc>
<lastmod>2024-01-10T12:00:00.000Z</lastmod>
<changefreq>daily</changefreq>
<priority>0.6</priority>
</url>
</urlset>
说明:
- 以标准 XML Sitemap 协议返回数据,可直接被搜索引擎抓取
- 包含站点内常见的公开页面(如
/landing、/explore等) - 自动列出所有用户主页 URL:
/:username - 自动列出所有公开、未归档的笔记 URL:
/rote/:roteid - 每条记录包含
loc(页面地址),可选的lastmod(更新时间)、changefreq与priority
可能的错误:
- 500 服务器内部错误(生成 sitemap 失败时返回 JSON 错误响应)
- 方法: GET
- URL:
/v2/api/site/status - Headers: 无需认证
请求示例(cURL):
curl -X GET 'https://your-domain.com/v2/api/site/status'成功响应示例(200):
{
"code": 0,
"message": "success",
"data": {
"isInitialized": true,
"databaseConnected": true,
"site": {
"name": "Rote",
"description": "一个开源的个人笔记仓库系统",
"frontendUrl": "https://rote.ink",
"defaultLanguage": "zh-CN",
"icpRecord": "京ICP备12345678号",
"announcement": {
"enabled": true,
"content": "系统维护通知",
"link": "https://example.com/notice"
}
},
"system": {
"version": "1.0.0",
"lastMigration": "1.0.0"
},
"notification": {
"vapidPublicKey": "BEl62iUYgUivxIkv69yViEuiBIa40HI..."
},
"storage": {
"r2Configured": true,
"urlPrefix": "https://cdn.rote.ink"
},
"ui": {
"allowRegistration": true,
"allowUploadFile": true
},
"oauth": {
"enabled": true,
"providers": {
"github": {
"enabled": true
},
"apple": {
"enabled": true
}
}
},
"frontendConfig": {
"preReactions": ["❤️", "👍", "..."],
"permissionKeys": ["SENDROTE", "GETROTE", "EDITROTE"],
"roteMaxLetter": 10000,
"roteContentExpandedLetter": 600,
"safeRoutes": ["home", "landing", "login", "..."]
},
"timestamp": "2024-01-01T00:00:00.000Z"
}
}字段说明:
isInitialized: boolean - 系统是否已初始化databaseConnected: boolean - 数据库连接状态site: object - 站点基本信息name: string - 站点名称description: string - 站点描述frontendUrl: string - 前端地址defaultLanguage: string - 默认语言icpRecord: string | undefined - ICP 备案号announcement: object | undefined - 站点公告配置enabled: boolean - 是否启用content: string - 公告内容link: string | undefined - 公告链接
system: object - 系统信息version: string - 系统版本lastMigration: string - 最后迁移版本
notification: object - 通知配置vapidPublicKey: string | null - VAPID 公钥(用于 Web Push 通知)
storage: object - 存储配置r2Configured: boolean - R2 存储是否已配置urlPrefix: string - 存储 URL 前缀(如果 R2 已配置)
ui: object - UI 配置(仅包含与前端行为相关的开关)allowRegistration: boolean - 是否允许注册allowUploadFile: boolean - 是否允许上传文件
oauth: object - OAuth 配置(用于前端判断是否显示 OAuth 登录按钮)enabled: boolean - OAuth 是否已启用providers: object - 已启用的 OAuth 提供商列表(动态返回,根据配置和已注册的提供商){providerName}: object - 提供商配置enabled: boolean - 该提供商是否已启用
frontendConfig: object - 前端通用配置(从 main.json 统一下发)preReactions: string[] - 预置表情列表(用于反应组件)permissionKeys: string[] - OpenKey 权限 key 列表(如SENDROTE、GETROTE、EDITROTE),前端自行映射展示文案roteMaxLetter: number - 单条笔记最大字数限制roteContentExpandedLetter: number - 内容展开阈值safeRoutes: string[] - 保留路由前缀,用于校验用户名不可与系统路由冲突
timestamp: string - 响应时间戳(ISO 8601 格式)
说明:
- 此接口用于获取站点的完整状态信息,包括系统状态、配置信息等
- 前端可以根据返回的信息判断功能是否可用(如附件上传、用户注册等)
vapidPublicKey用于前端实现 Web Push 通知功能oauth.providers动态返回所有已注册且启用的 OAuth 提供商,前端可以根据此信息动态渲染 OAuth 登录按钮
可能的错误:
- 500 服务器内部错误
- 方法: GET
- URL:
/v2/api/site/config-status - Headers: 无需认证
请求示例(cURL):
curl -X GET 'https://your-domain.com/v2/api/site/config-status'成功响应示例(200)- 已初始化:
{
"code": 0,
"message": "success",
"data": {
"isInitialized": true,
"site": {
"name": "Rote",
"description": "一个开源的个人笔记仓库系统",
"frontendUrl": "https://rote.ink"
},
"system": {
"version": "1.0.0"
}
}
}成功响应示例(200)- 未初始化:
{
"code": 0,
"message": "success",
"data": {
"isInitialized": false,
"requiresSetup": true,
"setupSteps": ["basic", "database", "storage", "email", "security"]
}
}字段说明:
isInitialized: boolean - 系统是否已初始化site: object(仅当已初始化时返回)- 站点基本信息name: string - 站点名称description: string - 站点描述frontendUrl: string - 前端地址
system: object(仅当已初始化时返回)- 系统信息version: string - 系统版本
requiresSetup: boolean(仅当未初始化时返回)- 是否需要设置setupSteps: string[](仅当未初始化时返回)- 需要完成的设置步骤列表
说明:
- 此接口主要用于初始化向导,判断系统是否需要初始化
- 如果系统已初始化,返回基本的站点和系统信息
- 如果系统未初始化,返回初始化所需的信息和步骤列表
- 前端可以根据此接口的返回结果决定是否显示初始化向导
可能的错误:
- 500 服务器内部错误
- 无需认证: 所有站点相关接口均为公开接口,无需认证即可访问
- 状态检查: 建议在应用启动时调用
/status接口检查系统状态和功能可用性 - 初始化判断: 使用
/config-status接口判断系统是否需要初始化,并引导用户完成初始化流程 - 站点地图:
/sitemap接口返回的用户列表可用于生成站点地图,提升 SEO 效果 - 功能开关: 根据
/status接口返回的ui配置,在前端控制注册、文件上传等功能的显示和可用性 - 存储配置: 通过
storage.r2Configured判断附件上传功能是否可用,通过storage.urlPrefix获取附件访问地址前缀 - Web Push: 使用
notification.vapidPublicKey实现 Web Push 通知功能 - OAuth 登录: 根据
oauth.enabled和oauth.providers动态显示 OAuth 登录按钮,支持多个提供商(如 GitHub、Apple 等)
探索页中公开笔记的展示,除了依赖笔记本身为 public 状态外,还受到以下两个配置的共同影响:
-
用户级配置(通过用户设置接口维护,见
USER-API.md)allowExplore: boolean- 当为
false时,用户的公开笔记不会出现在「探索」页推荐中,但仍可以通过直接链接访问。
- 当为
-
系统级安全配置(仅管理员可在管理后台 / Admin API 中配置)
security.requireCertifiedUserForExplore: boolean- 当为
true时,只有已认证 (certified = true) 且allowExplore !== false的用户,其公开笔记才会被纳入探索页候选集合。 - 当为
false时,只要allowExplore !== false,公开笔记即可参与探索页展示。
- 当为
实现层面,探索页相关接口在数据库查询阶段就会同时考虑上述两个条件进行过滤,从而保证:
- 分页结果中不会因为后置过滤出现「每页条数不稳定」或「空洞」的问题;
- 前端无需额外在客户端进行二次过滤,只需按 API 返回结果渲染即可。