- 后端
【免费下载链接】google-api-nodejs-client
Google's officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included.
本文以 src/apis/sql/CHANGELOG.md 为骨架,系统梳理@googleapis/sql(Google Cloud SQL Admin API 的官方 Node.js 客户端)从 2021 年初版到 2026 年 v9.0 的完整版本脉络,并结合仓库中的 src/apis/sql/v1beta4.ts、src/apis/sql/package.json、src/apis/sql/index.ts 等源码,深入解释每一次破坏性变更背后的 Node 运行时门槛、依赖链升级与 API 同步机制。读完本文,你将能:读懂该模块的版本时间线与升级代价,判断自己的 Node 环境是否满足要求,并掌握通过google.sql('v1beta4')快速接入 Cloud SQL 实例管理能力的最小可运行写法。
一、模块定位:Cloud SQL Admin API 的官方 Node.js 客户端
@googleapis/sql是 google-api-nodejs-client 项目中按 API 拆分发布的独立子包之一,封装的是Cloud SQL Admin API(sqladmin.googleapis.com),用于在 Node.js 侧完成 Cloud SQL 数据库实例的全生命周期管理:创建、查询、修改、删除实例,管理备份、用户、数据库、SSL 证书、导出导入与容灾切换等。模块的安装方式见 src/apis/sql/README.md:
$ npm install @googleapis/sql在 src/apis/sql/package.json 中可以看到该包的当前元信息:版本号为9.0.1(与 CHANGELOG 最新条目一致),许可证为 Apache-2.0,唯一的运行时依赖是googleapis-common: ^9.0.0,并要求Node >= 22.0.0(engines字段)。如果你习惯使用整体包,也可以直接安装仓库根 package.json 对应的googleapis主包,再通过google.sql('v1beta4')获取客户端。
二、版本演进全景:CHANGELOG 逐版本解读
src/apis/sql/CHANGELOG.md 记录了从 v0.1.0 到 v9.0.1 的全部发布历史。整体可以划分为六个阶段,下面完整继承原文档的全部版本条目并逐段解读。
阶段一:v0.x(2021-03 ~ 2022-09)——从初版到功能积累
| 版本 | 日期 | 类型 | 要点 |
|---|---|---|---|
| 0.1.0 | 2021-03 之前 | — | 模块初版基线 |
| 0.2.0 | 2021-03-18 | Features | auth: 增加 workload identity federation 支持(issue #2517);sqladmin: 更新 API |
| 0.2.1 | 2021-04-07 | Bug Fixes | sqladmin: 更新 API |
| 0.2.2 | 2021-06-18 | Bug Fixes | sql: 更新 API |
| 0.2.3 | 2021-06-25 | Bug Fixes | sql: 更新 API |
| 0.3.0 | 2021-09-14 | Features | auth: workload identity federation(issue #2517);sql: 更新 API(多次) |
| 0.3.1 | 2022-09-21 | Bug Fixes | sql: 更新 API |
这一阶段的特点是功能积累与上游 API 同步:几乎每次 Bug Fixes 都来自 "sql: update the API" / "sqladmin: update the API",即重新拉取 Google API Discovery 文档并重新生成客户端代码,以保证对上游 Cloud SQL Admin API 新增字段与接口的覆盖。0.3.0 同时记录了googleapis-common升级到 v5,以及构建工具 webpack 从 4 升级到 5。
阶段二:v1.0.0(2022-10-28)——首个 1.0 正式版
| 版本 | 日期 | 类型 | 要点 |
|---|---|---|---|
| 1.0.0 | 2022-10-28 | ⚠ BREAKING | 运行 generator,子模块开始要求 Node 12(issue #3073) |
这是模块的 GA(General Availability)节点。破坏性变更来自run the generator (submodules now require Node 12):API 生成器统一把子包的 Node 最低版本提升到 12,意味着使用 v1.0.0 起需要 Node 12+ 环境。
阶段三:v1.0.x(2023)——维护期小版本
| 版本 | 日期 | 类型 | 要点 |
|---|---|---|---|
| 1.0.1 | 2023-08-09 | Bug Fixes | sql: 更新 API |
| 1.0.2 | 2023-08-25 | Bug Fixes | deps:googleapis-common升级到 v7 |
| 1.0.3 | 2023-10-11 | Bug Fixes | deps:googleapis-commonv7;sql: 更新 API |
此阶段以依赖与 API 的例行更新为主,无破坏性变更。注意从 v1.0.3 开始,CHANGELOG 同时出现sql: update the API与googleapis-common的版本升级,这两条更新线在后续版本中持续并行。
阶段四:v2 / v3(2025 上半年)——Node 18 门槛
| 版本 | 日期 | 类型 | 要点 |
|---|---|---|---|
| 2.0.0 | 2025-05-29 | ⚠ BREAKING | 升级到 Node 18 |
| 2.0.1 | 2025-06-04 | Bug Fixes | deps:googleapis-common升级到 8.0.2-rc |
| 3.0.0 | 2025-06-30 | ⚠ BREAKING | 升级到 Node 18;Bug Fixes:googleapis-common8.0.2-rc |
| 3.0.1 | 2025-07-08 | Bug Fixes | sql: 更新 API |
2025 年 5 月至 6 月间,客户端库整体将 Node 最低版本从 12 提升到18(连续两个大版本都标注了相同的 BREAKING CHANGES),这是第二次运行时门槛跃迁。期间googleapis-common从 v7 进入 8.0.x 系列。
阶段五:v4.0.0 与 v5.x(2025 下半年)——重发与 API 再同步
| 版本 | 日期 | 类型 | 要点 |
|---|---|---|---|
| 4.0.0 | 2025-09-16 | ⚠ BREAKING | 为所有库统一重发(issue #3769);Bug Fixes: 重发、googleapis-common升级到 8.0.0 |
| 5.0.0 | 2025-10-15 | ⚠ BREAKING | 本次发布包含破坏性变更;Features: 运行 generator(issue #3814) |
v4.0.0 的破坏性变更来自一次仓库级 "releasing for our libraries" 统一动作,同时把googleapis-common锁定到 8.0.0。v5.0.0 则是又一次 generator 重跑,上游 API 变更带来的破坏性改动以 "This release has breaking changes." 概括,没有给出具体字段级说明——升级时建议以 API 文档与类型声明的 diff 为准。
阶段六:v6 ~ v9(2026-09)——Node 22 三连跳与稳定性修复
| 版本 | 日期 | 类型 | 要点 |
|---|---|---|---|
| 5.1.0 | 2026-09-02 | Features | 运行 generator(issue #3992);Bug Fixes: 依赖升级到 Node 22 |
| 5.1.1 | 2026-09-09 | Bug Fixes | 重新支持 Node 18 |
| 6.0.0 | 2026-09-09 | ⚠ BREAKING | Node 22 门槛 + 运行 generator |
| 7.0.0 | 2026-09-10 | ⚠ BREAKING | Node 22 门槛 |
| 8.0.0 | 2026-09-10 | ⚠ BREAKING | Node 22 门槛 + 运行 generator;Bug Fixes: 重新支持 Node 18、依赖升级到 Node 22 |
| 9.0.0 | 2026-09-14 | ⚠ BREAKING | 所有子包再次要求 Node 22(issue #4020);Features: 同上 |
| 9.0.1 | 2026-09-23 | Bug Fixes | sql: 更新 API |
2026 年 9 月出现了密集的 5.1.x → 9.x 发布潮:先是在 5.1.0 中把依赖升级到 Node 22,随即 5.1.1 又"加回 Node 18 支持";随后 v6/v7/v8/v9 连续四个大版本以不同组合方式推进Node 22 最低版本要求(issue #4011、#4020),期间穿插 generator 重跑与依赖升级。v9.0.0 明确"Update apiary to minimum Node version of 22 again - all packages",v9.0.1 则以一次例行的sql: update the API收尾,当前源码 src/apis/sql/package.json 中的"node": ">=22.0.0"正是这一阶段成果的落点。
三、破坏性变更深度解析:Node 运行时门槛的三连跳
从 CHANGELOG 可以清晰提取出该模块的 Node 最低版本演进轨迹:
- Node 12:v1.0.0(2022-10-28,issue #3073),子模块统一要求;
- Node 18:v2.0.0 / v3.0.0(2025-05 ~ 2025-06),仓库级升级;
- Node 22:v6.0.0 ~ v9.0.0(2026-09,issue #4011、#4020),先是依赖先行升级,随后所有子包统一提升。
这与仓库根 package.json 中"engines": { "node": ">=22.0.0" }的当前要求完全一致。每一次门槛跃迁都对应 CHANGELOG 中的⚠ BREAKING CHANGES,含义是:升级到这些大版本后,运行环境必须满足新的 Node 版本要求,否则安装或运行时会因engines校验失败。对于仍在维护老 Node 服务(如 16/18)的团队,5.1.1 中 "add back support for node 18" 的历史条目说明 Node 18 在 2026-09 之后已被视为"尽力支持"的降级目标,而非正式承诺。
四、依赖链条演进:googleapis-common 与构建工具
除 Node 门槛外,CHANGELOG 还记录了两条依赖主线:
- googleapis-common:v5(0.3.0)→ v7(1.0.2 / 1.0.3)→ 8.0.0(3.0.2 / 4.0.0)→ 8.0.2-rc(2.0.1 / 3.0.0)→ 9.0.0(当前,见 src/apis/sql/package.json)。
googleapis-common是 google-api-nodejs-client 各子包的公共运行时层,提供getAPI、createAPIRequest、AuthPlus、GoogleConfigurable等基础设施(见 src/apis/sql/index.ts 的导入语句),其升级往往伴随 HTTP 传输、鉴权与类型系统的行为变化,这也是多个版本把deps升级列入 Bug Fixes 的原因。 - webpack 4 → 5:记录在 v0.3.0(2021-09-14,issue #2524)。构建链升级不直接影响 API 行为,但影响子包在浏览器打包场景下的可用性与产物体积,相关配置见 src/apis/sql/webpack.config.js。
此外,多个版本标注的"run the generator"(如 v5.0.0、v5.1.0、v6.0.0、v8.0.0)对应本仓库的 API 代码生成流程:仓库通过 discovery 文档 + src/generator 模板(generator.md 有整体说明)重新生成 src/apis/sql/v1beta4.ts 这类文件,从而把上游 Cloud SQL Admin API 的新字段、新接口同步进客户端。
五、能力演进:Workload Identity Federation 与 API 同步更新
CHANGELOG 中的 Features 除了 Node 版本升级外,还有一个值得关注的能力点:auth: adds support workload identity federation(v0.2.0、v0.3.0,issue #2517)。这意味着客户端所依赖的鉴权层支持 Workload Identity Federation——即通过外部身份池/工作负载身份池换取短期 OAuth 凭证,让运行在 Google Cloud 之外的容器、CI/CD 或本地环境无需长期保存服务账号密钥即可访问 Cloud SQL Admin API。
至于反复出现的 "sql: update the API" / "sqladmin: update the API"(v0.2.0 ~ v9.0.1 共十余次),其含义是跟随上游 API 演进重新生成类型声明与方法定义:Cloud SQL Admin API 每增加一个字段(例如新增数据库版本、新的实例配置项)或调整某个接口行为,客户端就在下一次发布中同步。这也解释了为什么 CHANGELOG 中 Bug Fixes 绝大多数是 API 更新而非缺陷修复。
六、源码结构:入口、版本注册与资源全景
6.1 模块入口与版本注册
src/apis/sql/index.ts 是子包的对外入口(自动生成),核心逻辑只有几十行:
VERSIONS对象将版本号v1beta4映射到sql_v1beta4.Sql类;sql(version | options)工厂函数通过googleapis-common的getAPI返回对应客户端实例;- 同时导出
sql_v1beta4命名空间、AuthPlus及一组公共类型。
也就是说,当前@googleapis/sql只发布v1beta4一个 API 版本。调用方式为:
const {google} = require('googleapis'); const sql = google.sql('v1beta4');6.2 Sql 类与九大资源组
在 src/apis/sql/v1beta4.ts 中,Sql类在构造时挂载了 9 个资源对象:
| 资源 | 职责 |
|---|---|
backupRuns | 备份运行记录:创建、查询、删除、列举备份 |
databases | 实例内数据库的增删改查 |
flags | 查询实例可用的数据库 flags |
instances | 实例全生命周期管理(核心资源) |
operations | 异步操作(如创建实例)的查询与列举 |
projects | 项目级能力:维护窗口重排、外部同步等 |
sslCerts | SSL 证书与临时客户端证书管理 |
tiers | 查询可用实例规格(tier) |
users | 实例用户管理 |
6.3 instances 方法全景
以资源方法最丰富的instances为例(见 src/apis/sql/v1beta4.ts),其方法覆盖了 Cloud SQL 运维的几乎所有场景:
- 生命周期:
insert(创建)、get、list、patch/update、delete、restart; - 数据迁移:
clone(克隆实例)、export(导出到 Cloud Storage)、import(从 SQL dump / CSV 导入)、restoreBackup(从备份恢复); - 高可用与复制:
promoteReplica、startReplica、stopReplica、failover、demoteMaster; - 安全:
resetSslConfig、addServerCa、listServerCas、rotateServerCa(CA 轮换); - 维护:
truncateLog(截断 binlog)。
以instances.get的底层实现为例(src/apis/sql/v1beta4.ts),其请求会构造到https://sqladmin.googleapis.com/sql/v1beta4/projects/{project}/instances/{instance}(rootUrl默认值见 src/apis/sql/v1beta4.ts),requiredParams声明project与instance为必填,最终交给createAPIRequest发出。instances.list则额外支持filter(如state:RUNNABLE instanceType:CLOUD_SQL_INSTANCE,多个条件空格分隔、默认 AND 语义)、maxResults与pageToken分页参数(见 src/apis/sql/v1beta4.ts)。
6.4 标准请求参数
所有方法都支持一套全局标准参数(定义于StandardParameters,见 src/apis/sql/v1beta4.ts):auth(可传OAuth2Client/JWT/Compute/UserRefreshClient/GoogleAuth/ API Key 字符串)、$.xgafv(V1 错误格式)、access_token、alt(响应数据格式)、callback(JSONP)、fields(部分响应字段选择)、key(API Key)、oauth_token、prettyPrint、quotaUser、uploadType、upload_protocol。日常使用推荐通过全局google.options({auth})绑定鉴权,而非逐个方法传参。
七、核心数据模型 Schema
v1beta4.ts中定义了完整的数据模型,以下是三个最核心的 Schema(均可从源码注释获取字段语义):
Schema$DatabaseInstance(src/apis/sql/v1beta4.ts):实例的完整描述,包含backendType(SECOND_GEN / EXTERNAL)、databaseVersion(MySQL / PostgreSQL / SQL Server 各版本,创建后不可变更)、instanceType(CLOUD_SQL_INSTANCE / ON_PREMISES_INSTANCE / READ_REPLICA_INSTANCE)、state(RUNNABLE / SUSPENDED / PENDING_CREATE / MAINTENANCE / FAILED 等)、ipAddresses、masterInstanceName、replicaNames、region(创建后不可变更)、settings、serverCaCert等。Schema$Settings(src/apis/sql/v1beta4.ts):实例的用户配置,包括activationPolicy(ALWAYS / NEVER)、availabilityType(ZONAL / REGIONAL 高可用)、backupConfiguration(每日备份)、databaseFlags(启动参数)、dataDiskSizeGb(数据盘大小,最小 10GB)、dataDiskType(PD_SSD 默认 / PD_HDD)、ipConfiguration、maintenanceWindow、pricingPlan(PER_USE / PACKAGE)、settingsVersion(update 时必须携带最新值以处理并发)、storageAutoResize(默认 true)、storageAutoResizeLimit(0 表示无上限)、tier(如db-n1-standard-1)、userLabels等。Schema$Operation(src/apis/sql/v1beta4.ts):异步操作对象,operationType可为 CREATE / DELETE / UPDATE / RESTART / IMPORT / EXPORT / BACKUP_VOLUME / RESTORE_VOLUME / CREATE_USER / DELETE_USER / CREATE_DATABASE / DELETE_DATABASE;status可为 PENDING / RUNNING / DONE;error携带OperationErrors。实例的创建、导入导出、备份恢复等操作都会先返回 Operation,再通过sql.operations.get轮询状态。
此外源码还包含Schema$BackupRun(备份运行,src/apis/sql/v1beta4.ts)、Schema$Database、Schema$Flag、Schema$SslCert、Schema$Tier、Schema$User等模型,与 9 大资源一一对应。
八、实战:最小可运行接入示例
综合 src/apis/sql/v1beta4.ts 各方法内嵌的示例模板,下面是一个基于应用默认凭据(ADC)+ cloud-platform scope的实例列表示例,可直接替换项目 ID 运行:
const {google} = require('googleapis'); const sql = google.sql('v1beta4'); async function main() { // Scopes 既可以写成数组,也可以写成空格分隔的字符串 const auth = new google.auth.GoogleAuth({ scopes: [ 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/sqlservice.admin', ], }); // 获取鉴权客户端并绑定到后续所有调用 const authClient = await auth.getClient(); google.options({auth: authClient}); // 列举指定项目下的所有 Cloud SQL 实例 const res = await sql.instances.list({ project: 'my-project-id', // 可选:filter: 'state:RUNNABLE instanceType:CLOUD_SQL_INSTANCE', // 可选:maxResults: 100, }); console.log(res.data); } main().catch(e => { console.error(e); throw e; });运行前需要满足的前提(对应前面章节的版本约束):
- Node 环境>= 22(由 src/apis/sql/package.json 的
engines决定); - 已启用 Cloud SQL Admin API 并完成 ADC 初始化(例如
gcloud auth application-default login,或为服务账号配置工作负载身份池); - 使用全局包时通过
google.sql('v1beta4')获取客户端,使用独立子包时以require('@googleapis/sql')的方式导入(子包同样导出sql工厂与sql_v1beta4命名空间,见 src/apis/sql/index.ts)。
九、升级与版本选择建议
结合 CHANGELOG 的破坏性变更时间线,给出以下实操建议:
- 先核对 Node 版本再升级大版本:若当前运行在 Node 18,应停留在 5.1.x 或明确接受"尽力支持"的降级状态;升级到 v6.0.0 及以上前,请将运行时迁移到 Node 22。
- 把
run the generator视为例行同步:此类版本(v5.0.0、v5.1.0、v6.0.0、v8.0.0)通常伴随上游 API 的字段级变化,升级后建议用仓库中的 src/apis/sql/v1beta4.ts 类型声明与本项目实际使用的字段做一次 diff 检查。 - 善用
settingsVersion处理并发更新:调用instances.patch/update时携带最新settingsVersion,避免并发修改互相覆盖(字段语义见 src/apis/sql/v1beta4.ts)。 - 跟踪后续变更:本仓库只读,后续版本更新可通过
npm install @googleapis/sql获取并在本地 node_modules 中查阅最新 CHANGELOG;仓库内的 src/apis/sql/CHANGELOG.md 则始终保留当前快照对应的完整历史,可作为升级评估的权威依据。
- 后端
【免费下载链接】google-api-nodejs-client
Google's officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included.
相关推荐
Thorium:用 SIMD 编译把浏览器速度重新算一遍的 Chromium 分支
Thorium:用 SIMD 编译把浏览器速度重新算一遍的 Chromium 分支 Thorium 是一个面向开发者和性能党用户的开源 Chromium 分支,
后端Cherry Studio 消息头 Author-First 改造:消息作者快照(MessageSnapshot)机制深度解析
Cherry Studio 消息头 Author First 改造:消息作者快照(MessageSnapshot)机制深度解析 本指南基于 CherryHQ/c
后端@googleapis/parallelstore 版本演进全解析:从 0.1.0 到 11.0.1 的变更脉络、Node 门槛与 API 能力
@googleapis/parallelstore 版本演进全解析:从 0.1.0 到 11.0.1 的变更脉络、Node 门槛与 API 能力 本指南以 go
后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考