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

阿波罗/ GraphQl -单一实体突变不更新缓存(数据库更新)

阿波罗(Apollo)是一个开源的GraphQL解决方案,GraphQL是一种用于API的查询语言和运行时环境。GraphQL的一个关键特性是可以通过单一请求获取多个数据源的数据,而不需要多次请求。阿波罗作为一个GraphQL客户端,可以帮助开发者更方便地使用GraphQL。

在阿波罗中,突变(Mutation)是一种用于修改数据的操作。当进行突变操作时,有时候我们希望只更新缓存而不更新数据库。这种情况下,可以通过在突变操作中使用update函数来实现。

update函数是阿波罗提供的一个用于更新缓存的方法。通过在突变操作中使用update函数,我们可以手动更新缓存中的数据,而不触发数据库的更新。具体使用方法如下:

  1. 首先,在突变操作的update函数中,指定要更新的缓存数据的查询条件。
  2. 然后,在update函数中,指定要更新的数据。

以下是一个示例突变操作的代码:

代码语言:txt
复制
const { gql } = require('apollo-server');
const { ApolloServer } = require('apollo-server');
const { InMemoryCache } = require('apollo-cache-inmemory');
const { ApolloLink } = require('apollo-link');
const { HttpLink } = require('apollo-link-http');

// 定义突变操作的GraphQL类型和查询语句
const typeDefs = gql`
  type Mutation {
    updatePost(id: ID!, title: String!): Post
  }

  type Post {
    id: ID!
    title: String!
  }
`;

// 实现突变操作的逻辑
const resolvers = {
  Mutation: {
    updatePost: (_, { id, title }, { cache }) => {
      const data = {
        Post: {
          __typename: 'Post',
          id,
          title
        }
      };

      // 更新缓存数据
      cache.writeData({ data });

      // 返回更新后的数据
      return data.Post;
    }
  }
};

// 创建Apollo Server实例
const server = new ApolloServer({
  typeDefs,
  resolvers,
  cache: new InMemoryCache(),
  link: ApolloLink.from([
    new HttpLink({ uri: 'http://example.com/graphql' })
  ])
});

// 启动Apollo Server
server.listen().then(({ url }) => {
  console.log(`Server ready at ${url}`);
});

在上述代码中,updatePost突变操作接收idtitle参数,并通过cache.writeData方法更新缓存中的数据。然后,返回更新后的数据。

这样,当执行updatePost突变操作时,只会更新缓存中的数据,而不会触发数据库的更新。

推荐的腾讯云相关产品和产品介绍链接地址:

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行评估和决策。

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

相关·内容

超越 REST

许多组织都在拥抱 GraphQL,以其作为统一企业范围内数据模型的一种方式,并提供了一个用其相关实体网络来导航大量结构化数据的单一入口点。...这种努力值得称赞,但往往需要内部组织之间历经几个季度的协调,然后将所有相关实体开发并集成到一个单一的单体图中。...具体来说: 使用数据库视图作为“API 层”来保持灵活性,以允许在不变更现有 GraphQL 模式(构建在数据库视图上)的情况下修改表。...通过允许 GraphQL 客户端“所用权限”(“full access”)自动生成的 GraphQL 查询和 Graphile 生成的突变(在所有表和视图上公开的 CRUD 操作)来提高灵活性;然后在开发过程的后期...我们在启用 pgWatch 的情况下运行 Graphile,只要对数据库做任何更新GraphQL 模式就会立即更新以反映所做的更改。

2.9K20

「首席架构师推荐」React生态系统大集合

GraphQL规范 GraphQL工具 GraphQL教程 GraphQL实现 服务器集成 数据库集成 Relay 中继一般资源 中继教程 中继工具 Apollo Apollo综合资源 影片 重要会谈...服务器集成 express-graphql - 使用Express创建GraphQL HTTP服务器 graphql-yoga - 运行GraphQL服务器的最简单方法 数据库集成 Hasura -...GraphQL ORM sql-to-graphql - 根据您的SQL数据库结构生成GraphQL API graphql-sequelize - 通过Sequelize实现MySQL和Postgres...脚本,用于更新中继API Apollo 基于GraphQL的数据堆栈 阿波罗综合资源 阿波罗官方网站 Apollo GitHub 阿波罗博客 Apollo Slack Apollo工具 react-apollo-redux...- 一个小包装器,用于响应阿波罗突变自动发送动作 影片 reactjsvideos.com 重要会谈 Pete Hunt:React:重新思考最佳实践 - JSConf EU 2013 Pete Hunt

12.3K30

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

查询语言:查询、突变、订阅在GraphQL中,查询和突变是通过JSON-like结构表示的字符串。...查询根和突变根接下来,定义GraphQL的查询根(Query)和突变根(Mutation)类型,它们是客户端请求数据和修改数据的入口点。type Query { user(id: ID!)...GraphQL FederationFederation允许构建由多个服务组成的单一GraphQL API。...减少错误:客户端定义查询结构,服务器返回预期的形状,降低了由于接口匹配导致的错误。更好的API设计:强类型系统确保了数据的一致性和正确性,使得API更加易于理解和维护。...缓存优化:客户端可以根据返回的数据结构更容易地进行缓存策略的实施。减少后端复杂性:后端不再需要为了适应不同客户端的需求而创建多个API端点。

6110

数据库由浅入深

这是第 414 篇掺水的原创,想要了解更多,请戳下方卡片关注我们吧~ 一、什么是图数据库 1.1概念 1.2安装部署 二、Dgraph基本语法 2.1 Dgraph4j 2.3设置 schema...2.4查询 2.5突变 2.6数据监视 三、股权关系探索 四、图数据库的应用场景 五、参考资料 一、什么是图数据库 1.1概念 世间万物互联,关系无处不在。...Dgraph 中的节点数据 uid 是唯一的,因此,如果突变过程中,传入指定的 uid,如果数据库内有数据就进行更新操作,没有数据就进行新增操作;如果传入指定的 uid,那么节点 uid 就会由 Dgraph...2.6数据监视 如果想要在数据发生变化(添加/更新/删除)时进行监听,可以使用 @lambdaOnMutate 指令。...要设置一个 lambda webhook,需要在 GraphQL schema 中使用 @lambdaOnMutate来定义,并定义要监听的突变时间(添加、更新、删除),但是只能监听根节点的突变

20910

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

当时我们的产品已经推出有一段时间了,数据库非常庞大,功能也很繁杂,而且数据完全是基于Restful。此时需要将Restful完全替换成GraphQL,这无疑对前后端来说都是一个非常大的挑战。...在跟换轮子之前,我先比较了一下前端数据缓存的框架,目前主流的有Relay和Apolloo。...在登录过程中产生的token缓存到App AsyncStorage或web localStorage中,注册GraphQL Server的时候通过outLink来setContext,setContext...当用户发现设备版本和服务器版本存在差异,执行需要更新的时候,本质上是发送动态操作到GraphQL API层,然后由GraphQL API层发送消息到设备 ,之后消息通过SDK API到达MQTT,接着发布一系列的请求到设备...以上这种情况对于前端来说,操作的只是某个实体的一个或几个资源字段。但是对于后端来说,每个实体背后可能对应着不同的数据库甚至不同类型的存储集群,同时后端集群间的海量数据自由join得到的结果。

7.3K20

2020-5-6-restful理解

web应用当然也例外。 假设我们现在有如下的模型,两个同学,A和B。他有name和age两个属性,其中name字段全局唯一。 ? 那么对于这个模型,如果我们在数据库创建一张表,该如何表示呢? ?...很多文章里面提到了无状态,可缓存等等。这些的确是RESTful的好处,但是我认为最大的优势还是模型和表示的关注点分离。即uri只负责模型,Content Negotiation负责表示。...这种情况的大部分成因是,后续版本增加了模型字段,查询参数或者是重命名名称等等,造成了和现有API的兼容。...(注意:这里大部分情况下,不同版本API对应的后端数据库的模型还是一致的,否则启用新的API,而不是更新版本) 所以这还是同一个模型,不同表现形式的问题。...A query language for your API](https://graphql.org/) ---- 本文会经常更新,请阅读原文: https://xinyuehtx.github.io

47420

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

Alistair Cockburn 的“六边形架构” 我非常赞同这种类型的架构,因为它使我们能够: 直到真正有必要做出决策时,才决定到底采用哪种类型的 Web 服务器、数据库、事务电子邮件提供商或缓存技术...根据整洁(或六边形)架构的思想,数据库、Web 服务器和缓存都是外层基础架构组件。 我们之所以将基础设施组件称为基础设施,是因为 我们会在它们的基础上构建应用程序。...对于突变,解析器可以简单地将控制权传递给一个应用层用例。 将用例作为应用程序的重心后,从 REST 切换到 GraphQL(或同时支持两者)变得轻而易举。...5GraphQL 是自文档化的 维护 RESTfulAPI 时需要做的一件麻烦事是保持文档及时更新和内容全面。 RESTfulAPI 有两处可以更改。...7单一端点 SOLID 原则中的开闭原则指出: “组件 / 系统 / 类应对扩展开放,但对修改封闭”。 在架构层面,由于 GraphQL 仅向客户端公开单个端点,因此它满足了这一原则。

2.1K20

GraphQL:现代API设计的革新

通过GraphQL,客户端可以明确指定需要的数据结构,服务器则根据请求返回对应的数据。GraphQL的核心思想是客户端通过单一端点发送查询,服务器返回客户端所请求的数据。...2.4 实时数据通过订阅,GraphQL可以实现实时数据更新,服务器主动将数据变化通知客户端,这对于实时应用非常重要。...单一端点:简化了API的使用和管理。实时性:通过订阅可以实现实时数据更新,适用于实时应用。4.2 缺点复杂性:对于简单的API,GraphQL可能显得过于复杂,需要学习和理解其概念和用法。...缓存难度:由于查询的灵活性,传统的HTTP缓存机制在GraphQL中难以直接应用。性能问题:复杂的查询可能会导致服务器负载增加,需要优化和监控。...五、总结GraphQL是一种强大且灵活的API设计方式,适用于现代应用的需求。通过其精确的数据查询、强类型系统和单一端点,GraphQL在提升客户端开发体验和优化数据传输方面具有显著优势。

10210

GraphQL

GraphQL查询 用GraphQL的话,我们可以直接跳到最佳查询,通过一条简单直观的查询,一点冗余地获取我们需要的所有信息: query MoviesAndActors { movies {...这样可以,但增加了我们API的表面积,同时给开发者带来了不断更新和提供详尽文档的负担 GraphQL中的版本控制则不同,每个GraphQL查询都需要准确描述什么字段被请求了。...如果一个来自/movies/1端点的响应说可以缓存,将来对/movies/1的任何请求都可以简单的换成缓存里的东西,非常简单 GraphQL中的缓存处理稍微有些不同,缓存一个GraphQL API通常需要对...每个对象都有一个唯一标识符的话,客户端可以建立标准化的缓存,用这个标识符来做可靠的缓存更新和过期。客户端发起引用该对象的下游查询时,就用该对象的缓存版本。...但复杂场景下,这种优化可能并不容易实现 如果有一个数据库(或者抽象查询层)内置了这种优化,解决性能问题,那么相信GraphQL将获得压倒性的优势,首先再也不用无休止的加接口加接口了,另外维护一组标准统一的东西

1.5K40

API接口架构REST vs GraphQL

无论是创建网站,还是移动应用程序,我们都需要通过 API 来传递数据,通过 API 我们可以获取到数据库中的数据,可以操作数据库,可以处理一些业务逻辑。现在最流行的 API 架构是 REST。...为了提供这些数据,你需要在后端服务器上查询数据库或者缓存来获取结果。...反过来,这意味着 GraphQL 本质上是自记录的。一旦字段、类型或查询发生更改,基于架构的文档可以自动更新。 没有版本控制的 API 每次应用更改时,API 可能也需要更改。...使用 GraphQL,可以从模式中删除推荐使用的字段,而不会影响现有查询。这为应用程序提供了对新功能的持续访问,并鼓励更清洁、更可维护的代码。...难于学习 GraphQL 比 REST 更难于实现,它为新用户提供了更难的学习曲线。 难以缓存 GraphQL 经常被批评为更难缓存

1.6K30

MassCMS With APIJSON最佳实践

GraphQL可以通过定义查询和变更类型来精确控制数据的访问和修改权限。性能和缓存通过缓存响应来提高性能,并提供了一些性能优化选项。在一次请求中可以获取多个数据源的数据,但这可能导致性能问题。...GraphQL在处理大量数据时可能存在性能瓶颈,因为它通过单一请求来获取多个数据源的数据,可能导致数据获取过程变得复杂。...GraphQL需要在后端进行相应的实现,对于现有的RESTful API和数据库的兼容性相对较差。...开发者只需要在实体类上添加相应的注解,即可自动生成接口的增删改查功能,大大减少了开发工作量。4. 易于扩展和定制化APIJSON支持自定义注解以及扩展功能,开发者可以根据自己的需求进行定制化开发。...你可以随时更新和编辑内容,以满足业务需求。4. 生成内容API创建完模型马上就会自动生成内容API,你可以通过API或其他方式将数据与MassCMS系统进行集成,实现数据的实时同步和更新

50220

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

我们收到了许多用户的反馈,希望能有一种方案,可以将完整的应用状态封装在 Apollo Client 中,从而实现单一的数据源 (single source of truth)。...GraphQL 并不在乎请求是要发送给一个 gRPC 服务器,或是 REST 端点,又或是客户端缓存GraphQL 是一门针对数据的通用语言,与数据的来源毫无关联。...Apollo Link 使得在 Apollo Client 中管理本地的数据成为可能,从一个 GraphQL 服务器中获取数据,可以使用 HttpLink,而从 Apollo 的缓存中请求数据,则需要使用一个新的...Resolvers 在使用 Apollo Client 管理应用状态后,Apollo cache 成为了应用的单一数据源,包括了本地和远端的数据。那么我们应当如何查询和更新缓存中的数据呢?...然而,我们建议在 resolver 中对 REST 端点发请求。

2.3K100

为什么应该使用RESTful Web服务设计

为了让事情变得简单一点,菲尔·斯特金有一些很好的建议,我将在这里重述。这里提到了三种流行的范例:gRPC、基于HTTP的REST和GraphQL。它们不是竞争对手,而是填补了不同的利基市场。...当带宽很贵,并且您不确定客户需要什么时,GraphQL很不错。当您不需要服务器指定的缓存和其他这样的协议时,它也值得一看。 在进一步深入之前,花一些时间对可用资源进行一些分析。...它不一定是数据库表,甚至也不一定是域模型实体。它构建了整个API。将您的API看作是您的使用者可以操作的一组资源。平静的心态鼓励你去思考真正重要的事情。...这并不意味着您的整个API将变成CRUD(创建、读取、更新、删除)。这意味着您将首先关注系统中的内容,然后关注系统执行的操作。 2....也许资源足够大,需要通过补丁进行部分更新。消费者应该能够移除它吗?这些是我经常使用的问题。 5.

1.5K30

使用 TheGraph 完善Web3 事件数据检索

好吧,我们走运,你最好部署一个新合约来存储这些值并获取它们。现在想象一个更复杂的智能合约和Dapp,事情会很快变得混乱。 ? 你可以看到以上方案不是最佳的选择: 不适用于已部署的合约。...区块链是一个去中心化的数据库,但是与通常的情况相反,我们没有该数据库的查询语言。检索数据的解决方案是痛苦或完全不可能的。TheGraph是用于索引和查询区块链数据的去中心化协议。.../src/mapping.ts 模式(schema.graphql) 模式是GraphQL数据定义。它将允许你定义存在的实体及其类型。...我们首先尝试从发起人地址作为ID加载为为Player实体。如果不存在,我们将创建一个新实体,并用起始值填充它。 然后,我们创建一个新的Bet实体。...最后我们可以更新Player实体的所有数据。不能将数组直接压入,而需要按如下所示进行更新。我们使用ID来代表下注。最后需要.save()来存储实体

1.6K10

边缘服务的一致性、耦合和复杂性

在 RESTful API 设计中,URI 的路径部分用于标识特定实体 (也称为资源)。HTTP 谓词用于标识要对实体执行的操作类型。实体可以通过其他实体的 URI 路径部分链接到其他实体。...这是因为 WebSocket 是由前端发起的,并与后端保持连接,后端会向前端发送更新。WebHook 是由后端发起的,但浏览器没有一个固定的 IP 地址来接收这些请求。...Apollo GraphQL 框架支持在 schema 中使用缓存提示注解或在解析器中动态设置,这可以通过浏览器端缓存或内存缓存或外部缓存 (如 Memcached 或 Redis) 来实现。...虽然数据服务仍然与数据库紧密耦合,但数据库 schema 变化速度相对较慢。至少对于相对成熟的项目来说是这样的。 那么 BFF 涉及哪些有用的技术?...你可以为分别为 iOS 和安卓开发单独的 BFF,也可以简单一点,开发一个移动 BFF 来满足两个平台。 5 结论 你不必纠结于是选择 REST 还是 GraphQL

91710

GraphQL的优缺点与团队价值

首先来看 『一次请求』代表的含义: 图片 如图,一次请求的含义有2点: 单一入口:后端聚合请求,减少网络带宽 数据聚合:前端避免组装数据 其次来看『只得所需』的含义: 图片 如图所示,请求方参数自由增减...- api/app - apiv2/app 如果使用GraphQL,后端无需变更协议,只需要在原来的接口增加字段就好,前端只需要请求新字段就好,不请求无效的字段就能实现接口更新。...缺点与挑战 业务重构困难 性能瓶颈 通用框架缺乏 把业务重构成GraphQL模式比较困难,因为要改造整个接口,所以建议旧服务强行改造。...如果团队要使用GraphQL的话,也需要为其配备专门的鉴权、缓存等组件框架,目前这方面生态只能说勉强够用,在内部使用比较方便,如果对外商用的话,可能需要重新设计一套标准。 图片 4....图片 数据结构适配GraphQL主要是一下几点: 不支持直接传输文件、视频等数据 数据量过大导致的性能瓶颈 业务的数据需适配GraphQL的『图』,避免出现递归查询 数据库的设计 依赖服务的设计 可能存在的字段重复和冲突

3.2K341

前端菜鸟让老接口提速60%的原理与实现

轮询更新 -> schedule:用node-schedule定时更新数据缓存,保证用户每次请求获取最新数据。...await setAsync("缓存", data) } return result; } list(); 我们用redis的npm包来进行缓存相关的操作,redis类似咱们的数据库...将数据放在redis缓存里有几个好处,可以实现多接口复用、多机共享缓存等。 四、轮询更新schedule 最后一个优化手段:轮询更新 -> schedule。...数据源一直在变化,会导致缓存的数据与数据源不一致,需要定时更新更新的方法有很多种,听专业的后端小伙伴说有分段式数据缓存、主从同步读写分离、高并发同步策略等等。...这个库来进行定时轮询更新缓存,设置轮询间隔为* * 0 * * *,这句代码的意思就是设置每个小时的第0分钟就开始执行缓存更新逻辑,将获取到的数据更新缓存中。

1.2K21
领券