google-drive-api - Google Drive API,更改 api - 共享文件缺少父字段
问题描述
我尝试从 GDrive 同步更改,所以我正在使用更改 api。当我将它与restrictToMyDrive=true
.
但是当我尝试扩展它以跟踪共享文件restrictToMyDrive=false
时,我遇到了一些主要缺点。我的结果不一致 - 该parents
字段偶尔会丢失。
假设我们user A
将该文件夹共享到user B
:
rootSharedFolder
=> subFolder
=> subSubFolder
=>File
如果user B
调用更改 API 的时间比较接近user A
共享rootSharedFolder
,则在 3/10 次中将收到一些没有该parents
字段的内部文件夹。
即使尝试files.get
在收到的更改项上使用 API,也会导致空parents
字段。但是如果我等待一两分钟然后再次调用它,parents
结果中确实存在该字段。
其他人遇到这个问题,也许有解决方法?
谢谢!
此行为仅在调用
changes api
接近其他用户与您共享项目的时间时发生
解决方案
由于两个因素,可能缺少父母字段:
- 传播延迟
- 权限不足,无法查看父母
在这两种情况下,您都会注意到相同的情况:parents
缺少文件字段,起初无法判断您是哪种情况:
传播问题:
当您请求与不属于您的共享文件相关的一些文件详细信息时,可能会发生这种情况。
乍一看可能找不到它的相关父级,这是因为更改仍在文件系统上传播,这称为传播问题,它应该不会持续很长时间,应该可以通过以下方式识别和解决这种不便在权限更改后几分钟检索此字段数据。
无法访问父母:
在这种情况下,您可能可以访问某个文件,但不能访问它的父文件夹,因此,您无法知道它的父文件夹,因为它没有与您共享。
这是在文档上:
- 父母 - 如果请求用户不是共享驱动器的成员并且无权访问父母,则父母不会出现在父母列表中。此外,除了顶级文件夹之外,如果文件位于共享驱动器中,则父列表必须只包含一项。
旁注:您可能对使用 SharedDrives 感兴趣,其中文件由组织而不是个人用户拥有,从而简化共享过程并可能避免您在此处面临的问题。
https://developers.google.com/drive/api/v3/enable-shareddrives
如何知道是哪种情况?
一种方法是实现一个指数退避算法来尝试检索丢失的父母字段,如果在最大尝试次数后它没有检索到我们可能处于第二种情况:
exponentialBackoff(getParent, 7, 300, function(result) {
console.log('the result is',result);
});
// A function that keeps trying, "getParent" until it returns true or has
// tried "max" number of times. First retry has a delay of "delay".
// "callback" is called upon success.
function exponentialBackoff(toTry, max, delay, callback) {
console.log('max',max,'next delay',delay);
var result = toTry();
if (result) {
callback(result);
} else {
if (max > 0) {
setTimeout(function() {
exponentialBackoff(toTry, --max, delay * 2, callback);
}, delay);
} else {
console.log('we give up');
}
}
}
function getParent() {
var percentFail = 0.8;
return Math.random() >= 0.8;
}
推荐阅读
- perl - perl 5.6 版中的 500 SSL 协商失败
- wordpress - 如何更改 Wordpress divi 主题中的背景图像?
- types - 我应该使用什么类型声明来创建自己的 HashMap contains 方法?
- reactjs - 反应管理员:
始终显示为“活动” - python - 在 SQL 表中插入 key/id 而不是 value
- c - 如何分配更少的内存并且它仍然有效?
- android - 如何检查 onCreate android fetch 库中的下载是否完成?
- python - Python 日志处理程序将不同的消息转发到不同的文件
- apache - 使用 .htaccess 语言重定向和手动语言选择器显示根 URL 时重定向到子文件夹
- android - 从 SQLite 中具有复合主键的表中删除特定行