Gmail API 后端错误:草稿在同时更新时损坏?

Posted

技术标签:

【中文标题】Gmail API 后端错误:草稿在同时更新时损坏?【英文标题】:Gmail API Backend Error: drafts get corrupted when updating them concurrently? 【发布时间】:2015-05-29 21:22:13 【问题描述】:

我的应用使用 gmail api 定期更新 gmail 草稿。我发现如果我碰巧重叠了相同草稿 id 的 gmail api 更新调用(这很容易做到,因为 API 有时需要 10 秒才能响应),API 将完全破坏草稿,这样我就会得到一个“每次我尝试再次访问它时都会出现“后端错误”。

这里是repro的调用:

    创建草稿:

    卷曲https://www.googleapis.com/gmail/v1/users/me/drafts -H “授权:承载删节” -H “内容类型:应用/ JSON” -d ' “消息”: “原始”: “RnJvbTogJ21lJw0KVG86IGJyYWRAbWl4bWF4LmNvbQ0KU3ViamVjdDogVGVzdCBEcmFmdCENCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04DQoNCk15IG1lc3NhZ2U =”' “id”:“r7481949043481090326”, “信息”: “id”:“14c53392c1ad1a38”, "threadId": "14c53392c1ad1a38", “标签标识”:[ “草案” ]

    同时更新该草稿两次(注意命令并行运行):

    卷曲-X PUT https://www.googleapis.com/gmail/v1/users/me/drafts/r7481949043481090326 -H “授权:承载删节” -H “内容类型:应用/ JSON” -d ' “消息”: “原始”: “RnJvbTogJ21lJw0KVG86IGJyYWRAbWl4bWF4LmNvbQ0KU3ViamVjdDogVGVzdCBEcmFmdCENCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04DQoNCk15IG1lc3NhZ2U =”' &卷曲-X PUT https://www.googleapis.com/gmail/v1/users/me/drafts/r7481949043481090326 -H “授权:承载删节” -H “内容类型:应用/ JSON” -d ' “消息”: “原始”: “RnJvbTogJ21lJw0KVG86IGJyYWRAbWl4bWF4LmNvbQ0KU3ViamVjdDogVGVzdCBEcmFmdCENCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04DQoNCk15IG1lc3NhZ2U =”' [1] 96019 “id”:“r7481949043481090326”, “信息”: "id": "14c5339e1cbcb58b", "threadId": "14c5339e1cbcb58b", “标签标识”:[ “草案” ] “错误”: “错误”:[ “域”:“全球”, “原因”:“后端错误”, “消息”:“后端错误” ], “代码”:500, “消息”:“后端错误”

注意第二次调用的“后端错误”。现在gmail中用户的草稿文件夹中将有两个草稿。

    现在,在两个更新调用完成后,尝试获取草稿:

    curl https://www.googleapis.com/gmail/v1/users/me/drafts/r7481949043481090326 -H "Authorization: Bearer redacted" “错误”: “错误”:[ “域”:“全球”, “原因”:“后端错误”, “消息”:“后端错误” ], “代码”:500, “消息”:“后端错误”

通过该 ID 获取或更新草稿的所有后续调用都将返回后端错误,并且用户的草稿文件夹中也有两个副本。

显而易见的解决方法是添加保护措施,这样我就不会尝试同时更新同一个草稿 ID。但这是一个非常严重的错误,Gmail 团队应该关注一下。

【问题讨论】:

仅供参考,Gmail API 文档中有一个指向“问题跟踪器”的链接:developers.google.com/gmail/api(“支持”下的左侧导航)对于明显是错误的事情,欢迎您报告他们在那里。 埃里克,谢谢!我什至没有看到问题跟踪器。在那里归档:code.google.com/a/google.com/p/apps-api-issues/issues/… 你得到最终解决方案或错误了吗? 是的,这里有错误:code.google.com/a/google.com/p/apps-api-issues/issues/…。我的解决方案是只使用锁定来确保草稿更新调用永远不会重叠。 【参考方案1】:

这是提交为 https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3782&thanks=3782&ts=1427348359 的 gmail api 错误。

【讨论】:

以上是关于Gmail API 后端错误:草稿在同时更新时损坏?的主要内容,如果未能解决你的问题,请参考以下文章

如何在浏览器中打开使用 Gmail API 创建的草稿?

Gmail API 历史请求返回草稿

如何在没有用户交互的情况下使用 GMail API 创建草稿

使用 Gmail API 创建的草稿邮件中未呈现图像

带有 MimeKit、C# Winforms 和 Google API 的 Gmail 草稿(带附件的 HTML)

带有 .Net 客户端库的 Gmail api:缺少草稿消息 [400]