2012-05-25 12 views
7

Estoy en el proceso de escribir una API REST de Java para un sistema de reservas donde los datos del evento provienen del Calendario de Google (solo lectura). Actualmente estoy tratando de descubrir la mejor manera de obtener y almacenar los datos del evento de Google Calendar en el almacén de datos JPA de Google App Engine. También tengo algunos requisitos:Importación de datos de Google Calendar (a través de API v3) a Google App Engine con Java

  • Necesito guardar los datos del calendario anterior. Simplemente dejar todo en la base de datos y reemplazarlo con nuevos datos no será suficiente porque quiero mantener una vista histórica de los datos con fines estadísticos.
  • Necesito notificar a los usuarios cuando cambian los datos del evento, específicamente para las eliminaciones. Esto requiere que diferencie los datos del nuevo evento (de la API) con los datos del evento anterior (del almacén de datos JPA).

¿Alguien tiene alguna orientación general y sugerencias sobre qué hacer? ¿Estoy abordando el problema de la manera correcta al intentar duplicar los datos en un almacén de datos? ¿Debo hacer solicitudes de API cada vez que necesito usar los datos? Si fuera así, ¿hay alguna manera de iniciar un servicio de correo electrónico para notificar a los usuarios de los cambios de eventos directamente desde el Calendario de Google?

+0

Pronto comenzaré un área de problema similar, pero decidimos crear solo eventos dentro de la aplicación e introducir cambios en el calendario, y no leer los cambios fuera del calendario para crear eventos dentro de la aplicación. – koma

+0

Esta no es una opción para mí porque los usuarios administrativos desean continuar usando Google Calendar. Al final, hace que el proyecto sea más fácil ya que no tengo que desarrollar una GUI administrativa para tareas similares a CRUD en Eventos. – mhenry

Respuesta

7

Creo que intentar replicar la información de cada evento en el almacén de datos no será óptimo. Si quiere todo, entonces va a terminar almacenando una gran cantidad de datos, y sospecho que la mayoría de ellos no servirá.

Si desea almacenar datos para el análisis estadístico, le sugiero que decida cuál es el conjunto mínimo de campos que desea rastrear, y simplemente almacenarlos. Un conjunto razonable de campos podría ser: identificación del evento, nombre, hora, asistentes, ubicación, descripción y un número de versión interno para propósitos de contabilidad. Incremente el número de versión cada vez que cambie un campo y guarde la información del nuevo campo. Para obtener crédito adicional, puede guardar un hash de los campos y no guardar nuevas versiones cuando el hash de la entrada recuperada más recientemente coincide con lo que ya está guardado.

Dado que ya no está almacenando todo el evento en su servidor, la pregunta de si consultar o no la API directamente cuando necesita detalles del evento es un obvio "sí".

Google Calendar proporciona notificaciones por correo electrónico cuando se crean o modifican eventos de calendario. Si le preocupa que los usuarios reciban notificaciones sobre nuevos eventos que aparecen en sus calendarios, esto se soluciona fácilmente configurando el campo sendNotifications (en la llamada al insert a new event) al true. Funcionalidad similar existe para actualizar y eliminar llamadas en la API (y en la interfaz de usuario del calendario para cuando un usuario modifica un evento).

La parte más difícil que veo en esta implementación es decidir cómo se da cuenta la aplicación cuando un evento cambia cuando un usuario realiza una modificación. (Los cambios realizados por su código se pueden reflejar inmediatamente en los datos que guarda en el almacén de datos). Si todos los eventos aparecen en un solo calendario, puede sondear la API para un list of events y usar el campo updatedMin con la hora de la última consultado por actualizaciones. Si los eventos están en varios calendarios, el enfoque es el mismo, pero deberá hacer una lista por calendario.

Tenga en cuenta que las credenciales que proporcione a su aplicación necesitarán poder leer y escribir en los calendarios que esté modificando. Como enfoque inicial, le sugiero que cree un calendario maestro para su aplicación que aparezca como asistente en todos los eventos que está rastreando. Los eventos que cree en nombre de los usuarios incluirán a los usuarios como asistentes. Los usuarios de eventos que creen y deseen asociar con su aplicación deberán agregar el calendario maestro como asistentes.Este último punto puede requerir que los usuarios administrativos reciban capacitación en la forma correcta de interactuar con el sistema.

La alternativa a lo anterior es hacer que todos los usuarios deleguen acceso a su calendario a su aplicación, pero tendrá que administrar múltiples conjuntos de credenciales y posiblemente eliminar cualquier evento en los calendarios de los usuarios que no le interese rastrear .