本文档由 石墨办公 提供。
POST /sdk/v2/collab-files/{fileId}/copy
Header: X-Weboffice-Signature, X-Weboffice-Token
Body: { "fileId": "<新文件 ID>" }fileId 是源文件 ID,Body 里的 fileId 是新文件 ID,两者不要弄反。fileId"来轮询。fileId 由您的应用决定(长度不超过 64),同一个新 fileId 重复调用是安全的,落到同一个任务上。code 列表:| HTTP | code | 含义 | 业务侧动作 |
|---|---|---|---|
| 200 | — | 首次创建任务成功 | 启动轮询 |
| 200 | 70019 | 副本创建中 | 继续轮询,建议指数退避 |
| 204 | — | 副本创建成功 | 解锁文件、回写业务状态 |
| 400 | 70016 | 任务信息找不到 | 视为失败,回滚业务记录 |
| 400 | 70017 | 副本任务执行失败 | 视为失败,回滚业务记录 |
| 500 | 70015 | 读取源文件出错 | 可重试 1-2 次后视为失败 |
| 500 | 70018 | 查询任务状态出错 | 可重试,避免无限轮询 |
| 500 | 70020 | 未知任务状态 | 视为失败、记日志 |
copy_pending 记录,再调石墨。失败时业务库有明确的中间态可以查、可以补偿,比"成功才插库"更稳。fileId 反复 POST,不要因为多请求几次而误以为会创建多个副本 —— 接口是幂等的。fileId 不应该让用户能打开,前端应在业务库 status 为 ready 时才允许进入;否则用户会看到空文档或权限错误。fileId 作为源、业务实例 fileId 作为目标即可"套用模板"。需要复制后初始化权限、所有者、标题等,应当在 204 之后通过元信息回调改造,而不是 塞到复制请求里。DELETE /sdk/v2/api/files/{fileId}
Header: X-Weboffice-Signature, X-Weboffice-Token204 表示删除成功,无响应体。readable: false,以让前端编辑器直接拒绝加载(详见协同文档权限模型与回调实现)。| 场景 | 业务侧处理 |
|---|---|
| 首次 POST 直接 4xx / 5xx(非任务相关错误码) | 业务库直接改 copy_failed,不进入轮询 |
| 轮询过程中收到 70015 / 70016 / 70017 / 70020 | 业务库改 copy_failed,不要让新 fileId 暴露给用户 |
| 轮询超过最大次数仍是 70019 | 视超时阈值告警;可以选择"继续后台轮询 + 前端先提示用户稍后再来" |
| 70015(源文件读取错误) | 检查源文件是否被删除、或源文件 fileId 是否拼错 |
| 场景 | 业务侧处理 |
|---|---|
| 石墨返回非 204 | 业务库保留 deleting,进 入补偿队列,不要回滚到 active(避免删了一半又看起来正常) |
| 重复点击删除 | 业务库 deleting / deleted 状态下直接幂等返回,不再二次调用石墨 |
| 用户已经在协同 | 调用成功后,石墨会断开其会话;前端编辑器抛错时业务侧记录这次状况即可 |
fileId 的文件元信息回调有两种合规返回:permissions.readable: false:表示存在但无权访问;编辑器进入"无权"提示界面。| 误区 | 实际影响 | 正确做法 |
|---|---|---|
Path fileId(源)与 Body fileId(目标)弄反 | 复制的是空文档,或撞库到已存在的目标 | 严格区分:Path 是源,Body 是目标 |
| 首次 POST 返回 200 后就当成功 | 实际是任务被接受、内容还没复制完 | 等到 204 才算成功 |
| 不轮询、直接告诉用户"成功" | 用户立刻打开拿到空白文档 | 完成轮询、状态置 ready 再开放访问 |
| 调用石墨成功才写业务库 | 失败时业务侧没记录、无法补偿 | 业务侧先写 pending,再调石墨,最后落终态 |
| 删除时不做业务侧权限校验,依赖石墨 | 石墨不校验业务权限,任何人都能删 | 业务侧先校验 owner / manageable |
删除失败时回滚业务库为 active | 用户以为没删,但其实石墨那边已经删了 | 保留 deleting,进补偿队列 |
已删除文件的元信息回调仍返回 readable: true | 用户能继续打开"幽灵文档" | 返回 404 或 readable: false |
| 不写删除审计,依赖事后查石墨日志 | 出问题时无法追溯责任人和时间 | 业务侧先写审计、再调石墨 |