11

JSON API からの応答をキャッシュするために、OKHttp クライアントで Retrofit を使用しています。

これはうまく機能します。

ただし、デバイスでアクションを実行してサーバー上でデータを更新する場合、次回このデータに対してリクエストが行われたときに特定のルートを「無効化」する方法が必要です。キャッシュされた古いバージョンではなく、再びサーバーにアクセスします。

現在、リクエストの Cache-Control ヘッダーに「no-cache」フラグを付けて新しいルートを明示的に呼び出すことで、これを回避していますが、これにより、必要になる前に新しいデータをダウンロードする必要があり、場合によっては複数回ダウンロードする必要があります。キャッシュを最新の状態に保つためだけに、複数のアクションが実行されます。

レトロフィット/OKhttp クライアントのルート/メソッドをキャッシュの期限切れとしてマークし、次に要求されたときにネットワーク経由で必須の更新を要求する方法はありますか?

4

4 に答える 4

15

retrofit2 と OkHttp3 を使用すると、API メソッド定義パラメーターに Cache-Control ヘッダーを追加することで、新しい応答を強制できます。

@GET("ws/something")
Something getSomething(@Header("Cache-Control") String cacheControl);

そしてnull、(おそらく)キャッシュされたバージョンまたは"no-cache"ライブバージョンのいずれかを提供するように呼び出すとき:

myApi.getSomething(forceRefresh ? "no-cache" : null);
于 2017-01-18T19:29:31.073 に答える