google docs - historial - Etag y LastModifiedDate no cambian después de la edición del archivo
google forms (2)
Después de editar un documento en GoogleDrive, parece que el valor de LastModified no cambia inmediatamente a veces. Parece que el valor se actualizará en unos minutos.
Traté de buscar el Etag del documento por DriveSDK, también sucede con el valor de Etag.
Este comportamiento extraño me impide obtener el estado del documento (modificado o no) en tiempo real. Cualquier sugerencia será muy apreciada.
[Ejemplo de solicitud y respuesta] La solicitud es solo GoogleDrive ListFiles: https://www.googleapis.com/drive/v2/files
Esta es la parte de la respuesta JSON, y puede ver que ModifiedDate es anterior a ModifiedByMeDate.
{
"kind": "drive#fileList",
"etag": "/"3NNCnvnQuji-pODa6SMQ6atlc3M/oKnf21kAcJKTCIycS597xCSR2bk/"",
"selfLink": "https://www.googleapis.com/drive/v2/files",
"items": [
{
"kind": "drive#file",
"id": "1lZjcJIf3Chuu5upFqtiqfTRnRw7*****rFL_tlO8A",
"etag": "/"3NNCnvnQuji-pODa6SMQ6atlc3M/MTM1NDY5MzMyMzQ1Mg/"",
"selfLink": "https://www.googleapis.com/drive/v2/files/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A",
"alternateLink": "https://docs.google.com/a/*****.com/document/d/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/edit",
"embedLink": "https://docs.google.com/a/*****.com/document/d/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/preview",
"iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_11_document_list.png",
"thumbnailLink": "https://docs.google.com/feeds/vt?gd=true&id=1lZjcJIf3Chuu5upFqtiq*****7wSUjbRurFL_tlO8A&v=22&s=AMedNnoAAAAAU*****UK74n3UiIg0L4TY-NwP3EaAU&sz=s220",
"title": "TestFile",
"mimeType": "application/vnd.google-apps.document",
"labels": {
"starred": false,
"hidden": false,
"trashed": false,
"restricted": false,
"viewed": true
},
"createdDate": "2012-07-24T08:14:13.918Z",
"modifiedDate": "2012-12-06T01:49:57.982Z",
"modifiedByMeDate": "2012-12-06T01:49:57.982Z",
"lastViewedByMeDate": "2012-12-06T01:50:06.974Z",
"parents": [
{
"kind": "drive#parentReference",
"id": "0AJ-aGTt-gWksUk9PVA",
"selfLink": "https://www.googleapis.com/drive/v2/files/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/parents/0AJ-aGTt-gWksUk9PVA",
"parentLink": "https://www.googleapis.com/drive/v2/files/0AJ-aGTt-gWksUk9PVA",
"isRoot": true
}
],
"exportLinks": {
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": "https://docs.google.com/feeds/download/documents/export/Export?id=1l*****huu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A&exportFormat=docx",
"application/vnd.oasis.opendocument.text": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upF*****SUjbRurFL_tlO8A&exportFormat=odt",
"text/html": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUj*****L_tlO8A&exportFormat=html",
"application/rtf": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upFqtiq*****SUjbRurFL_tlO8A&exportFormat=rtf",
"text/plain": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upFqtiqf*****SUjbRurFL_tlO8A&exportFormat=txt",
"application/pdf": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3C*****fTRnRw7wSUjbRurFL_tlO8A&exportFormat=pdf"
},
"userPermission": {
"kind": "drive#permission",
"etag": "/"3NNCnvnQuji-pODa6SMQ6atlc3M/6LfqbkrWujmUe1WSDkyhTxdIUCc/"",
"id": "me",
"selfLink": "https://www.googleapis.com/drive/v2/files/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/permissions/me",
"role": "owner",
"type": "user"
},
"quotaBytesUsed": "0",
"ownerNames": [
"***** *****"
],
"lastModifyingUserName": "***** *****",
"editable": true,
"writersCanShare": true,
"appDataContents": false
},
Esto no responde a la pregunta, pero me gustaría comentar sobre qué significa etag
y modifiedDate
en los recursos de File
. File
etag
parece corresponder directamente con el valor de modifiedDate
. La segunda parte del etag
(después de la barra inclinada) es solo una codificación de la fecha modifiedDate
.
En la API de la Lista de documentos, hay una propiedad llamada app:edited
además de la propiedad updated
(que parece corresponder a fecha modifiedDate
aquí). La forma en que cambian estas marcas de tiempo no está claramente documentada, pero he notado esa app:edited
cambios app:edited
en prácticamente todos los cambios (por ejemplo, protagonizar un archivo, incluso por otro usuario si recuerdo correctamente) y los cambios updated
son más limitados (por ejemplo, para contenido modificaciones y cambios de permisos). Y el etag
antes corresponde directamente a la app:edited
, lo cual es bueno porque un cambio de app:edited
indica que realmente hubo un cambio (a veces cambia demasiado, como protagonizar un archivo por un usuario diferente, ya que no es así). realmente afecta los metadatos del usuario actual).
Lo que quiero decir es que creo que el etag
la Lista de etag
(y tener la propiedad de la app:edited
) es mejor que la API de Drive que tiene el etag
modifiedDate
solo. El problema con este último es que no tiene una manera confiable de determinar si un recurso de File
ha cambiado o no. Por ejemplo, si solo desea verificar si un recurso de File
ha cambiado, podría haber usado el método files.get con un encabezado If-None-Match
usando el etag
. Pero etag
no siempre cambia porque modifiedDate
no siempre cambia. Cambia, por ejemplo, cuando hay contenido nuevo, o cambia ACL, o cambia la descripción, pero no cambia, por ejemplo, cuando se descarta, o los padres cambian. Al comparar dos recursos, no puede determinar confiablemente cuál es más nuevo. Agregue el hecho de que se puede establecer etag
(por ejemplo, sería posible establecer el modifiedDate
a un valor anterior, o incluso un valor constante, y el etag
con él). El propósito previsto de etag
se pierde. Hay muchos casos en los que no podemos simplemente confiar en la lista de cambios, y si etag
comporta correctamente, sería de gran ayuda para determinar los cambios que ocurrieron.
Lo que sugiero es restablecer el comportamiento de etag
para que sea similar a la API de la lista de documentos. Y para ayudar a determinar qué recurso tiene información más reciente, agregue la app:edited
propiedad app:edited
también (creo que solo documentar el valor de etag
es suficiente, como decir oficialmente que la segunda parte es una codificación de una marca de tiempo, para que podamos confía en que siempre va en aumento). Además, creo que es mejor cambiar la propiedad modifiedDate
la modifiedDate
del contenido, y nada más (p. Ej., No con los cambios de ACL o de descripción).
Del mismo modo, etag
de etag
de Revision(List)
de archivos verbatim tampoco es muy útil. Como la propiedad downloadUrl
cambia regularmente, los etag
de cada Revision
y toda la lista cambian con ella, dejándola inútil (porque no puede usarla para verificar si las revisiones no cambiaron). Lo bueno es que la propiedad md5Checksum
se puede comparar, pero no es confiable en algunos casos.
La infraestructura de Google actualiza Google Doc asincrónicamente después de las actualizaciones. Que yo sepa, esto afecta etag, thumbnails, y probablemente md5sum y ciertas fechas modificadas.
Alguna documentación de Google que confirme qué elementos son asíncronos y cuáles son sincrónicos sería tremendamente útil para los desarrolladores.