【发布时间】:2014-09-07 01:29:33
【问题描述】:
我正在尝试设置 Google Drive Push Notifications 来监控文件夹的更改。
代码:
$channel = new \Google_Service_Drive_Channel;
$channel->setId('ZZZ');
$channel->setResourceId('a1b2c3');
$channel->setType('web_hook');
$channel->setToken('superToken');
$channel->setAddress('https://mydomain/notification');
$folderId = '0BzNPrO3YVvJKU1J6NklYcThFMjQ';
$res = $service->files->watch($folderId, $channel);
$res 包含确认信息,一旦我将文件上传到该文件夹中,我确实会收到通知(也可以接收到“同步”信号)。
收到更改通知后,我会回显“200”字符串,正如 Google Drive API 参考中建议的那样:
To indicate success, you can return any of the following status codes: 200, 201, 202, 204, or 102.
If your service returns 500, 502, 503, or 504, the Drive API will retry with exponential backoff.
问题是我收到了针对单个更改事件的多个通知,并且它们似乎每次都在较长时间后到达(与“指数退避”行为相匹配)。同时,maxChangeIdCount 的 Changes 资源不会增加。
所以 Google Drive 推送器似乎没有看到成功的 200 代码并重试通知。当然,这带来了一个巨大的问题——很难验证变化是否确实发生了。
所以,问题是:
- 什么是对通知的正确响应 - 是字符串“200”还是没有响应正文的 HTTP 响应代码 200
- 我如何保证当观看的文件发生更改时,始终只有一个通知更新。
谢谢!
【问题讨论】:
-
我认为这是谷歌服务器的不当行为。我在使用 Drive v3 API 时遇到了同样的问题。作为解决方法,我只是忽略基于 resourceUri 标头属性的 pageToken 参数的重复项。
标签: google-drive-api