2012-12-05 24 views
5

在GoogleDrive中編輯文檔後,似乎LastModified值有時不會立即更改。它看起來像數值將在幾分鐘內更新。Etag和LastModifiedDate在文件編輯後不會改變

我試圖通過DriveSDK獲取文檔的Etag,它也發生在Etag值。

這種奇怪的行爲阻止我實時獲取文檔狀態(修改或不)。任何建議將不勝感激。

[示例請求和響應] 請求僅僅是Google雲端硬盤ListFiles:https://www.googleapis.com/drive/v2/files

這裏的響應JSON的一部分,你可以看到ModifiedDate比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

請添加一個帶有相應JSON響應的示例請求,其中顯示lastModified值未更改。 –

+0

嗨克勞迪奧,我剛剛附上了示例響應JSON。 – asir6

+0

如果您想在發送更新請求時設置modifiedDate字段,則還必須在請求參數中設置setModifiedDate = true:https://developers.google.com/drive/v2/reference/files/update –

回答

2

谷歌的基礎設施在更新後會對Google文檔進行異步更新。據我所知,這會影響etag,縮略圖,可能還有md5sum和某些修改日期。

來自Google的一些文檔確認哪些項目是異步的,哪些是同步的,對開發人員非常有用。

+0

你是如何發現這一點的?只是通過試驗API?我有興趣知道你的意見是否仍然如此,3年後... – kiwidrew

+0

實驗。我懷疑它是否會發生變化,因爲這需要對基礎設施進行全面的重新設計。然而,性能可能會導致延遲不可察覺。 – pinoyyid

+0

好的,謝謝你讓我知道! – kiwidrew

6

這並不回答這個問題,但我只想對etagmodifiedDate意味着什麼在File資源上的意見。 Fileetag似乎只是直接對應於modifiedDate的值。 etag的第二部分(斜線後)只是modifiedDate的編碼。

在文檔列表API中,除了updated屬性(此處對應於modifiedDate)之外,還有一個名爲app:edited的屬性。這些時間戳改變的方式沒有明確記錄,但我注意到app:edited實際上每次更改都會發生變化(例如,如果我沒有記錯,即使是其他用戶也可以主演文件)和updated變更更受限制(例如,對於內容修改和權限更改)。而之前的etag直接對應於app:edited,這是很好的,因爲app:edited的變化表明確實存在變化(有時變化太大了,儘管如同不同用戶對文件的主演一樣,因爲它並不真正影響當前用戶的元數據)。

我想說的是我認爲文檔列表的etag(和app:edited屬性)比只有modifiedDate的Drive API要好。後者的問題在於,您沒有可靠的方法來確定File資源是否已更改。例如,如果您只想檢查File資源是否發生了更改,則可以使用files.get方法,並使用etag的0123'標題。但etag並不總是變化,因爲modifiedDate並不總是變化。例如,當有新的內容,更改的ACL或更改的說明時,它會發生變化,但不會更改,例如,發生故障或父母更改時。比較兩種資源時,不能可靠地確定哪一種更新。添加可以設置modifiedDate的事實(例如,可以將modifiedDate設置爲更早的值,甚至是恆定值,並且可以將其設置爲etag)。 etag的預期用途丟失。在很多情況下,我們不能僅僅依靠更改列表,並且如果etag行爲正常,對確定發生的更改將有很大的幫助。

我的建議是將etag的行爲恢復爲與文檔列表API類似。爲了幫助確定哪些資源具有較新的信息,還需要添加app:edited屬性(我認爲只需記錄etag的值就足夠了,就像正式說第二部分是時間戳的編碼一樣,以便我們可以依靠它一直在增加)。另外,我認爲最好只更改內容修改的modifiedDate屬性,而不要更改其他內容(例如,不對ACL更改或說明更改)。

同樣,的Revision(List)的逐字文件資源也不是很有用。由於downloadUrl屬性會定期更改,因此每個Revisionetag和整個列表都會隨之更改,使其無法使用(因爲您無法使用它來檢查修訂是否未更改)。好東西有md5Checksum屬性,你可以比較,但它在某些情況下不可靠。

相關問題