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

开发实践|API新宠GraphQL浅谈

这篇文章作者主要讲述在大数据时代,各种平台存储了大量的行为数据和用户信息,为了保证用户的隐私,数据安全作为数据治理的一部分,也被越来越多的人所提及。...在发出信息请求时,您可以确定希望获得的信息。 此类结果是通过将信息定义能力移动到客户端来完成的,而在 REST 中,信息在工作人员方面具有特征。...总结优点如下:适合复杂的系统和微服务它通过单个 API 调用获取数据根据需求定制请求验证和键入开箱即用自动生成 API 文档无需版本控制即可进行 API 演化代码共享顺便也说下缺点,始终返回 200 的...缺少隐式存储支持。 GraphQL获取数据的方式GraphQL是一种用于API的查询语言和运行时环境,它允许客户端精确地获取需要的数据。...GraphQL通过定义一个全局唯一的Schema,描述了后端所有可能的数据结构。客户端通过编写GraphQL查询语句,告诉服务器需要哪些数据,服务器根据查询语句返回精确的数据。

15741
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    安息吧 REST API,GraphQL 长存

    后文会有一个专门的章节来阐述 GraphQL 的灵活性成本,更高的灵活性意味着更高的成本。 我喜欢“始终以 WHY 开头”,所以让我们开始吧。 摘要:为什么我们需要 GraphQL ?...将服务器端的这一层看作简单的 GraphQL 语言的翻译器,或者代表数据服务的 GraphQL 代理。GraphQL 不是存储引擎,所以它并不是一个独立的解决方案。...客户端无法控制服务器返回的数据。没有任何语言可以这样做。更确切地说,可用于客户端的语言非常有限。...例如,客户端不能指定为该资源中的记录选择哪些字段。这意味着 REST API 服务将始终返回所有字段,而不管客户端实际需要哪些。GraphQL 针对这个问题定义的术语是超量获取不需要的信息。...多个 GraphQL 查询的结果很容易重叠,而这种基础的缓存方式无法解决重叠的问题。 对于这个问题有一个很巧妙的解决方案,那就是使用图查询表示图缓存。

    2.7K30

    Spring认证_什么是Spring GraphQL

    成功解码 JSON 正文后,HTTP 响应状态始终为 200(OK),并且 GraphQL 请求执行中的任何错误都会出现在 GraphQL 响应的“错误”部分。...Spring GraphQL 存储库包含一个 Spring MVC HTTP 示例应用程序。...在 WebSocket 上使用 GraphQL 的主要原因是订阅,它允许发送 GraphQL 响应流,但它也可以用于具有单个响应的常规查询。处理程序将每个请求委托给Web 拦截链以进一步执行请求。...构建链后,您可以使用结果WebGraphQlHandler来初始化 HTTP 或 WebSocket 传输处理程序。...查询执行 GraphQlService是调用 GraphQL Java 来执行请求的主要 Spring GraphQL 抽象。底层传输,例如Web 传输,委托GraphQlService来处理请求。

    2.9K20

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

    至此,我再也无法回过头来享受使用 REST 的工作了。 REST 有什么问题吗? 每个 REST API 都是独特的 公平地说,REST 甚至不是一个标准。...在大多数情况下,向 GraphQL API 发出的每个请求要么是没有副作用的Query实例,要么是会修改存储在服务器上的对象的Mutation实例。...类型的字段allTodos(limit: Int, offset: Int): TodoList!接受两个可选参数,而其本身的值是非可选的,这意味着它将始终返回一个不能为空的TodoList实例。...此模式中的其他变体和查询也是如此:对输入进行类型检查和验证,并且基于查询,GraphQL 服务器知道期望的结果形状。...有很多流行的开源项目都在使用 GraphQL:这个博客是基于静态站点生成器 Gatsby,它将 GraphQL 查询的结果转换成数据,然后呈现到 HTML 文件中。

    2.3K30

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

    你可以看到以上方案不是最佳的选择: 不适用于已部署的合约。 存储这些值需要额外的 gas 费用。 需要额外的调用来获取以太坊节点的数据。 ? 现在让我们看一个更好的解决方案。...让我向你介绍GraphQL 首先让我们谈谈最初由Facebook设计和实现的GraphQL,。你可能熟悉传统的Rest API 模型.,现在想像一下,你可以为所需的数据编写查询: ? ?...graphql-querygif 这两个图像几乎包含了GraphQL的本质。通过第二个图的查询,我们可以准确定义所需的数据,因此可以在一个请求中获得所有内容,仅此而已。...GraphQL服务器处理所有所需数据的提取,因此前端消费者使用起来非常容易。如果你有兴趣对服务器如何精确地处理查询,这里有一个很好的解释。...你可能已经猜到了,它使用GraphQL作为查询语言。 ? 示例始终是最好的理解方法,因此让我们在游戏合约示例中使用TheGraph。

    1.6K10

    以太坊中GraphQL简介及使用

    一、GraphQL是什么 GraphQL官网对GraphQL的介绍是:GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。...GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。...API返回数据往往是前后端协商定义的,而后端为了满足不同的客户端,减小后端请求的复杂性,往往会给出一些冗余数据。GraphQL很强大的一个功能就是能够指定所需要的API数据并获得可预测的结果。...服务器无法知道用户是否需要此字段,只能对每次调用eth_getBlock检索此字段。...以太坊中的交易收据作为每个块的单个二进制Blob存储在磁盘上,获取单个交易的收据需要获取并反序列化此blob,然后找到相关条目并返回,重复调用时,节点实现要重复获取和反序列化相同数据,造成资源浪费。

    1.5K10

    安全地将 Netflix 迁移到 GraphQL

    我们知道我们可以使用相同的查询和相同的输入进行测试,并始终期望得到相同的结果。 对于请求非幂等字段的 GraphQL 查询或变更,我们无法进行 Replay 测试。...在非功能需求(如缓存和记录用户交互)的情况下,我们肯定无法进行 Replay 测试。在这种情况下,我们并不测试响应数据,而是整体行为。...AB 实验结果表明,GraphQL 的正确性达不到遗留系统的水平。在 接下来的几个月,我们深入研究了这些高级指标,并修复了缓存 TTL、有缺陷的客户端假设等问题。...通过这些抽样事件,该工具可以捕获来自生产环境的实时请求,并对 GraphQL Shim 和新的 Video API 服务同时运行相同的 GraphQL 查询。...然后,该工具比较结果并输出响应负载中的任何差异。 注意:我们不会对个人身份信息进行 Replay 测试。它仅用于 Netflix 用户界面上的非敏感产品功能。

    17030

    graphql+koa2 前端bff层

    使用graphql的优势: 前端把握查询的主动权,可定义你需要查询的字段过滤冗余,另外减少两端的沟通 接手bff层前端可作为空间更大,包括做一些鉴权 请求合并更加便利(以前初始化多个请求需要一起返回都是使用...所以我们完全可以引入查询来接手后端同学的bff层。又或者我们新增了字段需要查询新增的字段后端同学也需要更改。基于这些尝试引入node+graphql。...graphql的查询优势在于前端可以主动控制字段的获取(只要这些字段是可以访问的)。集成graphql有两种方式。...配置好后启动中间层服务,graphql查询生效之后会开启一个/graphql的路径接口,如果我们要使用graphql查询就请求/graphql这个路径。...这个类型之中我们都可以控制它取或者不取,如果你查询的参数在服务端的graphql中未定义就会出错。

    14610

    《GraphQL 名词 101:解析 GraphQL 的查询语法》【译】

    本文则由浅入深地详细介绍基础的 GraphQL 格式与关键字,有助于初学者对于 GraphQL 的使用形成体系认知。 GraphQL 日渐成为数据查询的主流标准之一。...最基本的GraphQL查询 大家通常会使用“查询”来称呼 GraphQL API 服务的一切。但是这样称呼会有太多东西混杂在一起了。...请注意,它们始终称为“字段”,无论它们所在的层次有多深。在你的查询中,对根节点字段的处理和最底层字段应该是一样的。 参数(Arguments):一组与特定字段关联的键值对。...但是在GraphQL操作中三种可选的部分都没有在上述栗子中使用。如果你不仅仅是用GraphQL执行查询操作,或是希望传递动态变量到GraphQL查询中,你就需要利用到这些新的GraphQL特性。...指令(Directives)指令是独立于GraphQL server之外的一个附加功能。指令不会对结果的值产生影响,但是会影响哪些结果会被返回,也许还会影响这些结果是如何被执行的。

    3K20

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

    如果你的应用程序不断增大,你会发现自己在你的架构中添加了更多的存储结构 -- PostgreSQL 可能是存储用户信息的好地方,而 Redis 可能是存储其他种类信息的好地方 -- 对 GraphQL...如果你不确定应用程序的需求以及将来如何存储数据,则 GraphQL 在这里也很有用。要修改查询,你只需要添加所需字段的名称,这极大简化了随着时间推移而发展你的应用程序的过程。...在左侧窗格中,你可以输入所需要的任何有效 GraphQL 查询,而在右侧获得结果。...GraphQL 的类型功能会给查询过程提供严格的校验,你甚至可以尝试请求不存在的字段。...简而言之,它是识别给定用户是否有权查看某些数据的过程。我们可以想象一下这样的场景:经过认证的用户可以执行查询来获取自己的地址信息,但应该无法获取其他用户的地址。

    8.3K40

    API NEWS | Jetpack WordPress插件存在API漏洞

    始终确保扫描API代码库以查找漏洞,并在任何重大更改时手动审查。速度超过安全:与API代码中的错误主题相结合的是偏爱速度而不是安全性的主题。...如果您不知道自己拥有和操作的API,则无法保护。每个API都是唯一的:确保您了解保护每个 API 的特定需求,因为它们可能具有非常不同的特征和安全要求。...用户隐私保护:API通常需要与用户进行交互,涉及到用户个人信息的处理和存储,确保API的安全性可以防止用户隐私泄露和滥用,增强用户对产品和服务的信任感。...这可以使用Burp Suite手动完成,也可以通过将通用查询发送到常见的GrahpQL API端点来完成,如下所示:/graphql/api/api/graphql/graphql/api/graphql...它发出一个内省查询,请求给定 URL 的所有查询和突变(通过指向实时终结点的链接或通过 JSON 文件),并提供结构化视图以帮助您浏览结果。

    29530

    我的GraphQL安全学习之旅

    GraphQL简介 GraphQL是Facebook的一个开源项目,定义了一种查询语言,用来代替传统的RESTful API。...GraphQL初窥 在查找GraphQL资料的过程中,都可以看到一个简单的demo,不过查询结果都是代码写死的,对于理解GraphQL和数据库之间的关系,并不是很有帮助,我写了一个简单和数据库连接的demo...query{ users{ id, password, name } } 查询结果如下: [查询结果.png] 查询出来的数据即UserModel.query.all()...但如果我要在浏览器实现只查询id=2的用户的信息是做不到,因为后端python代码里没有写,也就是说,只有代码里写了接口,定义了相应的schema,才能通过GraphQL查询出对应结果,所以并不是通过GraphQL...发现的ddos漏洞在黑盒层面无法判断是否和GraphqQL有直接的关系,漏洞很简单,在graphql的query请求当中,有一个limit参数,当我将参数调成一个超大数字时,网站就卡死宕机了,无法判断后端哪一层崩溃了

    2K60

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

    我无法认同这个结论,不能仅仅因为 GraphQL 模式不支持本地版本控制就说问题消失了。如果不为 REST API 设置版本,也会取得同样的效果。...在 OAS 中还可以描述 OAuth2 流和每个端点的作用域。此外,你还可以描述查询参数的确切类型和验证规则,这是 GraphQL 所没有的特性。 GraphQL 无法描述身份验证、授权和输入验证。...Kyle 将一个 GraphQL 模式和分散在多个 Git 存储库中的 Swagger 文件进行了对比。...如果你想获得关于存储库及其所有问题的信息,就必须打开 GraphiQL 并开始搜索。然而,GraphiQL 的搜索功能并不能为你提供多少帮助。需要有人坐下来,编写如何使用 API 的示例查询和用例。...你可以使用其他工具,或者扩展 GraphQL,来获得更好的结果,例如使用 Relay 来持久化查询。要真正地从 GraphQL 文档中获得好处,你要做的不仅仅是向模式中添加描述。

    2K10

    Spring认证_什么是Spring GraphQL?

    对于请求中的每个可用属性,请求参数默认绑定为“等于”。 QuerydslDataFetcher支持 接口和 DTO 投影 以在返回查询结果以进行进一步的 GraphQL 处理之前转换查询结果。...自动注册 QuerydslDataFetcher公开 aGraphQLTypeVisitor查找返回类型与一个或多个 Querydsl 存储库的域类型匹配的顶级查询,并DataFetcher为每个匹配的查询注册...这包括返回单个值的查询和返回值列表的查询。 存储库必须用@GraphQlRepository. 默认情况下,查询返回的 GraphQL 类型的名称必须与存储库域类型的简单名称匹配。...Spring GraphQL 存储库包含 Spring MVC和 WebFlux 的示例。...JsonPath提取 GraphQL 响应中的所有发布版本的示例查询测试 。

    1.7K40

    工具包 java-dataloader 异步批处理装载数据

    该工具包是从graphql工具中抽出,在graphql里查询数据,很容易导致"n+1"获取问题。比如用户列表需要查询对应的部门,有些用户的部门相同,会被多次查询。...Github:源码地址 特点 使用简单直观 使用队列临时存储查询健,之后进行批量查询,减少查询开销 请求返回CompleteableFuture可以做后续处理 支持缓存,数据可以只获取一次 可自定义缓存...通过API将每组结果使用CompletableFuture包装,并将关键Key存储到队列中, 当Key的数量达到一定量或一定时间时后,再调用异步批量查询方法,然后再把结果回调给每组结果的CompletableFuture...如对List结果无法确定,推荐MappedBatchLoader实现,该方式通过key进行匹配,无需担心顺序与结果。...Dataloader中使用了两个缓存 //结果缓存成功执行批处理后返回的CompletableFuture结果。

    74520

    在 Laravel 应用中构建 GraphQL API

    GraphQL 是一种 API 查询语言,还是一种根据你为数据定义的类型系统执行查询的服务器端运行时。GraphQL 不依赖于任何指定的数据库或存储引擎,而是由你的代码和数据来作支持的。...创建查询和定义 GraphQL 的类型 GraphQL 中的查询与 Restful API 中的末端路径查询是一样的,查询只是用于获取数据,以及创建、更新、删除操作。...GraphQL 中的 类型 用于定义查询中每个字段的类型定义,类型会帮助我们格式化查询结果中的有格式的字段,例如布尔类型,字符串类型,浮点类型,整数类型等等,以及我们的自定义类型。...Query', 'description' => 'A query of users' ]; public function type() { // 带分页效果的查询结果...下面是查询结果的示例 ? 如果你想查阅源代码,可以访问以下地址 ? 。 https://github.com/ardani/laravel-graphql

    3.4K20

    GraphQL 基础实践

    什么是 GraphQL GraphQL 是一款由 Facebook 主导开发的数据查询和操作语言, 写过 SQL 查询的同学可以把它想象成是 SQL 查询语言,但 GraphQL 是给客户端查询数据用的...Schema 前面我们提到,GraphQL 拥有一个类型系统,那么每个字段的类型是怎么约定的呢?答案就在本小节中。在 GraphQL 中,类型的定义以及查询本身都是通过 Schema 去定义的。...需要注意的是[Movie]!与 [Movie!]两种写法的含义是不同的:前者表示 movies字段始终返回不可为空但Movie元素可以为空。...id 查询一遍得出结果,最终返回的数据就能符合 Schema 的定义了。...缺点 增加了服务端实现的复杂度:一些业务可能无法迁移使用 GraphQL,虽然可以使用中间件的方式将原业务的请求进行代理,这无疑也将增加复杂度和资源的消耗 完整源代码可以在这里 (https://github.com

    12.8K20
    领券