首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GraphQL + Apollo -如何强制执行查询,出现正在缓存的内容

GraphQL是一种用于API开发的查询语言和运行时环境。它允许客户端精确地指定需要的数据,并且可以减少网络传输量和减少多次请求的需求。Apollo是一个用于构建GraphQL客户端的开源工具集,它提供了一些强大的功能,如缓存管理和本地状态管理。

在GraphQL中,查询是由客户端发起的,而服务器负责解析和执行这些查询。当客户端发起一个查询时,Apollo会首先检查缓存中是否已经存在相应的数据。如果缓存中已经存在数据,Apollo会直接返回缓存中的内容,而不会向服务器发送请求。这样可以提高性能并减少网络传输。

然而,有时候我们希望强制执行查询,即使缓存中已经存在相应的数据。这可能是因为我们需要获取最新的数据,或者因为我们希望确保数据的一致性。在GraphQL中,我们可以通过设置fetchPolicy参数来实现强制执行查询。

fetchPolicy参数有几个可选值,其中包括:

  • cache-first:默认值,Apollo首先检查缓存中是否存在数据,如果存在则直接返回缓存中的数据,否则向服务器发送请求。
  • cache-and-network:Apollo首先检查缓存中是否存在数据,如果存在则直接返回缓存中的数据,并且同时发送请求获取最新的数据。
  • network-only:Apollo直接发送请求获取最新的数据,不使用缓存。
  • cache-only:Apollo只使用缓存中的数据,不发送请求。

如果我们希望强制执行查询,可以将fetchPolicy参数设置为network-only,这样Apollo会直接发送请求获取最新的数据,而不会使用缓存中的数据。

以下是一个示例代码:

代码语言:txt
复制
import { gql, useQuery } from '@apollo/client';

const GET_DATA = gql`
  query GetData {
    // 查询内容
  }
`;

function MyComponent() {
  const { loading, error, data } = useQuery(GET_DATA, {
    fetchPolicy: 'network-only',
  });

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error :(</p>;

  // 处理数据
  return <div>{/* 数据展示 */}</div>;
}

在上面的示例中,我们使用了useQuery钩子函数来执行查询,并将fetchPolicy参数设置为network-only,以强制执行查询并获取最新的数据。

对于GraphQL和Apollo的更多详细信息和使用方法,你可以参考腾讯云的GraphQL产品介绍Apollo产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GraphQL最突出架构优势是什么?

最后,它将我们关注点转向了应用程序和特定于域内容。这些内容是不能直接从市场购买或下载。 2基础架构组件 GraphQL 服务器和 HTTP 服务器都属于基础架构组件。...Apollo-link-state(现已直接放入 Apollo Client 2 和 3 中)让开发人员可以编写几乎同时解决远程状态和本地状态查询。远程状态(位于服务器上)感觉比之前近多了。...由于 GraphQL 语言是通行(ubiquitous)且标准化,因此人类 和机器 会更容易理解如何集成和使用它。...6关注点扩展和分离 GraphQL 原则指出, “你公司应该有一个统一图,而不是让各个团队创建很多图。” 随着越来越多团队开始使用 GraphQL,公司内部会出现多个图情况。...在架构层面,由于 GraphQL 仅向客户端公开单个端点,因此它满足了这一原则。 客户端隐藏了字段解析机制所有复杂性,它只需关注如何GraphQL 服务器之上构建即可。

2.1K20

你还在用 REST API 吗?

除此之外,它还允许我们将不同实体组合到单个查询中。 GraphQL 优势 检索精确数据,无任何多余数据。在 GraphQL 中,可以得到我们所请求内容,这是一个很大优势。...GraphQL 劣势 对于简单应用程序来说,设置类型、查询等可能有点 复杂,因为使用 REST 可以很容易地完成。 它使用是 单个端点,而不是遵循 HTTP 规范进行缓存。...在网络级别进行缓存是很重要,因为它可以减少到服务端流量。 两者对比简单示例 例如,我们正在显示用户供稿,其中包含用户帖子及其关注者列表。...自动缓存 REST 能自动生效缓存,而 GraphQL 则没有自动缓存系统,但是可以借助 Apollo Client、Relay 等客户端实现缓存。...错误处理 REST 中错误处理比 GraphQL 简单得多,GraphQL 通常会给我们一个 200 OK 状态码,即使已经出现错误了。

1.5K10

怎样使用 apollo-link-state 管理本地数据

解决问题基础 我们知道这个问题需要解决,现在让我们思考一下,如何正确地在 Apollo Client 中管理状态?...事实上,GraphQL 具有很强灵活性。GraphQL 并不在乎请求是要发送给一个 gRPC 服务器,或是 REST 端点,又或是客户端缓存。...Apollo Link 使得在 Apollo Client 中管理本地数据成为可能,从一个 GraphQL 服务器中获取数据,可以使用 HttpLink,而从 Apollo 缓存中请求数据,则需要使用一个新...尽管不是必需参数,不过预热缓存是一个很重要步骤,传入 default 使得组件不会因为查询不到数据而出错。 . 以上代码 defaults 代表了 Apollo cache 初始值。...Resolvers 在使用 Apollo Client 管理应用状态后,Apollo cache 成为了应用单一数据源,包括了本地和远端数据。那么我们应当如何查询和更新缓存数据呢?

2.3K100

在 redux 应用中使用 GraphQL

在开始本教程之前,请确保: 了解基本 GraphQL 查询——如果 GraphQL 对您来说完全是陌生,您需要先学习此教程。...客户端正在运行,现在是开始添加 GraphQL 客户端时候了。我们目标是使用 GraphQL 查询,从服务器轻松获取数据并将其呈现在着陆页(HomeView)中。 3....在我们 GraphQL 服务器中,并没有定义如何获取 authors。...接下来 这篇教程只探索了 GraphQL 一小部分,还有许多内容尚未涉及,比如在服务端更新数据或者使用其他服务端(如 Rails)。...不过我准备在后续教程中介绍这些内容,您可以阅读 Sashko 文章 或者 Apollo Client 文档来更好理解 GraphQL 原理 (比如,当我们把 Provider 替换成 ApolloProvider

1.9K10

GraphQL项目中前端如何预生成Persisted Query

但是不足地方就在于, 没有办法使用http cache, HTTP 缓存 - HTTP | MDN /虽然 HTTP 缓存不是必须,但重用缓存资源通常是必要。...Automatic persisted queries - Apollo Server - Apollo GraphQL Docs 简单翻译一下就是, 一个短dash代替一个超长graphql schema...预生成persisted query 刚刚我们介绍了, 如何在使用过程中生成. 但是如何预生成呢? 也就是, 在前端部署过程中或者是在访问页面之前就已经生成好....简单来说, 还是为了更好优化, 试想一下, 如果我已经可以将一个大量访问schema变动提前缓存起来, 并且准备好这份数据, 当前端访问时候, 我直接将这份缓存数据扔给前端, 而不是再在后台重新查询拼接...这样设想完成起来, 需要解决一个最主要问题, 后端如何在前端没有访问时候提前预知schema?

99120

GraphQL是API未来,但它并非银弹

例如,如果你使用像 Next.JS 这样框架,结合 swr hooks(stale while revalidate),你就可以直接使用 Etags 自动缓存缓存失效。...只需要返回你需要数据即可。同样,使用像 Next.JS 这样全栈框架更容易实现这一点,缓存也更容易,同时你还免费获得了基于 Etag 缓存失效。...当你允许开发人员部署 REST API 而又没有发布接口定义规范(Open API specification,OAS)或类似的内容时,就会遇到他所描述那种问题。...但是,GraphQL 模式是如何保证呢? GraphQL 内省是向服务器发送一个特定 GraphQL 查询以获取关于 GraphQL 模式信息。...GraphQL 服务器可以自由地使用它期望任何类型进行响应。如果你发送一个查询,则服务器响应可以不符合自省响应中 GraphQL 模式。以 Apollo Federation 为例。

2K10

前端开发使用GraphQL——VUE3使用GraphQL

之前一直都是使用vue2,最近有新项目使用了vue3,这里记录下在vue3环境下,使用GraphQL一些经验。如果你使用是vue2,建议直接使用vue-apollo组件。 1....前端开发使用GraphQL——Nestjs/GraphQL项目搭建 背景 新项目采用了vue3开发,而目前vue对应QraphQL模块vue-apollo对使用typescript开发vue3...框架支持不是很好(目前正在开发Vue Apollo 4 将支持 Vue 3),没法利用typescript来检查GraphQL接口拉回来数据,这里记录一下处理这些问题方式。...// 你需要在这里使用绝对路径 uri: 'http://localhost:3000/graphql', }) // 缓存实现 const cache = new InMemoryCache...后面我们就可以使用这些type去校验GraphQL接口返回内容

3.9K20

用TS+GraphQL查询SpaceX火箭发射数据

本文假设你对 React,GraphQL 和 TypeScript 有一定了解,并且正在研究怎样通过把它们集成在一起来构建一个正常运行程序。...apollo-boost 包含了查询 API 和在内存中缓存数据所需工具, react-apollo 为React提供绑定, react-apollo-hooks 在 React Hook 中包装了...Apollo 查询graphql-tag 用于构建我们查询文档, graphql 是一个对等依赖项,它提供了 GraphQL 实现细节。...我们能够编写与使用它们组件并存查询,并且 UI 能够准确地请求它要呈现内容。 在使用 REST API 时,我们所能找文档有可能不是最新。...如果 REST 出现什么问题,我们需要用 console.log 配合来调试数据。 GraphQL 允许你通过访问 URL 查看完全定义模式,并在 UI 中执行针对它请求,从而解决了这个问题。

3K20

GraphQL在现代Web应用中应用与优势

GraphQL是一种现代API查询语言,它在现代Web应用中得到了广泛应用,因为它提供了一种高效、灵活且强大方式来获取数据GraphQL基础快速应用示例:1....前端设置(使用Apollo Client)接着,我们需要在前端应用中配置Apollo Client,与我们GraphQL服务器通信:npm install apollo-boost @apollo/client...查询语言:查询、突变、订阅在GraphQL中,查询和突变是通过JSON-like结构表示字符串。...下面展示如何使用一个自定义@auth指令来控制访问权限。首先,假设我们定义了一个@auth指令,用于限制对某些字段访问,要求用户必须登录。...缓存优化:客户端可以根据返回数据结构更容易地进行缓存策略实施。减少后端复杂性:后端不再需要为了适应不同客户端需求而创建多个API端点。

6110

面对极度复杂前后端业务场景,使用 GraphQL 正确姿势

内容来源:2018 年 06 月 09 日,有数派联合创始人周文宇在“杭州第一届 GraphQLParty—GraphQL与领域驱动带来协同价值”进行《Stratup使用GraphQL姿势》演讲分享...阅读字数:6109 | 16分钟阅读 摘要 本次演讲主要介绍如何使用GraphQL,分别从前后端两个角度分析GraphQL优劣势,对比Restful又能够给前后端协同开发带来哪些好处。...Relay数据缓存由官方提供RelayStore完成,Apollo则是基于Redux。基于以上几点考虑,我最终选择了Apollo。...这意味着Component不再是为了请求而定义,而是根据对象类型来定义 过于依赖Fragment导致性能问题(前端) 我们在使用GraphQL 过程中曾出现过一次非常大性能问题。...先来看看GraphQL还有那些弊端。 第一,虽然后端已经做了一些优化,但是还是没有完全实现前端按需查询,当数据量达到一定级别的时候,数据库查询可能会成为性能瓶颈。

7.4K20

GraphQL 查询 Django 应用

先来看看 wikipedia: GraphQL 是一个开源,面向 API 而创造出来数据查询操作语言以及相应服务端运行环境。...GraphQL 首先是一种查询语言,它定义了一种通用数据查询方式,可以理解为一种通用 SQL,只不过前者面向抽象数据集,后者往往是具体关系型数据库。...相较于原生 GraphQL ,客户端主要解决了几件事情: 客户端数据拉取缓存问题(包括缓存一致性、更新缓存等) 数据分页、声明式数据获取 ......主流客户端框架主要有两种—— Relay 和 Apollo ,我们仅从有限角度来看下二者异同: Relay vs Apollo Relay Apollo 框架支持 仅支持 React, React...Django 默认查询能力,对于一些特殊字段并不能完全覆盖需求,这时我们就需要针对这些内容手写一些处理逻辑。

2K60

设计通过 POST 获取数据 API 时需要注意问题

这时 GraphQL[5] 就应运而生了,这是由 Facebook 提出开源语言标准,通过 Schema 定义资料,再依靠与 JSON 格式高度类似的查询语句取得查询结果,它主要特点是: 強类型...查询语句即文件 查询语句即响应数据结构,不会有冗余内容 统一对外入口 可以多查询合并,一起返回 这些特性有效解决了 RESTful API 在复杂架构下问题,使 GraphQL 充满弹性、非常好用...,社区也已经有了庞大生态系统支持,例如 Apollo GraphQL[6] 可以与三大框架深度整合,再加上多查询合并特性,让 GraphQL 与现代框架中组件概念完美契合。...值得注意GraphQL 发出全部都是 POST 请求,缓存机制必须仰赖开发者或是框架实现;例如在 Apollo Client 中,开发者必须按照应用场景,调整 fetchPolicy 设置,避免快取造成意外结果...: https://graphql.org/ [6] Apollo GraphQL: https://www.apollographql.com/

1.6K30

写在 2021: 值得关注学习前端框架和工具库

正在考虑把博客迁移到GatsbyJS + CMS方案,这样随便找一台电脑就能写博客了。...强大地方在于实现了一套GraphQL缓存方案(GraphQL不像REST API那样可以用URL作为缓存key,它只有单个schema,要缓存必须基于Schema拍平整个数据结构,然后再基于各个field...GraphiQL[45],可视化GraphQL API调试工具,直观查看你Schema、发起请求、查看问题,有一个增强版本是支持通过点击单选框生成查询语句,一时没找到。...在TS中这个工具主要能力就是生成TS类型定义,同时它插件体系还提供了更多额外能力,如Apollo-Client插件,让你可以直接使用封装好useXXXQuery等,前端连查询语句都不用写了...生成GraphQL Schema、API、查询语句(Query/Mutation/Subscription都支持,并且是根据你Schema组合来)等,可以说是非常猛了。

4.2K10

React 设计模式 0x6:数据获取

学习如何轻松构建可伸缩 React 应用程序:数据获取 # React 中服务端数据获取方式 在大多数 React 应用程序中,应用程序需要来自 API 或服务器数据才能正常运行。...GraphQL 是用于 API 查询语言,也是用现有数据来满足这些查询运行时。...向您 API 发送 GraphQL 查询,只获取您所需数据,没有多余内容。...GraphQL 查询总是返回可预测结果,使用 GraphQL 应用程序速度快且稳定,因为它们控制获取数据,而不是由服务器来控制。...# Memoization Memoization 是一种优化技术,主要用于通过存储昂贵函数调用结果,并在再次出现相同输入时返回缓存结果来优化计算机程序。

1.2K20

记一次通过c#运用GraphQL调用Github api

GraphQL 既是一种用于 API 查询语言也是一个满足你数据查询运行时。...二、.net下如何运用GraphQL   由于我需要做一个定时任务将github上数据定时拉到本地,所以自然选择了后端处理方式。...四、结语   最后附带提一下,GraphQL出现,主要场景还是在于赋能前端开发,赋予了前端开发者自由组织和定制请求数据能力。...目前前端非常火热GraphQL框架也不少,主流就是下面2个: apollo(https://github.com/apollographql/apollo-client)、relay(https:/...GraphQL虽好,但是要真正在中大型项目中运用GraphQL,还有有很大困难,服务端需要支持到GraphQL规范格式进行数据输出,我认为需要付出成本可不小。

1.3K20

构建带 Subscriptions graphql golang 后端

GraphQL提供了一种灵活而有效方式来查询服务器中数据。 它正在成为设计后端流行技术,通常会替换或封装一些不灵活REST API,并让客户负责决定他们需要数据。...现在有许多用于编写JavaScriptGraphQL客户端和服务器库和框架,其中最着名Apollo和Graphcool 。...Apollo团队还开发了针对WebSocketsGraphQL协议,该协议主要用于Apollo Client和Graphcool中Subscriptions。...以下代码示例显示了订阅管理器在任何时候如何检索订阅。 他们按照他们关系分组。 每个连接都有唯一ID,可选地,还有前面描述Authenticate函数返回用户。...如果您正在寻找下一个项目的React或GraphQL开发方面的帮助,我们很乐意在Functional Foundry处听到您消息。

2.7K30

你不知道 GraphQL

如果你项目正处于技术选型,你正在犹豫选择一种接口风格时刻,不妨了解一下这个神奇而强大玩意儿~~ 本文打算翻译一篇感觉很解惑文章,主要围绕着GraphQLserver端实现,因为相比client...端,server端包含了更多内容。...后面如果有机会,也会尝试提供关于client端相关内容,不过前端同学可以先看一下这里:howtographql[1],这里有各种最佳实践,应该总会找到和你正在使用相关前端框架整合方案,好像有个对应中文版...如何让我们服务能支持复杂聚合查询呢?...把resolver定位为一个纯函数,是GraphQL设计者们另一个明智之举。 查询引擎集成化测试 那么,如何来测试数据依赖,类型和聚合逻辑呢?

3.3K20
领券