加入我们,从10月8日至10日在纽约市,了解Graphql Federation和API平台工程的最新技巧、趋势和新闻。加入我们,参加2024年纽约市的GraphQL峰会
文档
免费开始
您正在查看此软件旧版本的文档。 切换到最新稳定版本。

ApolloStore


公开了ApolloStore API,以编程方式从正常化的缓存中读取和写入。该ApolloStore构建在NormalizedCache之上,提供了一个线程安全的API,以及使读取和写入更简单的

该存储可以通过ApolloClient.apolloStore扩展访问:

val apolloClient = ApolloClient.Builder()
.serverUrl("https://...")
.normalizedCache(MemoryCacheFactory(maxSizeBytes = 10 * 1024 * 1024))
.build()
val apolloStore: ApolloStore = apolloClient.apolloStore

读取操作数据

就像一个普通的查询一样,使用商店的主要方式是读取和写入查询:

给定以下query:

query GetBook($id: String!) {
book(id: $id) {
title
author {
name
}
}
}

您可以这样读取它

val data = apolloClient.apolloStore.readOperation(GetBookQuery(id = "42"), apolloClient.customScalarAdapters)
println("Title=${data.title}")
println("Author Name=${data.author.name}")

在缓存缺失的情况下,readOperation将抛出异常:

try {
apolloClient.apolloStore.readOperation(GetBookQuery(id = "42"), apolloClient.customScalarAdapters)
} catch(e: CacheMissException) {
println("CacheMiss on key: ${e.key}.${e.fieldName}")
}

如果您在运行时声明了标量适配器,将您的客户端customScalarAdapters传递给商店的方法,因为商店需要它们将值转换为Kotlin/Java类型。

写入操作数据

写入数据与读取相似:

apolloClient.apolloStore.writeOperation(GetBookQuery(id = "42"), data, apolloClient.customScalarAdapters)

请注意,您需要将数据传递给操作。

读取和写入片段

GraphQL规范中,片段始终是更大操作的一部分,不能独立执行。

fragment BookDetails on Book {
id
title
author {
name
}
}

Apollo Kotlin对此规则做出了例外,并允许读取/写入单独的片段。默认情况下,此功能是禁用的,可以启用generateFragmentImplementations

apollo {
service("service") {
generateFragmentImplementations.set(true)
}
}

由于片段没有根节点,您需要指定片段的根缓存标识符:

val data = apolloClient.apolloStore.readFragment(BookDetailsImpl(), CacheKey("42"), apolloClient.customScalarAdapters)
println("Title=${data.title}")
println("Author Name=${data.author.name}")

可以包含。不同变量不同的片段可以返回不同的数据。在这种情况下,Impl类将需要变量作为构造函数参数:

fragment BookDetails on Book {
id
title(locale: $locale)
}
val data = apolloClient.apolloStore.readFragment(BookDetailsImpl(locale = "en-US"), CacheKey("42"), apolloClient.customScalarAdapters)
println("Title=${data.title}")

清除缓存

调用apolloClient.apolloStore.clearAll()来清除所有条目的缓存。

上一页
监视缓存数据
下一页
HTTP缓存
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.(即Apollo GraphQL)。

隐私政策

公司