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

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

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

    最佳答案

    我认为尝试在数据存储区中复制每个事件的信息将不是最佳选择。如果您想要所有内容,那么最终将存储大量数据,我怀疑其中的大部分都将毫无用处。

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

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

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

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

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

    上述方法的替代方法是让所有用户将对他们日历的访问权限委派给您的应用程序,但是您将不得不管理多组凭据,并可能清除用户日历中您不想跟踪的任何事件。

    09-07 16:52
    查看更多