使用Java将Google日历数据(通过API v3)导入Google应用程序引擎

使用Java将Google日历数据(通过API v3)导入Google应用程序引擎,java,google-app-engine,google-calendar-api,Java,Google App Engine,Google Calendar Api,我正在为预订系统编写一个JavaRESTAPI,其中事件数据来自GoogleCalendar(只读)。我目前正试图找出从谷歌日历中获取事件数据并将其存储在谷歌应用引擎的JPA数据存储中的最佳方法。我还有一些要求: 我需要保存以前的日历数据。仅仅删除数据库中的所有内容并用新数据替换它是不够的,因为我想保留数据的历史视图以用于统计目的 我需要在事件数据更改时通知用户,特别是在删除时。这要求我将新事件数据(来自API)与旧事件数据(来自JPA数据存储)区分开来 是否有人对如何做有任何一般性的指导和

我正在为预订系统编写一个JavaRESTAPI,其中事件数据来自GoogleCalendar(只读)。我目前正试图找出从谷歌日历中获取事件数据并将其存储在谷歌应用引擎的JPA数据存储中的最佳方法。我还有一些要求:

  • 我需要保存以前的日历数据。仅仅删除数据库中的所有内容并用新数据替换它是不够的,因为我想保留数据的历史视图以用于统计目的
  • 我需要在事件数据更改时通知用户,特别是在删除时。这要求我将新事件数据(来自API)与旧事件数据(来自JPA数据存储)区分开来

是否有人对如何做有任何一般性的指导和建议。我是否通过尝试将数据复制到数据存储中来正确处理问题?我是否应该在每次需要使用数据时发出API请求?如果我这样做了,有没有办法启动一些邮件服务,直接在谷歌日历中通知用户事件的变化

我认为尝试在数据存储中复制每个事件的信息是次优的。如果你想要所有东西,那么你最终会存储大量数据,我怀疑大部分数据都没有用

如果您想存储用于统计分析的数据,我建议您确定希望跟踪的最小字段集,然后只存储这些字段。一组合理的字段可能是:事件ID、名称、时间、与会者、位置、描述和用于记账的内部版本号。每次字段更改时增加版本号,并保存新字段信息。为了获得额外的积分,当最近检索的条目的哈希与已保存的条目匹配时,您可以保存字段的哈希,而不保存新版本

由于您不再将整个事件存储在服务器上,因此当您需要事件详细信息时,是否直接查询API的问题显然是“是”

谷歌日历在创建或更改日历事件时提供电子邮件通知。如果您担心用户收到有关其日历上出现的新事件的通知,可以通过将
sendNotifications
字段(在调用中)设置为
true
来轻松解决这一问题。API(以及用户修改事件时的日历UI)中的更新和删除调用也有类似的功能

在这个实现中,我看到的最困难的部分是决定当用户进行修改时,应用程序如何判断事件何时发生更改。(代码所做的更改可以立即反映在数据存储中保存的数据中。)如果所有事件都出现在单个日历上,则可以轮询API以获取更新,并使用
updateMin
字段显示上次查询更新的时间。如果事件在多个日历上,方法是相同的,但是您需要在每个日历上列出一个列表

请注意,您向应用程序提供的任何凭据都需要能够读取和写入您正在修改的任何日历。作为初始方法,我建议您为您的应用程序创建一个主日历,该日历列为您跟踪的所有事件的参与者。您代表用户创建的活动将把用户列为与会者。用户创建并希望与您的应用程序关联的事件需要将主日历添加为与会者。最后一点可能需要管理用户以正确的方式接受一些培训,以便与系统交互


上述方法的替代方法是让所有用户将对其日历的访问权委托给您的应用程序,但您必须管理多组凭据,并可能删除用户日历上您不感兴趣跟踪的任何事件。

我将很快启动类似的问题区域,但我们决定只在应用程序中创建事件,并将更改推到日历中,不读取日历中的更改以在应用程序中创建事件。这不是我的选项,因为管理用户希望继续使用Google日历。最后,它使项目更容易,因为我不必为事件上类似CRUD的任务开发管理GUI。