支持 Google API 批量请求( 如 POST / batch/ drive/v3) 用于批量操作
作者: lautou创建于 2026年9月15日更新于 2026年9月15日
问题 gws 没有办法发出 Google API 批量请求(使用 multipart/mixed 将多个请求合并为一个 HTTP 请求) — — 通过 gws drive --help 和 gws --help 可以确认:在 CLI 界面中,对于任何服务,都不存在 batch 这一动词。这不仅仅是效率上的差距。对于 Google 云端硬盘来说,Google 自己的文档中描述了批量处理的两个独立原因,而不是一个原因: 1. 效率 — — 提高性能 指南将 "为大量文件更改权限,例如添加新用户或组" 列为批量处理的一个主要用例。 2. 正确性 — — 共享指南 表示不支持同时修改同一文件的权限: "Drive 会评估和更新某个项目的权限,作为一个单一的 ACL。同时操作会导致竞争条件,即'最后一次写入赢得'…或者触发 sharingRateLimitExceeded 错误。为了避免冲突,请对同一项目按顺序执行权限更改,或者使用批量请求。" 目前,gws 用户没有办法按照文档中提供的指导来执行此操作,除非通过手动的顺序调用。 ## 目前存在的情况 POST https://www.googleapis.com/batch/drive/v3(以及每个服务的 Discovery 文档中的相应 batchPath)是一个真实的、当前的、未过时的机制 — — 与 Google 在 2020 年淘汰的旧的跨 API 全局批量端点不同。格式:multipart/mixed,每个部分都是一个完整的嵌套 HTTP 请求(仅包含路径的 URL,自己的头部/体)。限制:每个批量 100 次请求,每个内部请求 URL 长度限制为 8000 个字符,没有保证执行顺序,不支持媒体上传/下载/导出。每个内部请求仍然独立成功或失败 — — 它不是原子的,只是减少了往返次数,并且(对于同一文件的权限更改)具有竞争安全性。 ## 建议 添加一种在一个 gws 调用中提交同一服务请求的批量方式 — — 具体的命令形状由您决定;有几种可能性: - 新的顶级 gws batch 命令,接受一个服务的 {资源,方法,参数,JSON} 项的 JSON 数组。 - 现有命令上的 --batch-file <path> 标志,接受多个参数/体的集合。这里不建议特定的实现 — — 只是标记出 Google API 这一基本功能的存在,它是当前的,并且是 Google 自己文档中对真实正确性问题的解答(而不仅仅是一个可选的功能),而 gws 目前对于任何服务都没有途径。 ## 动机 在构建 gws-mcp-server (一个 MCP 服务器包装 gws) 工具时产生的 — — "与一个用户共享 N 个文件" 的工具是值得拥有的,但 gws-mcp-server 的自己的贡献规则要求每个工具都委托给一个单一的 gws CLI 调用,不允许直接调用 Google API。如果 gws 本身不支持批量处理,那么 gws-mcp-server 中唯一可实现的选项就是客户端循环,这并没有获得正确性的好处。
内容来源: googleworkspace/cli