Google calendar api - 如何避免双重预订?

时间:2016-11-14 02:19:21

标签: google-api google-calendar-api

使用API​​将事件插入Google日历时,有没有办法避免竞争条件?我有一个实验性的应用程序,需要将事件插入用户的日历。但是,用户不应该在特定时间双重预订。

保证这类事情的唯一真正方法是Google提供方法。其他解决方案容易出现竞争条件(例如,用户在我的应用程序无知时更新它的其他应用程序)。据我所知,选项可以选择:

  1. 带有If-Match选项的电子标签 - 但此选项对于根据文档(https://developers.google.com/google-apps/calendar/v3/version-resources)的插入无效。
  2.   

    重要提示:不支持对条件修改   插入操作。相反,如果你被允许,可以保证   要提供资源ID,那么操作只有在没有时才会成功   现有条目具有该ID。

    因此,如果我提供与日历etag的if-match并尝试插入,则无论etag是否正确,它总是会失败。

    1. 在即将插入事件时使用“观察”一段时间(https://developers.google.com/google-apps/calendar/v3/reference/events/watch)。但是,由于需要时间通知,此解决方案容易出现竞争条件。在我的应用程序收到更新通知时插入一个用户是有问题的。

    2. 定期将整个日历与服务器同步,并将真实来源视为同步版本并避免双重预订。不太理想,因为添加的新事件不会足够快地同步,但最有可能发挥作用。

    3. 还会想到其他什么解决方案?我认为#3最适合保证数据的一致性和完整性,以避免双重预订。

1 个答案:

答案 0 :(得分:0)

我在this blog上找到了解决此问题的解决方案,该解决方案表明您将使用Calendar Resource API代替Google日历。我认为本指南正是您所需要的。

  

与常规日历不同,资源:

     

- 不允许冲突

     

- 可以在您的Google Apps域中的所有人之间共享

     

- 可以邀请(一次多个)参加活动,就像一个人一样

     

- 他们与每个人共享可用性的能力使得资源非常适合管理房间时间表。特别是在共同的工作中   环境就像你的办公室。

     

仅供参考:本指南假设您已拥有Google Apps。目前只   付费帐户可以访问资源日历。如果你是   在使用个人Gmail帐户或使用个人Gmail帐户时,此过程不会   很有意义。