Skip to content

API 概览 ​

MetaFusion 使用统一的 /api 入口。实体种类通过 kind 区分,所有实体共用查询、详情和写入端点。

接入顺序 ​

  1. 确认目标实例的根地址,读取 GET /api/openapi.json。
  2. 读取 GET /api/catalog/definitions,获取字段、词项、结构和关系规则。
  3. 查询实体并解析合并身份,按需要读取目录、收录或关系。
  4. 需要写入时配置凭据、检查权限,提交说明、来源和当前版本。
  5. 按分页标记继续查询;按 HTTP 状态和机器错误码处理失败。

公开数据可匿名查询。完整接口形状以目标实例为准,本文示例不代表某实例已有对应数据。

契约与凭据 ​

入口用途
GET /api/openapi.json目录服务的 OpenAPI 3.0.3,公开读取
GET /api/catalog/definitions当前定义、固定 kind 名与 relationship_rules
GET /api/version目录服务版本
GET /api/capabilities已配置的外围能力声明,不能代替健康检查

本站目录规范:OpenAPI JSON。账号、社区和存储协议分别见对应 API 页面,目录 OpenAPI 不覆盖其全部端点。

请求使用 JSON。目录服务拒绝未知字段,请求体上限 2 MiB。响应通常为 JSON,错误形状为 {"error":"<code>"};网关拦下的响应可能使用其他格式。

认证支持 Authorization: Bearer <token> 和会话 Cookie mf_session。会话、OAuth 和 PAT 的选择及有效权限见认证与凭证。目录权限只按令牌中的 permissions 判定。

交互文档 /api/docs 与 /api/swagger 需要登录及 catalog.lifecycle.manage,第三方接入直接使用公开 OpenAPI。

能力索引 ​

要完成的任务端点详细契约
查找与筛选实体GET /api/catalog/entities实体查询与详情、检索
获取实体详情与当前版本GET /api/catalog/entities/:id实体查询与详情
跟随合并与批量解析身份GET .../:id/identity、POST /api/catalog/entities/identity实体查询与详情
遍历可见的直接关系与属性引用GET .../:id/links、POST /api/catalog/relationships/query实体查询与详情
读取语义关系与实际收录GET .../:id/relations、.../:id/occurrences实体查询与详情
读取发行目录、表达组成与版本组GET /api/catalog/releases/:id/toc、.../:id/editions、GET /api/catalog/expressions/:id/composition实体查询与详情
批量表达与对比POST /api/catalog/expressions/details、GET /api/catalog/compare实体查询与详情
新建、编辑、关系与单条收录/api/catalog/entities、/relations、/tracks/:id/contents新建与编辑
合并、停用与下架POST .../:id/lifecycle、.../:id/unpublish新建与编辑
外部导入与实例交换/api/importer/*、/api/exchange/*新建与编辑
定义、货架与外部库配置/api/admin/catalog-definitions、/shelves、/external-databases动态定义与配置
收藏、讨论、私信与举报/api/community/*、/api/favorites/*、/api/messages/*社区与互动 API
上传、绑定和读取文件/api/storage/*存储上传与下载
第三方授权登录/api/oauth/*、/api/oidc/*第三方站点接入 OAuth 授权
Agent 技能与工具接入复用上述 APIAI Agent API 与工具规范

用户主页资料、互动统计和目录贡献分别使用 /api/users/:id、.../:id/stats、.../:id/contributions。分别见认证、社区和实体查询页面。

状态与可见性 ​

状态详情可见性
published所有人
draft / pending_review创建者和具有生命周期管理权限的人
deleted / merged创建者和具有生命周期管理权限的人可直读;合并身份使用 identity 或 resolve

普通列表排除 deleted / merged。关系、收录和历史响应还会过滤不可见端点与引用;公开响应不能当作全库备份。

写入需要登录。没有 catalog.entity.edit 时,只能维护自己的未发布条目并保存为 draft / pending_review。关系、生命周期和定义管理各有权限码,见新建与编辑。

分页与查询完整性 ​

实体列表 limit 默认 50、范围 1–100,offset 默认 0;非法值返回 400。page 为从 1 起的便捷写法,与 offset 互斥。无关键词浏览的 total 来自数据库计数;关键词查询的计数与深分页按检索契约处理。

统一关系查询逐主体分页。只有完成所有页、没有不可用主体并处理定义变化后,才能声明对应可见范围的直接关系已读完。递归图谱需要调用方维护待查队列与已访问集合。

关系摘要只能用于展示和继续查询;编辑前重新获取实体详情及当前 version。详情也可能裁剪不可见引用,尤其是 Track 的 contents;回读成功不代表可以无损整实体写回,见实体详情。

限流 ​

目录重型读接口默认按「账号 + 路由」计数,匿名按「客户端 IP + 路由」计数。额度优先级为账号、用户组、全局配置、路由内置值;多组命中取最宽松规则。

路由内置默认额度 / 分钟
实体列表、标签、实体统计、links、批量 identity、批量表达、toc、editions、composition、贡献流、请求日志120
POST /api/catalog/relationships/query、GET /api/catalog/shelves/feed60
GET /api/catalog/compare、POST /api/importer/preview10
GET /api/notifications/unread-count300

受限路由响应带 X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset(距重置的秒数);超限为 429,并带 Retry-After。实例策略可覆盖默认额度,配置为不限时不发这组窗口头。管理协议见动态定义与配置。

网关另按 IP 限流;被网关拦下的 429 不带上述窗口头。计数当前在各目录进程内独立,客户端应以实际响应判断额度,并在缺少 Retry-After 时采用退避。

常见错误处理 ​

HTTP / error调用方处理
400 invalid_payload核对字段、参数与当前 schema,避免重放同一错误载荷
400 invalid_limit / invalid_offset / invalid_page / pagination_conflict修正分页值,避免组合互斥参数
400 invalid_reference核对 kind、归属、可见性与合并身份
400 evidence_required / invalid_source补充修改说明与可核验来源
401 authentication_required / invalid_token获取有效凭据;PAT 不会因失效退为匿名
403 forbidden核对账号权限、令牌 scopes 与条目可写范围
404 not_found不存在或不可见,不能进一步区分
409 version_conflict回读并合并修改,再用最新版本或 ETag 提交
409 idempotency_conflict同一幂等键对应了不同载荷;核对任务身份,勿盲目换键重复创建
429 rate_limited按 Retry-After 等待,减少并发与重复请求
5xx视为服务或依赖故障;不能当作实体缺失或零命中

写入与关系的具体语义错误见新建与编辑,Agent 的处理策略见AI Agent API 与工具规范。

MetaFusion 使用指南与 API 参考