Ich habe einen REST-API (in Nancy gebaut, auf ASP.NET ausgeführt wird), die ein JSON-Objekt wie diese zurückgeben können:Was ist ein effektiver und verarbeitungsgünstiger Algorithmus zum Generieren von ETags?
{
id: "1",
name: "Fred",
reviews: [
{
id: "10",
content: "I love Stack Overflow"
}
]
}
Hinweis, wie dieses Objekt nicht um eine direkte Einheit ist, sondern es ist eine Darstellung.
Normalerweise ich einen letzten Änderung/Zeitstempel der Einheit in der DB als ETag verwenden würde, dann, wenn es aktualisiert wird erhalten, wird der ETag aktualisiert. Einfach.
Aber in diesem Fall, was passiert, wenn der Benutzer nicht ändert, aber der Inhalt der ersten Überprüfung ändert? Unter Verwendung der zuvor erwähnten ETag-Logik würde sich dies nicht ändern. Wir haben hier einen Fall, in dem die Repräsentation mehrere Entitäten umfasst, und ich versuche einen Weg zu finden, um dies eindeutig zu identifizieren. So
Ich muß irgendwie diese Darstellung identifizieren (die ein einfacher C# POCO ist, in einem Redis Cache gespeichert).
Hier sind meine ersten Gedanken:
Object.GetHashCode()
. Funktioniert nicht, weil die Speicherreferenz immer unterschiedlich ist.- Speicher das Objekt, SHA1-Hash es streamen. Kostspielig jedes Mal.
- Bevor ich hinzufügen/den Cache aktualisieren, erstellen Sie eine GUID für den ETag verwendet werden und speichern, dass auch im Cache. Wenn dann der Cache geleert wird (was im vorherigen Beispiel der Fall wäre), wird eine neue GUID erzeugt und der ETag wird aktualisiert. Das Problem bei diesem Ansatz ist, dass ich meinen ETag-Mechanismus mit meiner Caching-Implementierung verbinde (also nicht lose gekoppelt).
jemand eine billige/effektive Art und Weise denken, dies zu tun, im Idealfall auf globaler Ebene? (z. B. Object
oder ein Basisobjekt anstelle einer spezifischen ETag-Erzeugungslogik für jede Entität/Ressource).
Vielen Dank!