我的应用使用gmail api在一段时间内更新gmail草稿。我发现,如果我碰巧重复gmail api更新调用相同的草案ID(这可能很容易做,因为API有时需要10秒才能响应),API会完全破坏草稿,这样我就得到了a"后端错误"每当我再次尝试访问它时。
以下是对repro的调用:
创建草稿:
curl https://www.googleapis.com/gmail/v1/users/me/drafts -H"授权:Bearer foracted" -H" Content-Type:application / json" -d' {"消息&#34 ;: {"原料&#34 ;:" RnJvbTogJ21lJw0KVG86IGJyYWRAbWl4bWF4LmNvbQ0KU3ViamVjdDogVGVzdCBEcmFmdCENCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04DQoNCk15IG1lc3NhZ2U =" }' { " id":" r7481949043481090326", " message":{ " id":" 14c53392c1ad1a38", " threadId":" 14c53392c1ad1a38", " labelIds":[ " DRAFT" ] } }
同时更新该草稿两次(通知命令并行运行):
curl -X PUT https://www.googleapis.com/gmail/v1/users/me/drafts/r7481949043481090326 -H"授权:Bearer redacted" -H" Content-Type:application / json" -d' {"消息&#34 ;: {"原料&#34 ;:" RnJvbTogJ21lJw0KVG86IGJyYWRAbWl4bWF4LmNvbQ0KU3ViamVjdDogVGVzdCBEcmFmdCENCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04DQoNCk15IG1lc3NhZ2U =" }' &安培; curl -X PUT https://www.googleapis.com/gmail/v1/users/me/drafts/r7481949043481090326 -H"授权:Bearer redacted" -H" Content-Type:application / json" -d' {"消息&#34 ;: {"原料&#34 ;:" RnJvbTogJ21lJw0KVG86IGJyYWRAbWl4bWF4LmNvbQ0KU3ViamVjdDogVGVzdCBEcmFmdCENCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04DQoNCk15IG1lc3NhZ2U =" }' [1] 96019 { " id":" r7481949043481090326", " message":{ " id":" 14c5339e1cbcb58b", " threadId":" 14c5339e1cbcb58b", " labelIds":[ " DRAFT" ] } } { "错误":{ "错误":[ { "域":"全球", "原因":" backendError", " message":" Backend Error" } ] "代码":500, " message":" Backend Error" } }
注意"后端错误"第二次通话。现在,gmail中的用户草稿文件夹中将有两个草稿。
现在,在两个更新调用完成后,尝试获取草稿:
curl https://www.googleapis.com/gmail/v1/users/me/drafts/r7481949043481090326 -H"授权:Bearer foracted" { "错误":{ "错误":[ { "域":"全球", "原因":" backendError", " message":" Backend Error" } ] "代码":500, " message":" Backend Error" } }
通过该ID获取或更新草稿的所有后续调用都将返回Backend Error,并且用户的草稿文件夹中也会留下两个副本。
明显的解决方法是添加保护措施,以便我永远不会尝试同时更新相同的草稿ID。但这是一个非常严重的错误,应该由Gmail团队查看。
答案 0 :(得分:0)