当前位置: 首页 > 知识库问答 >
问题:

Apollo Client 3:如何在客户端为graphql接口实现缓存?

丌官承
2023-03-14

我有一个例子,其中我有一个接口,它在graphql中定义了不同的类型实现。我可能无法共享确切的代码。但情况似乎是这样的:

interface Character {
  name: String!
}
type Human implements Character {
  name: String!
  friends: [Character]
}

type Droid implements Character {
  name: String!
  material: String
}

有一个查询返回人类Droid类型作为响应。

响应可能包含以下内容:

{
  name: 'Human_01',
  friends: []
  __typename: 'Human'
}

{
  name: 'Droid_01',
  material: 'Aluminium'
  __typename: 'Droid'
}

我在客户端使用Apollo Client 3来查询数据,并有如下片段:

fragment Human on Human {
 friends
}

fragment Droid on Droid {
 material
}

fragment Character on Character {
  name
  ...Human
  ...Droid
}


我查询的字符数据为:

 character {
  ...Character
 }

由于这是接口的情况,正如Apollo client 3文档中所定义的,我们需要使用可能类型,以便在这种情况下匹配片段。出于缓存目的,我在MemoryCache中定义为:

new InMemoryCache({ possibleTypes: { Character: ['Human', 'Droid'] } })

Character实现的主键字段是name字段,我需要使用它来将其值存储在缓存中。

在Apollo client 3中,提到使用TypePolicys来定义类型的keyFields

因此,我需要询问是否应该为这两种类型实现定义类型策略,在这两种情况下都将keyFields指定为name,例如:

new InMemoryCache({ 
    possibleTypes: { Character: ['Human', 'Droid'] }, 
    typePolicies: { Human: { keyFields: ['name'] }, Droid: { keyFields: ['name'] } } 
});

在我的例子中,我只提供了2个这样的类型实现,但是可以有n个类型实现对应于Character接口。因此,在这种情况下,我将需要将keyFields定义为所有n类型实现的typePolicies中的name

那么,有没有更好的方法来实现这些类型的接口实现?

任何帮助都将不胜感激。谢谢


共有1个答案

毕嘉
2023-03-14

类型和字段策略的继承将出现在@apollo/client,v3的下一个次要版本中。3.

您现在可以通过安装@apollo来试用它/client@3.3.0-贝塔。5

了解v3的最新进展。3释放,请参阅此拉动请求。

 类似资料:
  • 我想知道以下问题的答案: 1)如果Ignite服务器重新启动,我需要重新启动客户端(web应用程序)。是否有任何方法可以在服务器重新启动时重新连接到服务器。我知道当服务器重新启动时,它分配了一个不同的ID,因此当前现有的连接变得过时。是否有方法克服这个问题,如果是的话,哪一个版本的Ignite支持这个功能。目前我使用1.7版本 3)如果我有一个大对象要缓存,我发现序列化和反序列化在Ignite中需

  • 我有一个示例Spring启动应用程序来运行图形QL服务器,具有作为客户端,我的pom有以下依赖项: 当我尝试从客户端连接时,出现以下错误: 狩猎决议好心建议。 我还有几个问题: 我应该使用SimpleGraphQLHttpServlet将请求路由到endpoint吗 我正在React UI上使用apollo client,那么它是强制使用apollo server还是spring boot可以工作

  • 我正在使用Quarkus中的MicroProfile REST客户端,想知道如何对自定义客户端接口进行单元测试? 示例服务: 是否可以编写包含此功能的单元测试?例如。我想测试请求主体是否得到了正确的处理,是否包含了正确的JSON(特别是因为我遇到了JVM和本机映像模式之间行为不同的问题)。 REST服务器资源可以很容易地用REST保证测试,但是我没有发现REST客户机接口有类似的情况。 有什么建议

  • 问题内容: 我正在寻找GraphQL 的Java 客户端 库。两者均用于Java中的服务器到服务器通信。没有android,没有javascript …只是java。Apollo是最接近的答案,似乎仅适用于Android,而不适用于纯Java应用程序。有很多关于用Java构建服务器的例子,没有关于客户端的例子。任何想法?谢谢! 问题答案: 有几个可用的客户,都采用不同的方法。 Apollo And

  • 我做了一个简单的项目来测试 EJB3 实现。 使用maven我在项目中创建了3个模块,分别是“MyEjb”EJB,“MyWeb”这场战争,“MyWeb2”另一场战争。战争模块是EJB的客户端。 问题是,当我部署EAR时,控制台显示有3个EJB上下文,每个模块创建一个。模块MyEjb的EJB上下文不在wars模块之间共享,每个模块都从自己的MyEjb依赖项中获取数据。 我必须在一个单独的JAR中创建

  • gRPC客户端流媒体/双向流媒体是如何使用HTTP/2实现的 服务器流媒体是有意义的,因为它可以利用服务器推送来发送对请求的多个响应,但我不清楚它如何像通过websocket那样通过HTTP/2进行双向消息传递。