Wie wird die Aktualisierung der Cache-Route bei der nächsten Anforderung mit Retrofit und OKHttp ungültig gemacht / erzwungen?

7

Ich verwende Retrofit mit dem OKHttp-Client zum Zwischenspeichern von Antworten von einer JSON-API.

Das funktioniert gut.

Wenn ich jedoch eine Aktion auf dem Gerät mache, die die Aktualisierung der Daten auf dem Server verursacht, muss ich eine bestimmte Route "ungültig machen", um sicherzustellen, dass das nächste Mal eine Anfrage für diese Daten erfolgt vom Server wieder abgerufen, anstatt die jetzt veraltete Version im Cache.

Zur Zeit habe ich daran gearbeitet, indem ich explizit die neue Route mit einem "No-Cache" -Flag im Cache-Control-Header der Anfrage aufgerufen habe, aber das zwingt mich dazu, die neuen Daten zu laden, bevor sie benötigt werden mehrmals, wenn mehrere Aktionen ausgeführt werden, nur um den Cache auf dem neuesten Stand zu halten.

Gibt es eine Möglichkeit, eine Route / Methode in meinem Retrofit / OKhttp-Client als abgelaufenen Cache zu markieren, was bei der nächsten Anforderung eine verbindliche Aktualisierung über das Netzwerk erfordert?

    
Shaun 21.05.2014, 11:58
quelle

3 Antworten

4

Dafür gibt es kein API, aber eines sollte es geben. Bitte öffnen ein OKHttp-Problem, um dies zu melden.

Es wird wahrscheinlich eine Weile dauern, bis wir implementiert haben, weil wir herausfinden müssen, was die beste API dafür ist. Das Invalidieren einer einzelnen URL ist unkompliziert. Das Deaktivieren eines URL-Bereichs (zB square.com/cash/* ) ist schwieriger, weil der OkHttp-Cache derzeit durch URL-Prüfsummen organisiert ist. Es gibt auch hässliche Randfälle wie das, wenn die ungültige URL gerade in den Cache geschrieben wird.

    
Jesse Wilson 21.05.2014, 13:14
quelle
8

Mit Retrofit2 und OkHttp3 können Sie eine neue Antwort erzwingen, indem Sie einen Cache-Control-Header zu Ihren API-Methodendefinitionsparametern hinzufügen:

%Vor%

und dann, wenn du dich anrufst, entweder null für eine (vielleicht) zwischengespeicherte Version oder "no-cache" für eine Live-Version:

%Vor%     
Mannaz 18.01.2017 19:29
quelle
7

Dies ist jetzt in OkHttp möglich, indem die Funktion Cache.urls() verwendet wird. Als die Dokumentation lautet:

  

Der Iterator unterstützt Iterator.remove (). Entfernen einer URL von der   Iterator entfernt die entsprechende Antwort aus dem Cache. Benutze dies um   verwerfen ausgewählte Antworten.

Dies wurde Ende Dezember 2014 im Master zusammengeführt und scheint Teil dieser Tags (Releases) zu sein: < em> parent-2.4.0-RC1 parent-2.4.0 parent-2.3.0 parent-2.2.0

    
Espen Riskedal 13.07.2015 11:46
quelle

Tags und Links