如何在Google Drive API Node.js SDK中获取资源ID为的资源? 原始问题

如何在Google Drive API Node.js SDK中获取资源ID为的资源? 原始问题,node.js,google-drive-api,Node.js,Google Drive Api,我为谷歌硬盘文件夹注册了一个监视频道,并收到一个更新通知。(使用Google Drive API Node.js SDK v3) { 主持人:'my development host.example.com', '用户代理':'谷歌API(+https://developers.google.com/webmasters/APIs-Google.html)', “内容长度”:“0”, 接受:“*/*”, “接受编码”:“gzip,deflate,br”, “x-forwarded-for”:“x

我为谷歌硬盘文件夹注册了一个监视频道,并收到一个更新通知。(使用Google Drive API Node.js SDK v3)

{
主持人:'my development host.example.com',
'用户代理':'谷歌API(+https://developers.google.com/webmasters/APIs-Google.html)',
“内容长度”:“0”,
接受:“*/*”,
“接受编码”:“gzip,deflate,br”,
“x-forwarded-for”:“xxx.xxx.xxx.xxx”,
“x-forwarded-proto”:“https”,
“x-goog-changed”:“children”,
“x-goog-channel-expiration”:“2021年5月11日星期二10:21:53 GMT”,
“x-goog-channel-id”:“8f76c160-b229-11eb-a810-93ba607a525b”,
“x-goog-message-number”:“1356107”,
“x-goog-resource-id”:“li76v1_bIpI23HBJ13dAqo66pYQ”,
“x-goog-resource-state”:“更新”,
'x-goog-resource-uri':'https://www.googleapis.com/drive/v3/files/1_ihmP2rHCBMXe7aQkW32bjZMccXzsPjE?acknowledgeAbuse=false&supportsAllDrives=false&supportsTeamDrives=false&alt=json'
}
我正在查看的文件夹的文件ID是
1_ihmP2rHCBMXe7aQkW32bjZMccXzsPjE
,我知道它包含在
x-goog-resource-uri
中,因此我可以使用该文件ID访问该文件夹

在中,资源ID与版本无关

注意:resourceId属性是资源的稳定、版本独立的标识符。resourceUri属性是当前API版本上下文中监视的资源的规范URI,因此它是特定于版本的

我想获得独立于版本的资源数据。 但是,我不知道如何使用
x-goog-resource-id
,资源id获取资源数据

谁能给我提个建议吗?如果可能的话,不是在Node.js SDK上,而是在API样式上,这样就可以了

编辑 根据官方文档中的说明,
resourceId
与资源URI中的相同,注释表明它是被监视资源的
ID
。我认为监视的资源意味着文件资源

下面的示例是从中复制的:

{
“种类”:“api#频道”,
“id”:“01234567-89ab-cdef-0123456789ab”“//您为此频道指定的id。
“resourceId”:“o3hgv1538sdjfh”,//监视资源的ID。
“resourceUri”:https://www.googleapis.com/drive/v3/files/o3hgv1538sdjfh“,//监视的资源的特定于版本的ID。
“token”:“target=myApp myfilescanneldest”,//仅当提供了一个时才显示。
“过期”:1426325213000,//Unix时间戳的实际过期时间(毫秒),如果适用。
}
在我的例子中,我收到了类似的响应,但是URI样式和资源ID使用(?)可能与示例不同

{
种类:“api#频道”,
id:'8f76c160-b229-11eb-a810-93ba607a525b',
resourceId:'li76v1_bIpI23HBJ13dAqo66pYQ',
resourceUri:'https://www.googleapis.com/drive/v3/files/1_ihmP2rHCBMXe7aQkW32bjZMccXzsPjE?acknowledgeAbuse=false&supportsAllDrives=false&supportsTeamDrives=false&alt=json',
有效期:'1620728513000'
}
x-goog-resource-id与您正在查看的文件/文件夹id不同。 从文件中:

标识监视的资源的不透明值。此ID在API版本中是稳定的

这意味着谷歌将为所关注的资源创建一个新的ID,该ID对于文件/文件夹来说是唯一的,但与文件/文件夹ID不同。不透明部分意味着这只是另一个ID,您可以识别观看频道。谷歌可能在内部使用它,但不透明意味着我们无法看到它的工作一大堆

要识别已更改的资源,您可以在创建频道时存储这些ID,您可以使用
x-goog-channel-ID
x-goog-resource-ID
将它们与本地存储进行比较

本地存储可能是一个简单的JSON:

{
“2ipjp6ki213121245543aq_rIFGwE”:“[FILE_ID]”
}
或者,您可以只解析
x-goog-resource-uri
,获得您已经完成的ID

为了随后获得更多关于修订和版本相关/独立数据的数据,您只需在收到推送通知时使用对驱动器API的普通get请求

您链接的示例 这显示了
watch
请求响应:

{
  "kind": "api#channel",
  "id": "01234567-89ab-cdef-0123456789ab"", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://www.googleapis.com/drive/v3/files/o3hgv1538sdjfh", // Version-specific ID of the watched resource.
  "token": "target=myApp-myFilesChannelDest", // Present only if one was provided.
  "expiration": 1426325213000, // Actual expiration time as Unix timestamp (in ms), if applicable.
}
这是创建通知通道时得到的一次性响应。它不是资源更改时得到的推送通知的格式

文件

你的意思是说
我想获得独立于版本的资源数据。
你想获得更多关于文件元数据的信息吗?如所有者和编辑器等?正如我所知,包括文件夹资源在内的文件是按版本管理的,我在注册watch时使用的文件ID是依赖于版本的。我想知道与版本相关的数据和与版本无关的数据(包括您提到的元数据)之间没有区别。谢谢您的回答。但是,官方文档告诉它是被监视资源的ID。我在我的问题中添加了一些。实际上,我想知道“resourceId”的确切含义。您是对的,我在正确,我将更新我的答案。再次感谢您的建议。我的示例是您提到的创建频道时的响应。我之所以写此示例,是因为它会显示资源更改事件的标题中使用了资源ID。无论如何,我们不知道如何使用资源ID是对的,因为它可能在内部使用?我不擅长中文:-)没问题:)我不确定资源ID为什么是那样的
\_(ツ)_/“
。单词
不透明
的字面意思是“不能被看穿;不透明”。因此很难知道它的用途。如果你愿意,你可以使用它,但仅仅使用
资源URI可能更容易