使用Java将Google日历数据(通过API v3)导入Google App Engine

mhe*_*nry 7 java google-app-engine google-calendar-api

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

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

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

Dan*_*oet 7

我认为尝试在数据存储区中复制每个事件的信息将是次优的.如果你想要一切,那么你最终会存储大量数据,我怀疑它的大部分都没用.

如果您想存储用于统计分析的数据,我建议您决定要跟踪的最小字段集,并存储这些字段.一组合理的字段可能是:事件ID,名称,时间,与会者,位置,说明以及用于簿记目的的内部版本号.每次字段更改时增加版本号,并保存新字段信息.对于额外的功劳,您可以保存字段的哈希,而不是在最近检索的条目的哈希与已保存的条目匹配时保存新版本.

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

Google Calendar会在创建或更改日历活动时提供电子邮件通知.如果您担心用户被通知约出现在他们的日历新事件,这是很容易通过设置照顾sendNotifications场(在调用中插入一个新的事件)来true.API中的更新和删除调用(以及用户修改事件时的日历UI中)存在类似的功能.

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

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

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