在使用API将事件插入Google Calendar时是否有办法避免竞争条件?我有一个实验性的应用程序,需要插入事件到用户的日历。但是,用户不应该在特定时间被重复预订。
唯一能保证这一点的方法是,如果谷歌提供了一种方法。其他解决方案容易出现竞争条件(例如,用户正在更新其他应用,而我的应用却一无所知)。我能告诉你的选项是:
- 带有If-Match选项的电子标签-但根据文档(https://developers.google.com/google-apps/calendar/v3/version-resources),此选项对插入无效。
重要:不支持条件修改插入操作。相反,它保证如果你被允许提供资源ID,则只有在不提供资源ID的情况下操作才会成功现有条目具有该ID。
因此,如果我提供一个if-match与日历etag,并试图插入,它总是失败,不管etag是正确的。
-
在事件即将插入时短暂使用"watch"(https://developers.google.com/google-apps/calendar/v3/reference/events/watch)。然而,由于获得通知所需的时间,这种解决方案容易出现竞态条件。当我的应用程序收到更新通知时,一个用户插入是有问题的。
-
定期将整个日历与服务器同步,并将真实来源视为同步版本,避免重复预订。不太理想,因为添加的新事件不能足够快地同步,但很可能会工作。
还有什么其他的解决方案?我认为#3最适合保证数据的一致性和完整性,避免重复预订。
我在这个博客上找到了一个解决方案,声明你将使用日历资源API而不是谷歌日历。我想这本指南就是你要找的。
与常规日历不同,资源:
-Do not allow conflict
-可以在你的Google Apps域的所有人之间共享
-可以被邀请(一次多个)参加活动,就像一个人一样
-他们与每个人共享可用性的能力使资源非常适合管理房间时间表。尤其是在一个共享的工作中环境就像你的办公室。
供参考:本指南假设你已经有谷歌应用程序。目前只付费帐户可以访问资源日历。如果你使用个人Gmail帐户时,这个过程不会发生很有意义。