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

GraphQL在执行过程中会冗余地访问字段吗?

GraphQL在执行过程中不会冗余地访问字段。

GraphQL是一种用于API的查询语言和运行时环境,它允许客户端精确地指定需要的数据,并且只返回客户端请求的数据,避免了传统RESTful API中的过度获取或不足获取的问题。

在GraphQL中,客户端通过发送一个查询请求来获取所需的数据。这个查询请求包含了客户端需要的字段和相关参数。服务器端根据这个查询请求来执行相应的操作,包括获取数据、处理逻辑等。在执行过程中,GraphQL会根据查询请求中指定的字段来获取相应的数据,并将其返回给客户端。

由于GraphQL的查询请求是精确指定的,服务器端只会获取客户端请求的字段,而不会冗余地访问其他字段。这样可以减少网络传输的数据量,提高数据获取的效率。

总结起来,GraphQL在执行过程中不会冗余地访问字段,它通过精确的查询请求来获取客户端需要的数据,避免了传统API中的冗余数据获取问题。

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

相关·内容

GraphQL 初体验,Node.js 构建 GraphQL API 指南

如果你不确定应用程序的需求以及将来如何存储数据,则 GraphQL 在这里也很有用。要修改查询,你只需要添加所需字段的名称,这极大简化了随着时间推移而发展你的应用程序的过程。...GraphQL 的类型功能会给查询过程提供严格的校验,你甚至可以尝试请求不存在的字段。...简而言之,它是识别给定用户是否有权查看某些数据的过程。我们可以想象一下这样的场景:经过认证的用户可以执行查询来获取自己的地址信息,但应该无法获取其他用户的地址。...除了字段的参数外,解析器还可以访问它的父节点,以及传入的特殊上下文值,这些值可以提供有关当前已认证用户的信息。...在解析器中执行验证检查是很有诱惑力的,但随着模式的增长,这将成为一种难以维持的策略。 GraphQL 什么时候不合适? GraphQL 不能像 REST 一样精确地满足 HTTP 通信的需求。

8.3K40

GraphQL

绝大多数的Web内容都通过桌面电脑的Web浏览器来访问的,看起来一切都很美好 ?...让所有设备之间通信有了一套标准语言,简化了创建大型跨平台应用的过程 用GraphQL的话,图就变成了这样子: ?...然后执行curl http://localhost:3000/movie/1来获取第一个电影,第二个就curl http://localhost:3000/movie/2……以此类推 在app.js可以看到我们用来获取页面需要的所有数据的方法...用GraphQL查询 用GraphQL的话,我们可以直接跳到最佳查询,通过一条简单直观的查询,一点不冗余地获取我们需要的所有信息: query MoviesAndActors { movies {...接口数量瞬间爆炸,不一致性越来越明显,版本控制越来越困难 GraphQL在开发体验方面确实有过人之处。

1.5K40
  • 用 GraphQL 快速搭建服务端 API

    这篇文章不是重点介绍 GraphQL 本身,就不展开讲了,如果想深入了解可以访问 graphql.org。...注意到两个映射类 LnCrew 和 LnStarship 内部其实什么都没做,当它们和数据表建立映射关系后查询出的实例中会自动填充上数据库表中定义的各字段。...比如现有一个查询星舰的语句不需要 crew 属性,那整个执行过程当中,都不会发生 Crew 那张表的 select 。这一点也是 GraphQL 带来的好处之一。...现在就可以通过 Flask 启动的主机地址和端口来访问 GraphQL 的服务了,假设 Flask 应用启在 localhost:8080 上,那么只要为客户端配置一个入口: localhost:8080...同时开发者对于 SQLAlchemy 的 session 的生命周期、具体数据库查询语句的执行的掌握也可能变弱,造成一些潜在的性能问题。这点就需要我们在开发、测试的时候多留心。

    2.5K30

    「web应用架构」有原则GraphQL

    不应该推测性地将字段添加到模式中。理想情况下,每个字段应该只在响应消费者对附加功能的具体需求时添加,而设计的目的是最大限度地让其他有类似需求的消费者重用。 更新图形应该是一个连续的过程。...虽然经常讨论访问控制,但也需要注意需求控制,因为它在GraphQL的任何生产部署中都是至关重要的。允许用户不考虑成本执行任何可能的查询是错误的,因为用户没有能力管理它对生产系统的影响。...可以捕获关于在图上执行的每个操作(读或写)的大量信息:哪些用户和应用程序执行了该操作、访问了哪些字段、实际执行操作的方式、如何执行操作,等等。这些资料非常宝贵,应当有系统地加以收集,供以后使用。...因为跟踪真正地捕获了一个图是如何被使用的,它们可以被用于广泛的用途: 了解是否可以删除废弃字段,或者是否可以删除仍在访问它的特定客户端,以及它们的重要性 根据实时的生产数据,实时地预测一个查询需要多长时间执行...根据API使用情况为合作伙伴生成发票,可以根据访问的特定字段或消耗的资源创建详细的成本模型 所有图形操作的跟踪应该集中在一个中心位置,这样就有了一个权威的跟踪流。

    74510

    技术专题:API资产识别大揭秘(一)

    在进行安全测试期间,测试人员可以利用流量恢复API资产来更全面地了解API的工作方式,以及对不同类型的数据和请求的处理。这个过程有助于发现API资产中隐藏的安全漏洞和风险。...GraphQL最常见的是通过 HTTP 来发送请求,那么如何通过 HTTP 来进行 GraphQL 通信呢?举个栗子,如何通过Get/Post方式来执行下面的GraphQL查询呢?...片段存储:在解析之后,会对各类协议的特征字段以及参数接口进行片段式存储。对于各类参数结构究竟是如何实现解析以及片段式存储又具体表现怎样呢?...正因如此,GraphQL API相比于RESTful API,GraphQL 只用一个数据源就可以查询所有数据,所有的请求都可以访问一个服务端点;并且GraphQL 返回的结果响应准确地根据客户端的请求字段...除此之外,GraphQL 的操作类型可以是 query、mutation 或 subscription,它们分别代表了查询、变更和订阅,在使用GraphQL API发送的请求中也必定包括这些操作类型的特征字段

    1K20

    来试试Graphql

    有以下三种做法: 新开一个接口, 返回所需要的所有字段 请求增加一个 type ,用于区分场景,服务端根据不同 type 返回不同的字段 不管三七二十一, 在原有接口上增加多的字段。...如果只是 1 个,2 个场景还好,但如果后期有 n 个场景,需要返回非常多的字段,这不仅会浪费带宽,客户端数据解析也会影响响应时间,从而影响用户体验。那让后台新增一个接口可以吗?...resolver 函数它接收 4 个参数 fieldName(obj, args, context, info) { result } // obj:解析程序在父字段上返回的结果的对象 // args...更多内容查看 resolver 文档[3] 然后我们在 http://127.0.0.1:4000/graphql 或者在客户端 GraphiQL 中测试 ?...Dataloader Dataloader 是 facebook 搞的一个 js 库,可以大幅降低数据库的访问频次,从而降低系统负载,经常在 Graphql 场景中使用。

    2K20

    服务端视角聊聊GraphQL

    只获取你需要的字段GraphQL 可以指定返回你需要的字段,其余的字段不会返回,没有冗余字段。这两个能力正是前端梦寐以求的能力。但是从服务端视角来看,这两个能力并不完美,首先级联查询真的提升了性能吗?...最后,可以通过 http://localhost:8080/graphql 来访问 GraphQL 自带的调试工具。...总结我们知道 GraphQL 的基础能力包括 2 点,第一点是 GraphQL 可以在获取多个资源时只用一个请求,第二点是 GraphQL 可以只返回你需要的字段。...其中在聚合的过程中,GraphQL 有语法可以支持级联操作,但是要注意级联操作的性能取决于后端,如果在没有充分考虑的情况下直接让前端去操作可能会出现性能问题,典型的例子就是我们在前面提到的 N+1 问题...不过,在冗余字段的处理中,前端的工作量得到简化,网络带宽也可以得到释放。我们也看到 SpringBoot 集成 GraphQL 是很简单的。

    8810

    超越 REST

    1Graphile 在早期的 GraphQL 探索过程中,Netflix 的工程师意识到 Graphile 库可以将 PostgreSQL 数据库对象(表、视图和函数)作为 GraphQL API 来呈现...通过允许 GraphQL 客户端“所用权限”(“full access”)自动生成的 GraphQL 查询和 Graphile 生成的突变(在所有表和视图上公开的 CRUD 操作)来提高灵活性;然后在开发过程的后期...另外,对这两个字段的描述都被显示在生成的 GraphQL 模式中。...因为这些请求是以本机代码运行在数据库上,所以我们可以通过适当地使用索引、去规范化、集群等来执行复杂的查询并获得高性能。...今日好文推荐 90亿美元Java纠纷案反转:安卓中复制的代码属于合理使用 Java 微服务能像 Go 一样快吗? 用Rust重写Linux内核,这可能吗? ---- InfoQ 读者交流群上线啦!

    3K20

    GraphQL 在微服务架构中的实践

    这篇文章中,首先会简单介绍 GraphQL 是什么,它能够解决的问题;在这之后,我们会重点分析 GraphQL 在微服务架构中的使用以及在实践过程中遇到的棘手问题,在最后作者将给出心中合理的 GraphQL...在一个 PostConnection 中会存在多个 PostEdge 对象,其中的 cursor 就是我们用来做分页的字段,所有的 cursor其实都是 Base64 编码的字符串,这能够提醒调用方 cursor...,让它们进行自治,根据其业务需要判断请求者是否可以访问后者修改资源,而后者其实把整个鉴权的过程解耦了,内部的微服务无条件的信任来自 GraphQL 服务的请求并提供所有的服务。...,整个过程不需要手动介入,只有在类型出现冲突时会执行相应的回调。...在实现 GraphQL Stitcher 的过程中,需要格外注意不同服务之间类型冲突的情况,我们在实现的过程中并没有支持类型冲突以及跨服务资源的问题,而是采用了覆盖的方式,这其实有很大的问题,内部的 GraphQL

    1.5K10

    GraphQL 在微服务架构中的实践

    PostConnection 中会存在多个 PostEdge 对象,其中的 cursor 就是我们用来做分页的字段,所有的 cursor 其实都是 Base64 编码的字符串,这能够提醒调用方 cursor...进行路由的,GraphQL 其实帮助我们完成了解析查询树的过程,我们只需要对相应字段实现特定的 Resolver 处理返回的逻辑就可以了。...,整个过程不需要手动介入,只有在类型出现冲突时会执行相应的回调。...PostConnection 中会存在多个 PostEdge 对象,其中的 cursor 就是我们用来做分页的字段,所有的 cursor 其实都是 Base64 编码的字符串,这能够提醒调用方 cursor...,整个过程不需要手动介入,只有在类型出现冲突时会执行相应的回调。

    2.7K20

    为什么我使用 GraphQL 而放弃 REST API?

    在一个有经验的团队中,你可以避免这些问题,但是你难道不希望一些问题已经在软件方面得到解决吗?...但你真能负担得起在所有项目中都做到这样吗?当你的团队在冲刺期间决定重命名或重新安排对象字段时,你能负担得起上线/api/v1.99端点的成本吗?...参见 GitHub REST API(至少不是在头中传递 JSON)。 说到过滤,就有趣多了……需要按一个字段过滤吗?没问题,可能是/todos?...对一个稳定且广泛使用的 API 来说,这没什么大不了的,但是在敏捷流程的开发过程中,这就比较糟糕了。文档单独存储意味着,它经常不会更新,特别是当更改是一个小的、但会破坏客户端的更改时。...通过像行级安全这样的高级 Postgres 特性,你可以通过编写少量 SQL 策略实现复杂的访问控制逻辑。

    2.3K30

    Now.sh: 最好的 Serverless Deployment Dashboard

    Serverless 的项目 一天 1000 次 invokes 用于小项目完全足够 部署 安装 Now cnpm install now --save-dev 客户端部署 部署整个文件夹, 然后就会 自动执行...npm start CLI 部署 首先 now login 登陆,然后在项目根目录执行: now 就可以开始部署了 本地调试 now dev 如果遇到 yarn 无法找到的错误就可以 npm i...-g yarn 执行过程中会在本地安装模块到 node_modules 部署例子 node 部署 注意 node server 和纯 node 的部署不一样 { "version": 2,...graphQL // 将所有的路由定位到 index.js // 如果开启了多个端口那么就应该重定位一下 } 正常情况我们是 3000 建立 server 然后 4000 端口建立 graphQL...原本是在 http://localhost:4000/graphql 访问 graphQL,进行 routes 设置之后就可以在同一个端口或者 alias 访问到了 Troubleshooting

    39820

    GraphQL 中的权限与认证:一分钟浅谈

    基础概念 认证(Authentication) 认证是指验证用户身份的过程。在GraphQL中,常见的认证方式包括JWT(JSON Web Tokens)、OAuth2.0等。...认证的主要目的是确保只有经过验证的用户才能访问API。 授权(Authorization) 授权是指在用户已经通过认证后,进一步确定其是否有权限执行特定操作的过程。...在GraphQL中,授权通常基于角色或策略来实现。 常见问题 1. 如何在GraphQL中实现认证?...如何在GraphQL中实现授权? 授权通常涉及检查用户的角色或权限,以确定其是否有权执行特定的操作。在GraphQL中,可以通过中间件或自定义字段解析器来实现授权。...易错点4:未正确实现授权逻辑 错误表现:用户能够访问其无权访问的资源。 避免方法:在每个受保护的字段或查询中明确指定授权逻辑,并确保在执行操作之前进行授权检查。

    9510

    Salesforce 构建可扩展 API 的旅程

    我们选择了使用应用容器,因为它可以在物理机或 VM 上运行,一个操作系统实例能够支持多个容器,每个容器都在自己独立的执行环境中运行。...在本例中,我们的 Query 类型提供了一个名为 getClassificationInsightsByUser 的字段,它接受 emailAddresses 参数。...该字段的解析器函数很可能会访问一个数据库,并构造和返回 ClassificationInsightByUser 对象的一个列表。...确保 API 的安全性 在 Salesforce,安全性是首要任务。我们的 API 仅供注册用户访问,而且他们只能访问有权限的数据。...在这个过程中,我们使用应用容器进行扩展,使用 GraphQL 和嵌入式 Jetty 确保高效和轻量级,并优先考虑了 API 的安全性。 今日好文推荐 “不搞职级、人人平等” 25 年后行不通了?

    1K10
    领券