返回管理端

客户端 API 参考

Murphybox · AUR项目组 · 文档版本:V1.4.0 · 更新日期:2026-09-29

本页说明 /api/app 与 /api/stream。完整管理与内网合同见仓库 API 接口文档; OpenAPI 文件可供工具导入。

API 状态:正在读取当前服务…

认证与范围

同一站点使用 /api;生产完整前缀为 https://www.murphy-box.com/api。 JSON 响应使用 snake_case,请求字段按下表填写,不自动转换。

方式请求头可读范围
API KeyX-API-Key: <api-key>当前为全量服务身份,包含组织资源,没有逐 Key 组织范围。
账号 JWTAuthorization: Bearer <token>admin 全部;org_admin 公共与本库;其他账号仅公共。

API Key 由管理员创建。JWT 通过 POST /api/auth/login 获取,有效期 24 小时;系统没有自助注册。 两种凭据同时发送时先验证 Bearer,失败不回退 API Key。“公共资源”也需要认证。

curl 'https://www.murphy-box.com/api/app/audios?page=1&limit=20' \
  -H 'X-API-Key: <api-key>'

示例使用占位值。不要将真实 Key、JWT 或签名 URL 写入源码、日志或文档。

查询接口

以下路径均以 /api/app 为前缀。只有 status 与 docs 免认证。 列表默认 page=1&limit=20,limit 最大 100;分页结构为 pagination { page, limit, total, pages }。

方法路径参数与返回
GET/status服务开关、API 版本和总体统计,免认证。
GET/docs当前路由元数据索引,免认证;完整合同见仓库文档。
GET/categoriesinclude_stats=true;返回 categories[] 树,同级自然排序。
GET/categories/:id返回 category,含父目录与直属音频数。
GET/categories/:id/audios仅直属音频;page、limit、sort、order;返回 category、audios、pagination。
GET/audioscategory_id、search、page、limit、sort、order;返回 audios、pagination。
GET/audios/:id返回 audio,可选版本。
POST/audios/batchJSON {"ids":["<id>"]},1–100 个且不重复;返回 audios、found、requested。
GET/audios/:id/url可选版本与 expires;返回 audio、urls.public、urls.signed、expires_in、expires_at。
GET/audios/:id/stream可选版本;返回 302 跳转,不由 AUR 代理字节流。
GET/search必填 q,可选 category_id、page、limit;返回 query、audios、pagination。
GET/recentlimit 默认 10、最大 50,可选 category_id;返回 audios。
GET/stats当前身份可见资源的音频、目录与存储统计。

sort 可选 created_at / title / duration / size,order 可选 asc / desc,默认按上传时间倒序。 批量详情按请求顺序返回可见项,缺失项省略;它没有 MS 接口的 missingIds 字段。

播放与版本

持久保存 audio_id,播放前请求 URL。签名默认 3600 秒,expires 最大 86400 秒;到期重新获取。 时间单位为秒,大小为字节,bitrate 为 bps,sample_rate 为 Hz。

curl 'https://www.murphy-box.com/api/app/audios/<audio-id>/url?bitrate_kbps=48' \
  -H 'X-API-Key: <api-key>'

bitrate_kbps=48|64|96 与 version_id=<version-id> 互斥; version_id=source 选原版。详情、URL 与单条流媒体入口支持选版,批量接口返回默认版本。 不传参数使用系统当前指针,临时选版不修改指针。

available_versions[] 只包含成功版本,包含规格、大小、时长、内容摘要、is_default 和 playback_url。 新上传在首次转码完成前可播放原版。历史记录若禁止原版且无可用版本,播放入口返回 409;列表项仍应保留。 删除后全部版本不可见,恢复时一并恢复。

方法完整路径行为
GET/api/stream/:id默认 mode=redirect 返回 302;mode=proxy 代理音频并支持 Range。
GET/api/stream/:id/redirect302 跳转至所选版本。
GET/api/stream/:id/url返回 audio、url、expires_in、expires_at;此处字段为 url。
POST/api/stream/batchJSON ids(最多 100 且不重复)、可选 expires;返回 urls、found、requested、有效期。
HEAD/api/stream/:id无响应体,按 GET 的认证与选版规则处理,客户端须处理重定向。

原生 audio 标签不能自行添加上述认证请求头;先用有认证的请求获取签名 URL,再交给播放器。 私有桶的普通对象地址不保证可直接播放。若签名地址为空,保留业务引用并处理不可用状态。

错误与开关

普通错误含 error,可能另有 message、error_code、request_id。成功结构按接口返回,不统一包在 data 中。

HTTP含义
400参数错误,例如重复 ID、互斥选版参数。
401 / 403认证无效 / 身份或来源不允许。
404不存在、已删除、超出范围或所选版本不存在;不能单凭 404 推断明确删除。
409没有可用播放版本或其他状态冲突。
429触发限流。
500 / 503服务异常 / API 关闭或依赖暂不可用,不能据此删除业务引用。

status/docs 不受全局 API 开关影响,但受自身端点开关控制。业务限流默认关闭,开启默认 300 次/15 分钟; 登录与改密共用的 IP 保护始终开启,默认 50 次/15 分钟。

内网边界

MROS 与 MS 入口仅供后端调用,采用固定来源 IP,不用 API Key,不能直接交给浏览器或移动端。

接口族合同区别
/api/internal/mros镜像本页 app 的 13 个只读方法;snake_case,分页最大 100,共用 app 开关。
/api/internal/ms/audio独立 camelCase 合同;普通分页最大 500,批量详情最大 100,同步分页最大 1000;默认关闭。

MS 的完整快照、删除墓碑、游标恢复与历史对象键合同见仓库 API 文档第 15.2 节。 接口实现和单次连通性探测不等于消费者已完成持续同步验收。