ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

google-api-nodejs-client 之 plus 模块:Google+ API 的安装、认证与核心方法实战指南

google-api-nodejs-client 之 plus 模块:Google+ API 的安装、认证与核心方法实战指南
  • 后端

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/go/google-api-nodejs-client
点击查看免费下载

本指南以google-api-nodejs-client仓库中src/apis/plus/子模块为主体,系统讲解 Google+(Plus)API 客户端库的独立安装方式、三类核心资源(Activities、Comments、People)的方法与参数,以及 OAuth 2.0 认证的授权范围配置,并深入源码剖析其生成结构与底层请求机制。读完本文,你将掌握如何在 Node.js 项目中引入并使用@googleapis/plus调用剩余的 Google+ API 端点,同时清楚了解该 API 已关闭的现状与兼容性前提。

模块定位:Google+ API 的 Node.js 客户端

plus是google-api-nodejs-client仓库中为 Google+(Google Plus)平台 API 生成的一个独立子模块,位于 src/apis/plus/。它与仓库内其他 API 模块(如 drive、gmail、sheets)保持一致的生成式架构:由一个名为index.ts的入口文件暴露模块工厂函数与版本信息,由v1.ts承载完整的类型定义、资源类与方法实现。

需要特别说明的是,Google+ API 本身已于多年前正式关闭,这一点在 v1.ts 的方法注释中有明确标注:每个方法描述均以 "Shut down. See https://developers.google.com/+/api-shutdown for more details." 开头。因此,@googleapis/plus在当前仓库中更多扮演"历史兼容性保留"的角色——它的安装、初始化与调用模式仍然完整可运行,但实际请求 Google+ 服务端将返回关闭状态。阅读本文时请将其作为学习 Google API 客户端库通用模式的示例,而不是面向生产环境的活跃接口。

安装与运行环境要求

原模块 README 给出的安装方式为通过 npm 安装独立子包:

$ npm install @googleapis/plus

从 package.json 可以看到该包的完整元信息:

  • 包名:@googleapis/plus,当前仓库版本为9.0.1;
  • 主入口:build/index.js,类型声明:build/index.d.ts;
  • 唯一运行时依赖:googleapis-common(^9.0.0),所有 API 请求、认证客户端与传输层能力均来自该公共库;
  • 引擎要求:"node": ">=22.0.0"——即该版本要求 Node.js 22 及以上运行环境,这一点在 CHANGELOG.md 的破坏性变更记录中也有体现("Update apiary to minimum Node version of 22")。

如果你习惯使用聚合主包,也可以直接安装整个googleapis库,并通过google.plus('v1')访问同一套 API,两种方式在调用层完全等价(详见下文"源码结构与初始化机制")。

快速上手:初始化并调用第一个方法

在google-api-nodejs-client生态中,调用 Google+ API 的标准初始化写法如下(来自 v1.ts 中的方法级示例):

const {google} = require('googleapis'); const plus = google.plus('v1'); async function main() { const auth = new google.auth.GoogleAuth({ // Scopes 既可以传数组,也可以传单个以空格分隔的字符串 scopes: [ 'https://www.googleapis.com/auth/plus.login', 'https://www.googleapis.com/auth/plus.me', ], }); // 获取认证客户端,并绑定到后续所有调用 const authClient = await auth.getClient(); google.options({auth: authClient}); // 获取指定 activity 的详情 const res = await plus.activities.get({ activityId: 'placeholder-value', }); console.log(res.data); } main().catch(e => { console.error(e); throw e; });

其中plus.activities.get的路径参数activityId用于指定要获取的帖子(Activity)ID。所有方法都遵循统一的 Promise / 回调双模式:无 callback 时返回Promise,传入 callback 时以回调方式处理结果,类型签名与响应 Schema 一一对应(此处响应类型为Schema$Activity)。

三大资源类:方法与参数全景

从 v1.ts 的Plus类构造函数可以看出,模块按资源划分为三个实例成员(src/apis/plus/v1.ts#L100-L116):

this.activities = new Resource$Activities(this.context); this.comments = new Resource$Comments(this.context); this.people = new Resource$People(this.context);

activities:帖子流与搜索

方法说明关键参数
activities.get按 ID 获取单条 ActivityactivityId(必填)
activities.list列出指定用户指定集合下的动态userId、collection(均必填,如'stream')
activities.search全文搜索动态query(搜索串)、language、maxResults、orderBy、pageToken

以activities.list为例,其底层请求构造(src/apis/plus/v1.ts#L884-L908)展示了生成代码的请求组装方式:

const rootUrl = options.rootUrl || 'https://www.googleapis.com/'; const parameters = { options: Object.assign( { url: (rootUrl + '/plus/v1/people/{userId}/activities/{collection}') .replace(/([^:]\/)\/+/g, '$1'), method: 'GET', }, options ), params, requiredParams: ['userId', 'collection'], pathParams: ['collection', 'userId'], context: this.context, }; return createAPIRequest<Schema$ActivityFeed>(parameters);

这段代码揭示了三个重要事实:

  • 所有请求的根地址默认是https://www.googleapis.com/,可通过options.rootUrl覆盖;
  • requiredParams与pathParams由生成器根据 discovery 文档推导,缺参时会由公共库负责校验;
  • 实际网络请求统一交由googleapis-common的createAPIRequest完成,响应按Schema$ActivityFeed做类型收窄。

activities.search返回的Schema$ActivityFeed包含items(当前页动态数组)、nextPageToken(续页令牌)、nextLink、selfLink等字段,pageToken即用于分页遍历大结果集。

comments:评论读取

方法说明关键参数
comments.get按 ID 获取单条评论commentId(必填)
comments.list列出某条动态下的全部评论activityId(必填)、maxResults、pageToken、sortOrder

comments.get的请求路径为/plus/v1/comments/{commentId}(src/apis/plus/v1.ts#L1235-L1242)。响应的Schema$Comment包含actor(发表人信息,含displayName、image、url)、inReplyTo、object、plusoners(+1 数量)、published/updated(RFC 3339 时间戳)等结构。

people:用户资料与人脉关系

方法说明关键参数
people.get获取个人资料,userId可传特殊值'me'表示当前认证用户userId(必填)
people.list列出指定用户的人脉集合(如'visible'、'friends')userId、collection(必填)
people.listByActivity列出某条动态的互动用户(点赞/分享者)activityId、collection(必填)
people.search按关键词搜索用户query、language、maxResults、pageToken

people.list的路径为/plus/v1/people/{userId}/people/{collection}(src/apis/plus/v1.ts#L1730-L1745)。people.get的响应Schema$Person字段非常丰富,包括displayName、emails、gender、birthday、image、organizations、placesLived、circledByCount、plusOneCount等;值得注意的细节是:若使用plus.loginscope,该方法保证返回ageRange与language字段。

认证与授权范围(Scopes)

Google+ API 需要 OAuth 2.0 认证。方法注释中给出的授权范围组合如下:

  • https://www.googleapis.com/auth/plus.login:登录级权限,可读写用户数据(people.get在此 scope 下保证返回ageRange与language);
  • https://www.googleapis.com/auth/plus.me:查看当前用户的资料;
  • https://www.googleapis.com/auth/userinfo.email:访问用户邮箱;
  • https://www.googleapis.com/auth/userinfo.profile:访问用户基础资料。

people.get的示例同时使用了全部四个 scope,而activities、comments相关方法一般只需前两个。认证客户端支持多种方式注入:除了示例中的google.auth.GoogleAuth(默认使用应用默认凭据 ADC,可配合gcloud auth application-default login获取本地凭据),v1.ts 顶部的StandardParameters接口(src/apis/plus/v1.ts#L43-L83)表明每个请求还接受auth参数,其类型可以是string(API Key)、OAuth2Client、JWT(服务账号)、Compute(GCE 元数据)或UserRefreshClient,同时支持通过全局google.options({auth})统一绑定。

此外,每个方法都继承了一组标准查询参数:alt(响应数据格式)、fields(部分响应字段选择器)、key(API Key,未提供 OAuth 2.0 token 时必填)、oauth_token、prettyPrint、quotaUser、userIp(已弃用,建议改用quotaUser)。

源码结构与初始化机制

独立子包与聚合主包的统一入口都遵循同一套生成器模式。以 src/apis/plus/index.ts 为例:

export const VERSIONS = { v1: plus_v1.Plus, }; export function plus(version: 'v1'): plus_v1.Plus; export function plus(options: plus_v1.Options): plus_v1.Plus; export function plus<T = plus_v1.Plus>( this: GoogleConfigurable, versionOrOptions: 'v1' | plus_v1.Options ) { return getAPI<T>('plus', versionOrOptions, VERSIONS, this); } const auth = new AuthPlus(); export {auth}; export {plus_v1};

要点如下:

  • 模块导出VERSIONS映射(目前仅v1一个版本)、工厂函数plus()、独立的auth(AuthPlus实例)以及plus_v1命名空间;
  • plus()支持两种入参:直接传版本字符串'v1',或传包含version: 'v1'的Options对象;最终统一经由googleapis-common的getAPI解析;
  • 在聚合主包中,src/index.ts 通过export {plus_v1} from './apis/plus/v1';将类型命名空间汇入顶层,因此google.plus('v1')与require('@googleapis/plus')两种入口在运行时行为一致;
  • 包内还保留了 tsconfig.json、webpack.config.js 等构建配置,配合package.json中的compile(tsc -p .)与webpack脚本,可用于独立编译或在浏览器打包场景(null-loader 配合)下使用。

版本演进与维护状态

CHANGELOG.md 记录了该模块的版本脉络,可概括为两类变化:

  • 运行环境升级:随 apiary 生成器整体推进,Node 最低版本要求从 12 → 18 → 22,googleapis-common依赖随之升级(v5 → v7 → v8 → v9),这些属于全仓库范围的破坏性变更;
  • API 文档同步:多次**plus:** update the API提交(如 2023 年的ecac7a8、2025 年的ddb0593、2026 年的6aa7f5c),用于把上游 discovery 文档的最新描述同步进生成代码。

这提示使用者:@googleapis/plus的安装版本需与自身 Node 运行时匹配,若运行环境低于 Node 22,应选择历史版本。

许可证与社区约定

该模块与整个google-api-nodejs-client仓库一致,采用 Apache 2.0 许可,全文见仓库根目录 LICENSE。若你计划参与改进,可参考 CONTRIBUTING.md 了解提交规范;仓库建议先在 issues 中登记问题再提交 Pull Request。遇到使用问题时,可优先在 StackOverflow 的google-api-nodejs-client标签下检索。

使用建议与注意事项

综合以上源码证据,给出以下实操建议:

  1. 明确 API 已关闭的现状:所有方法注释都标注 "Shut down",生产项目不应依赖 Google+ 数据,仅适合作为学习生成式客户端库调用模式的历史样本;
  2. 按需选择入口:只使用 Plus 一个 API 时安装@googleapis/plus更轻量;多 API 场景下统一使用聚合包googleapis更便捷;
  3. 控制 Node 版本:当前包要求 Node >= 22,低版本环境请锁定旧版本安装;
  4. 认证参数按场景选型:服务端应用用 JWT(服务账号),本地调试用 ADC,浏览器受限场景用 API Key(key参数)或userRefreshToken;
  5. 善用类型系统:plus_v1命名空间导出完整的Schema$*与Params$Resource$*类型,在 TypeScript 项目中可直接import {plus_v1} from '@googleapis/plus'获得编译期校验,例如Params$Resource$Activities$Get会精确约束activityId等必填字段。

通过本文,你已完整掌握@googleapis/plus从安装、初始化、认证到三个资源类全部方法的调用方式,并理解了生成式 API 客户端在 v1.ts 与 index.ts 中的底层组装逻辑——这套模式同样适用于仓库内其他数百个 API 子模块。

  • 后端

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/go/google-api-nodejs-client
点击查看免费下载
上一篇:Monaco Editor中的上下文菜单快捷键冲突帮助:获取解决帮助
下一篇:anything_about_game 物理引擎实战:从刚体动力学到流体模拟完整教程

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进