Graph API如何处理并发上传?

时间:2017-08-29 15:04:10

标签: office365 microsoft-graph onedrive

我正在使用MS Graph SDK从/向云下载,编辑和上传Word文档。

在另一个问题中,我建议使用if-match来避免覆盖其他任何人的更改。我查看了文档,他们没有说明何时会发生覆盖

  1. 只有在发生冲突更改时,上传才会失败?
  2. 如果不是,是否有任何合并非冲突变更的机制?
  3. 我在多线程上下文中运行我的程序,并且很有可能许多用户同时编辑一个文档。

1 个答案:

答案 0 :(得分:1)

If-Match绝对是您追求的目标。如果您为标头提供有效的etag或ctag,则只有当项目的当前状态具有匹配的etag(或ctag取决于提供的标签)时,才会成功完成请求。如果值不匹配,则会返回412 Precondition Failed响应。

是否在标题中提供etag或ctag的选择取决于您对我的敏感程度。 etag涵盖文件的所有更改,而ctag仅涵盖内容更改。因此,如果您在If-Match标题中提供了etag,并且有人重命名了该文件,则您的请求将失败。另一方面,如果您提供了ctag,则只有在实际文件内容发生更改时才会失败。

现在合并是一个完全不同的主题,不幸的是,这是你需要写的。 OneDrive不是在理解所有各种文件类型的语义,因此不知道什么是冲突的变化,什么是非冲突的变化。通过扩展,它也不知道如何为您合并非冲突的更改。如果您最终因服务更改而导致前提条件失败,则需要下载更新的文件并自行执行合并。