2012-12-05 6 views
5

Dopo aver modificato un documento in GoogleDrive, sembra che il valore LastModified non cambi immediatamente qualche volta. Sembra che il valore verrà aggiornato in pochi minuti.Modifica donot di Etag e LastModifiedDate dopo la modifica dei file

Ho provato a recuperare l'Etag del documento da DriveSDK, succede anche al valore di Etag.

Questo strano comportamento mi impedisce di ottenere lo stato del documento (modificato o meno) in tempo reale. Qualsiasi suggerimento sarà molto apprezzato.

[Richiesta campione e risposta] La richiesta è ListFiles appena Google Drive: https://www.googleapis.com/drive/v2/files

Ecco la parte della risposta JSON, e si può vedere che il ModifiedDate è anteriore di 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 
    }, 
+1

Aggiungi una richiesta di esempio con la risposta JSON corrispondente che mostri che il valore lastModified non è stato modificato. –

+0

Ciao Claudio, ho appena allegato la risposta di esempio JSON. – asir6

+0

Se si desidera impostare il campo Data modificato quando si invia una richiesta di aggiornamento, è inoltre necessario impostare setModifiedDate = true nei parametri della richiesta: https://developers.google.com/drive/v2/reference/files/update –

risposta

2

L'infrastruttura di Google aggiorna Google doc in modo asincrono dopo gli aggiornamenti. Per quanto ne so, questo riguarda etag, miniature e probabilmente md5sum e alcune date modificate.

Alcuni documenti di Google che confermano quali elementi sono asincroni e che sono sincroni sarebbero tremendamente utili per gli sviluppatori.

+0

Come hai scoperto questo? È stato solo sperimentando con l'API? Sarei interessato a sapere se i tuoi commenti sono ancora veri, 3 anni dopo ... – kiwidrew

+0

Sperimentazione. Dubito che sia cambiato poiché ciò richiederebbe una riprogettazione totale dell'infrastruttura. Tuttavia la prestazione può essere tale che il ritardo è impercettibile. – pinoyyid

+0

Ok, grazie per avermelo fatto sapere! – kiwidrew

6

Questo non risponde alla domanda, ma vorrei solo commentare ciò che etag e modifiedDate significa sulle risorse File. Fileetag sembra corrispondere direttamente al valore modifiedDate. La seconda parte di etag (dopo la barra) è solo una codifica di modifiedDate.

Nell'API Elenco documenti, c'è una proprietà denominata app:edited oltre alla proprietà updated (che sembra corrispondere a modifiedDate qui). Il modo in cui questi timestamp cambiano non sono chiaramente documentati, ma ho notato che le variazioni di app:edited praticamente su ogni cambiamento (ad esempio, starring di un file, anche da un altro utente se ricordo bene) e le modifiche di updated sono più limitate (ad esempio per le modifiche del contenuto e cambi di permesso). E lo etag prima corrisponde direttamente a app:edited, il che è positivo perché una modifica di app:edited indica che c'era davvero un cambiamento (a volte cambia troppo anche se, come il protagonista di un file da un utente diverso, in quanto non influisce in i metadati dell'utente corrente).

Quello che voglio dire è che penso che l'Elenco documenti etag (e con la proprietà app:edited) sia migliore dell'API di Drive che ha solo modifiedDate. Il problema con quest'ultimo è che non si dispone di un modo affidabile per determinare se una risorsa File è stata modificata o meno. Ad esempio, se si desidera verificare se una risorsa File è stata modificata, è possibile che si sia utilizzato il metodo files.get con un'intestazione If-None-Match utilizzando etag. Ma etag non cambia sempre perché modifiedDate non cambia sempre. Ad esempio, cambia quando c'è un nuovo contenuto, o cambiato ACL, o cambiata descrizione, ma non cambia, ad esempio, quando cestinato, o i genitori sono cambiati. Quando si confrontano due risorse, non è possibile determinare in modo affidabile quale sia più recente. Aggiungere il fatto che è possibile impostare modifiedDate (ad esempio, sarebbe possibile impostare modifiedDate su un valore precedente o persino un valore costante e con lo etag). Lo scopo previsto di etag è stato perso. Ci sono molti casi in cui non possiamo semplicemente fare affidamento sulla lista delle modifiche, e se etag si comporta correttamente, sarebbe di grande aiuto per determinare le modifiche che sono avvenute.

Quello che suggerisco è di ripristinare il comportamento di etag in modo che sia simile all'API Elenco documenti. E per aiutare a determinare quale risorsa ha informazioni più recenti, aggiungi nuovamente la proprietà app:edited (penso che sia sufficiente documentare il valore di etag, come dire ufficialmente che la seconda parte è una codifica di un timestamp, in modo che possiamo contare su per essere sempre crescente). Inoltre, penso che sia meglio cambiare la proprietà modifiedDate nella modifica del contenuto e nient'altro (ad esempio non con le modifiche ACL o le modifiche alla descrizione).

Analogamente, etag di Revision(List) risorse di file di file letterali non sono molto utili. Poiché la proprietà downloadUrl cambia regolarmente, gli etag di ogni Revision e l'intero elenco cambiano con esso, rendendolo inutilizzabile (perché non è possibile utilizzarlo per controllare se le revisioni non sono cambiate). Per fortuna c'è la proprietà md5Checksum che puoi confrontare, ma in alcuni casi non è affidabile.

Problemi correlati