跳转到内容

响应结构

OpenYoumiya API 使用较小的统一响应结构(Response Envelope),让客户端可以一致地处理成功响应、列表元信息(分页)和错误信息。


当 API 响应返回已文档化的资源对象时,该对象遵循以下 JSON 响应规则,以保证 Cloudflare Workers 和 D1 等边缘环境下的类型安全:

  • 全字段返回:响应包含该资源模型定义的所有字段,客户端不需要把已文档化字段当作可能缺省(Optional/Undefined)的属性处理。
  • 零值占位:当某个字段允许为空时,API 使用该字段类型对应的空值,例如 ""[]0,不使用 nullundefined
  • 弱引用:系统生成的公开 ID 是 opaque(不透明)。跨资源引用使用稳定、全局唯一的 key,例如 franchiseKeyprojectKeygroupKey,而不是嵌入完整资源对象。

每个已文档化的 HTTP 路由都必须提供 JSON 响应示例;当通用响应结构已在附近说明时,也可以只提供 JSON data payload 示例。领域页面定义查询视图时,也遵循同一规则。


所有 HTTP 接口返回的根级 JSON 对象具有完全一致的外壳结构:

字段类型说明
dataobject | array业务核心数据负载。
metaobject列表元信息。仅在涉及分页的列表请求中返回。
errorobject错误信息。仅在请求失败时返回。
{
"data": {
"projectKey": "bandori",
"displayName": "BanG Dream!",
"updatedAt": "2026-06-01T10:00:00+09:00"
}
}

当请求的数据集为列表时,data 字段固定为数组,同时网关将通过 meta 字段输出基于游标(Cursor-based)的分页元信息:

字段类型说明
limitnumber请求上限。单页最大返回数量(Page Size)。
cursorstring当前请求传入的游标位置。
nextCursorstring下一页游标。若无下一页则返回空字符串。
hasMoreboolean是否还有下一页。
{
"data": [
{ "groupKey": "mygo", "displayName": "MyGO!!!!" },
{ "groupKey": "ave_mujica", "displayName": "Ave_Mujica" }
],
"meta": {
"limit": 20,
"cursor": "eyJpZCI6MTB9",
"nextCursor": "eyJpZCI6MzB9",
"hasMore": true
}
}

当请求失败或状态码异常时,响应根级对象只返回 error 字段,不返回 datametaerror 的内部结构严格标准化:

字段类型说明
error.codestring稳定、机器可读的字面量错误码,供客户端编写分支逻辑。
error.messagestring面向开发者的简短说明,不建议直接展示给最终用户。
error.requestIdstring请求追踪 ID;无值时可省略。
error.detailsobject保留的可选结构化细节字段;当前公开 API 通常不返回该字段。
{
"error": {
"code": "invalid_limit",
"message": "limit 必须是数字"
}
}