缓存嵌套结果

时间:2017-11-17 09:41:55

标签: graphql apollo

在我的应用中,用户可能会请求哪些朋友执行了特定操作:

query($id: Int) {
  post(id: $id) {
    likes {
      id
      name
      photo
    }
  }
}

但这意味着为不同的帖子重新获取相同对象的id,名称和照片数据(因为服务器不知道我已经缓存了什么)。我可以使用什么策略来尝试利用缓存?

我只能想到的是在上面的查询中我只请求id字段并对名称和照片进行单独查询并尝试批量处理。

1 个答案:

答案 0 :(得分:0)

GraphQL中没有内置方法可以在返回的同一结果对象图中共享对象。你实际上回答了自己的问题。通过使用ID规范化对象的结果图,它确实减少了您要传输回客户端的JSON数量。但是,它要求客户端以不同的方式请求数据。例如,

query($id: Int) {
  post(id: $id) {
    likes {
      id
    }
  }
  likesByPostId(postId: $id) {
    id
    name
    photo
  }
}

在GraphQL中,我们让客户决定如何优化数据获取。服务器只返回客户端请求的形状的数据。所以你无法真正为客户做出决定。