Docs
Launch GraphOS Studio
You're viewing documentation for an upcoming version of this software. Switch to the latest stable version.

HTTP cache


This page focuses on the HTTP cache. If you want to deduplicate the storage of your objects and/or notify your UI when your data changes, take a look at the normalized cache instead.

ℹ️ The HTTP cache is only available on the JVM.

Setup

To enable HTTP cache support, add the dependency to your project's build.gradle file:

build.gradle[.kts]
dependencies {
implementation("com.apollographql.apollo3:apollo-http-cache:4.0.0-beta.6")
}

If you're targeting Android API level < 26, you'll need to enable core library desugaring to support the java.time API:

android {
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled = true
}
}

Then configure your HTTP cache:

apolloClient = ApolloClient.Builder()
.httpCache(
// Use a dedicated directory for the cache
directory = File(pathToCacheDirectory),
// Configure a max size of 100MB
maxSize = 100 * 1024 * 1024
)
.build()

Usage

The HTTP cache is a least recently used (LRU) cache with a configurable max size.

Once your cache setup is complete, the cache will be used by default by all your queries ( are never cached). By default, queries will try to find a result in the cache first and go the network if it's not there. This is the HttpFetchPolicy.CacheFirst. You can customize that behaviour with httpFetchPolicy(HttpFetchPolicy):

val response = apolloClient.query(query)
// Don't use the cache
.httpFetchPolicy(HttpFetchPolicy.NetworkOnly)
// Or only use the cache
.httpFetchPolicy(HttpFetchPolicy.CacheOnly)
// Finally, execute your query
.execute()

If the is present in cache, it will be used to return response.data. If not, a HttpCacheMissException will be thrown.

You can also set an expiration time either globally or for specific queries. The entries will automatically be removed from the cache after the expiration time:

// Globally
apolloClient = ApolloClient.Builder()
.httpCache(/*...*/)
// Expire after 1 hour
.httpExpireTimeout(60 * 60 * 1000)
.build()
// On a specific query
val response = apolloClient.query(query)
// Expire after 1 hour
.httpExpireTimeout(60 * 60 * 1000)
.execute()

If a specific query must not be cached, you can use httpDoNotStore():

val response = apolloClient.query(query)
// Don't cache this query
.httpDoNotStore(httpDoNotStore = true)
.execute()

Clearing the cache

Call apolloClient.httpCache.clearAll() to clear the cache of all entries.

Previous
ApolloStore
Next
Troubleshooting
Edit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc.

Privacy Policy

Company