𝗥𝗼𝗹𝗹𝗶𝗻𝗴 𝗮 𝗚𝗼𝗼𝗴𝗹𝗲 𝗦𝗲𝗿𝘃𝗶𝗰𝗲 𝗔𝗰𝗰𝗼𝘂𝗻𝘁 𝗝𝗪𝗧 𝗶𝗻 𝗡𝗼𝗱𝗲.𝗷𝘀
googleapis npm 包是使用 Google APIs 的标准方式。
它很好用,但会为你的项目增加 380KB 的体积和超过 450 个依赖项。
如果你只是为了一个 CI 脚本而需要调用单个 API,你并不需要这么重的依赖。
我编写了一个仅用 60 行代码就能检查 URL 索引状态的脚本。
它使用了三个 Node.js 内置模块:
- crypto
- fetch
- URL
它不会为你的仓库增加任何额外的包。
Google 服务账号认证遵循 RFC 7523 标准。
流程如下:
- 使用你的客户端电子邮件(client email)和私钥(private key)创建一个 JWT。
- 将该 JWT POST 到 Google 的 token 端点。
- 接收访问令牌(access token)。
- 在 API 请求头中使用该令牌。
一个关键细节:请使用 webmasters 作用域(scope)。较新的 searchconsole 作用域无法用于 URL Inspection API。
你必须对 JWT 使用 Base64url 编码。标准的 Base64 需要进行三处修改:
- 去除填充(padding)。
- 将
+替换为-。 - 将
/替换为_。
你从 Google Cloud 获取的私钥已经是正确的格式。你不需要外部库来对令牌进行签名。
调用 token 端点时,请记录错误响应。Google 会针对失败原因提供具体说明,例如令牌过期或缺少服务账号。
对于 API 调用本身:
- 将
Authorization请求头设置为Bearer [token]。 - 确保你的
siteUrl与 Search Console 中的资源(property)完全匹配。 - 在 Search Console 中将你的服务账号电子邮件添加为用户。
这种方法最适合 CI 流水线等单一任务。
如果你需要以下功能,请不要使用此方法:
- 调用多个 Google APIs。
- 自动刷新令牌。
- 复杂的重试逻辑。
- 高复杂度的生产环境服务器代码。
对于单个 CI 任务,60 行代码比 450 个依赖项更好。理解这种底层流程在库失效时也能让调试变得更容易。