GraphQL + Apollo 请求
Posted
技术标签:
【中文标题】GraphQL + Apollo 请求【英文标题】:GraphQL + Apollo requests 【发布时间】:2019-07-23 13:19:33 【问题描述】:如果我有一个使用 GraphQL + Apollo + React 构建的应用程序,只是想知道我是否在页面上说 3 个组件,每个组件进行不同的查询,这是否意味着将从客户端发出 3 个请求到server 和 3 将被退回?当我收集 GraphQL 将 API 调用压缩为 1 个请求时,有点迷失了它的工作原理,但是在上述场景中,从客户端到服务器的请求,然后服务器返回到客户端,它是如何工作的?
【问题讨论】:
【参考方案1】:来自docs:
查询重复数据删除有助于减少通过网络发送的查询数量。默认情况下它是打开的,但可以通过将 queryDeduplication: false 传递给每个请求的上下文或使用 Apollo 客户端设置上的 defaultOptions 键来关闭它。如果打开,查询重复数据删除发生在查询到达网络层之前。如果许多组件显示相同的数据,但您不想从服务器多次获取该数据,则查询重复数据删除可能很有用。它通过将查询与当前正在运行的所有查询进行比较来工作。如果当前正在运行相同的查询,则新查询将映射到相同的 Promise 并在当前正在运行的查询返回时解决。
换句话说,只要您没有将queryDeduplication
显式设置为false
,Apollo 将跳过与任何正在进行的请求匹配的请求。
虽然 GraphQL 提供了在同一个请求中发送多个查询的能力(并且 Apollo 支持这种能力),但编写这样的查询由您自己决定——GraphQL 不会自动为您执行此操作.为了使用 Apollo 将多个查询批处理成一个请求,您必须使用 apollo-link-batch-http。
【讨论】:
以上是关于GraphQL + Apollo 请求的主要内容,如果未能解决你的问题,请参考以下文章
Apollo GraphQL:用于查询返回不同类型对象的模式?
我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq