7

我正在为事件数据来自 Google 日历(只读)的预订系统编写 Java REST API。我目前正在尝试找出从 Google 日历获取事件数据并将其存储在 Google App Engine 的 JPA 数据存储中的最佳方法。我也有几个要求:

  • 我需要保存以前的日历数据。简单地删除数据库中的所有内容并用新数据替换它是不够的,因为我想保留数据的历史视图以用于统计目的。
  • 当事件数据发生变化时,我需要通知用户,特别是删除。这需要我将新事件数据(来自 API)与旧事件数据(来自 JPA 数据存储区)进行比较。

有没有人对做什么有任何一般性的指导和建议。我是否通过尝试将数据复制到数据存储中以正确的方式解决问题?我是否应该在每次需要使用数据时都发出 API 请求?如果我这样做,有没有办法启动一些邮件服务,直接在 Google 日历中通知用户事件更改?

4

1 回答 1

7

我认为尝试在数据存储中复制每个事件的信息将是次优的。如果您想要一切,那么您最终将存储大量数据,我怀疑其中大部分将毫无用处。

如果您想存储数据以进行统计分析,我建议您确定要跟踪的最小字段集是什么,然后存储它们。一组合理的字段可能是:事件 ID、名称、时间、参加者、位置、描述和用于簿记目的的内部版本号。每次字段更改时增加版本号,并保存新的字段信息。如果最近检索到的条目的哈希值与已保存的哈希值匹配,您可以保存字段的哈希值,而不是保存新版本。

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

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

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

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

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

于 2012-05-29T22:37:46.743 回答