Join us from October 8-10 in New York City to learn the latest tips, trends, and news about GraphQL federation and API platform engineering.Join us for GraphQL Summit 2024 in NYC
Docs
Start for Free
You're viewing documentation for a previous version of this software. Switch to the latest stable version.

HTTP cache


Apollo Android provides two different kinds of caches: an HTTP cache and a normalized cache. The HTTP cache is easier to set up but also has more limitations. 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.

HTTP cache

To enable HTTP cache support, add the dependency to your project's `build.gradle file. The latest version is

Maven Central

build.gradle
dependencies {
implementation("com.apollographql.apollo:apollo-http-cache:x.y.z")
}

Raw HTTP response cache

Kotlin
// Directory where cached responses will be stored
val file = File(cacheDir, "apolloCache")
// Size in bytes of the cache
val size: Long = 1024 * 1024
// Create the http response cache store
val cacheStore = DiskLruHttpCacheStore(file, size)
// Build the ApolloClient
val apolloClient = ApolloClient.builder()
.serverUrl("/")
.httpCache(ApolloHttpCache(cacheStore))
.okHttpClient(okHttpClient)
.build()
// Control the cache policy
val query = FeedQuery(limit = 10, type = FeedType.HOT)
val dataResponse = apolloClient.query(query)
.httpCachePolicy(HttpCachePolicy.CACHE_FIRST)
.toDeferred()
.await()
Java
//Directory where cached responses will be stored
File file = new File(cacheDir, "apolloCache");
//Size in bytes of the cache
long size = 1024*1024;
//Create the http response cache store
DiskLruHttpCacheStore cacheStore = new DiskLruHttpCacheStore(file, size);
//Build the ApolloClient
ApolloClient apolloClient = ApolloClient.builder()
.serverUrl("/")
.httpCache(new ApolloHttpCache(cacheStore))
.okHttpClient(okHttpClient)
.build();
apolloClient
.query(
FeedQuery.builder()
.limit(10)
.type(FeedType.HOT)
.build()
)
.httpCachePolicy(HttpCachePolicy.CACHE_FIRST)
.enqueue(new ApolloCall.Callback<FeedQuery.Data>() {
@Override public void onResponse(@NotNull Response<FeedQuery.Data> dataResponse) {
...
}
@Override public void onFailure(@NotNull Throwable t) {
...
}
});

IMPORTANT: Caching is provided only for query . It isn't available for mutation operations.

There are four available cache policies HttpCachePolicy:

  • NETWORK_ONLY - Fetch a response from the network only, ignoring any cached responses. This is the default.
  • CACHE_ONLY - Fetch a response from the cache only, ignoring the network. If the cached response doesn't exist or is expired, then return an error.
  • CACHE_FIRST - Fetch a response from the cache first. If the response doesn't exist or is expired, then fetch a response from the network.
  • NETWORK_FIRST - Fetch a response from the network first. If the network fails and the cached response isn't expired, then return cached data instead.

For CACHE_ONLY, CACHE_FIRST and NETWORK_FIRST policies you can define the timeout after what cached response is treated as expired and will be evicted from the http cache, expireAfter(expireTimeout, timeUnit).`

Previous
Normalized cache
Next
Persisted queries
Rate articleRateEdit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc.

Privacy Policy

Company