Существует API с ограничением вызовов, в этом случае я хочу кэшировать ответ и не запускать сетевой ответ, если кэш все еще действителен.
Прежде всего, у меня есть cache interceptor
fun provideCacheInterceptor(): Interceptor = Interceptor { chain ->
val response = chain.proceed(chain.request())
val cacheControl = CacheControl.Builder()
.maxAge(6, TimeUnit.HOURS)
.maxStale(6, TimeUnit.HOURS)
.onlyIfCached()
.build()
response.newBuilder()
.header("CacheControl", cacheControl.toString())
.build()
}
Я прикрепляю кеш и перехватчик к клиенту
client = OkHttpClient().newBuilder()
.cache(cache)
.addInterceptor(loggingInterceptor)
.addInterceptor(cacheInterceptor)
В результате, когда я пытаюсь проверить ответ от кеша и / или из сети
Log.e("!@#", "cached: ${it.raw().cacheResponse()?.toString()}")
Log.e("!@#", "network: ${it.raw().networkResponse()?.toString()}")
Я получаю
cached: Response{protocol=http/1.1, code=200, message=, url=https://API}
network: Response{protocol=h2, code=200, message=, url=https://API}
Есть ли способ не для вызова конечной точки сети, если кэш все еще действителен?