我有一個REST API(建於南錫,在ASP.NET運行),可以返回一個JSON對象是這樣的:什麼是生成ETag的有效且處理便宜的算法?
{
id: "1",
name: "Fred",
reviews: [
{
id: "10",
content: "I love Stack Overflow"
}
]
}
注意這個對象是多麼的不直接的實體,而不是它的一個表示。
通常,我會使用DB中實體的最後一次修改/時間戳作爲ETag,然後當它被更新時,ETag會被更新。簡單。
但是在這種情況下,如果用戶沒有改變,但第一個評論的內容改變了怎麼辦?使用前面提到的ETag邏輯,它不會改變。我們在這裏有一個案例,其中表示包含多個實體,我試圖找到唯一標識該方法的方法。
所以我需要以某種方式識別表示(這是一個簡單的C#POCO,存儲在Redis緩存中)。
這裏是我最初的想法:
Object.GetHashCode()
。將無法正常工作,因爲內存引用將始終不同。- 內存流對象,SHA1哈希它。每一次都是昂貴的。
- 在添加/更新緩存之前,請創建一個用於ETag的GUID並將其存儲在緩存中。然後當刷新緩存(在前面的例子中)時,會生成一個新的GUID並更新ETag。這種方法的問題是我將我的ETag機制綁定到我的緩存實現(所以不是鬆散耦合)。
任何人都可以想到一個便宜/有效的方式來做到這一點,理想情況下在全球範圍內? (例如Object
或基礎對象,而不是每個實體/資源的特定ETag生成邏輯)。
非常感謝!