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

实践微服务,第14部分:GraphQL

内容 概述 GraphQL graphql-go模式,字段和类型 解析函数 查询 单元测试 通过HTTP提供服务 概要 源代码 完成源代码可以GitHub克隆: > git clone https...由于这是一个Go博客,将根据GitHub上graphql-go/graphql项目使用Go语言GraphQL模式。...解析函数是掌握最难部分,在查看真正帐户查询解析函数,我们会稍微看到更多解析代码。...主函数启动 ( 即运行独立或在Docker容器中启动),则会调用这一行: initQL(&LiveGraphQLResolvers{}) 5....该graphql.Params包含模式,变量和我们要执行实际查询。 该查询通过将param对象传入graphql.Do(...) func来执行。 将响应转换为JSON 断言没有错误和预期输出。

2.5K40

为什么要放弃RESTful,选择拥抱GraphQL

所以需求频繁改动是万恶之源,产品小哥哥改动需求,程序员小哥哥可能正提着铁锹赶来.........那么有没有一种方案或者框架,可以使得在用到同一个领域模型(DO或者DTO)数据,前端对于这个模型数据字段需求改动,后端可以根据前端改动和需要,自动适配,自动组装需要字段,返回给前端呢?...创建GraphQL服务器最终目标是: 允许查询通过图和节点形式去获取数据。 是什么让放弃了restful api?...GraphQL特点总结 声明式数据获取(可以对API进行查询): 声明式数据查询带来了接口精确返回,服务器会按数据查询格式返回同样结构 JSON 数据、真正照顾了客户端灵活性。...例如定义了一个名为User对象类型,并对其字段进行定义和施加限制条件: User字段控制 那么,返回数据,像下面这种情况就是不允许: 错误表示 Graphql会根据Schema Type来自动返回正确数据

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

GraphQL

所以需求频繁改动是万恶之源,产品小哥哥改动需求,程序员小哥哥可能正提着铁锹赶来.........那么有没有一种方案或者框架,可以使得在用到同一个领域模型(DO或者DTO)数据,前端对于这个模型数据字段需求改动,后端可以根据前端改动和需要,自动适配,自动组装需要字段,返回给前端呢?...创建GraphQL服务器最终目标是: 允许查询通过图和节点形式去获取数据。 是什么让放弃了restful api?...GraphQL特点总结 声明式数据获取(可以对API进行查询): 声明式数据查询带来了接口精确返回,服务器会按数据查询格式返回同样结构 JSON 数据、真正照顾了客户端灵活性。...例如定义了一个名为User对象类型,并对其字段进行定义和施加限制条件: User字段控制 那么,返回数据,像下面这种情况就是不允许: 错误表示 Graphql会根据Schema Type来自动返回正确数据

2.6K65

GraphQL详解

所以需求频繁改动是万恶之源,产品小哥哥改动需求,程序员小哥哥可能正提着铁锹赶来.........那么有没有一种方案或者框架,可以使得在用到同一个领域模型(DO或者DTO)数据,前端对于这个模型数据字段需求改动,后端可以根据前端改动和需要,自动适配,自动组装需要字段,返回给前端呢?...创建GraphQL服务器最终目标是: 允许查询通过图和节点形式去获取数据。 是什么让放弃了restful api?...GraphQL特点总结 声明式数据获取(可以对API进行查询): 声明式数据查询带来了接口精确返回,服务器会按数据查询格式返回同样结构 JSON 数据、真正照顾了客户端灵活性。...例如定义了一个名为User对象类型,并对其字段进行定义和施加限制条件: User字段控制 那么,返回数据,像下面这种情况就是不允许: 错误表示 Graphql会根据Schema Type来自动返回正确数据

2.5K00

GraphQL-BFF:微服务背景下前后端数据交互方案

数据形状验证通过后,GraphQL 将会根据 query 语句包含字段结构,一一触发对应 Resolver 函数,获取查询结果。...举个例子: 前端需要产品数据之前调用产品相关 RESTful API,变成查询产品相关 GraphQL。不过,需要订单相关数据,可能要查询另一个 GraphQL 服务。...数据消费方是其它服务,通过 GraphQL 查询语句,彼此之间可以更精确获取数据,避免冗余数据传输和接口调用。...编写了一个简单 Resolver 函数,用来演示查询结果。 ? 它很简单。Query 里返回跟字段名一样字母,任何子节点数据,都是拼接父节点字母串。...如此我们可以查询结果看出数据流动层次。 查询结果如下: ?

3.6K72

干货 | 万字长文全面解析GraphQL,携程微服务背景下前后端数据交互方案

数据形状验证通过后,GraphQL 将会根据 query 语句包含字段结构,一一触发对应 Resolver 函数,获取查询结果。...举个例子: 前端需要产品数据之前调用产品相关 RESTful API,变成查询产品相关 GraphQL。不过,需要订单相关数据,可能要查询另一个 GraphQL 服务。...数据消费方是其它服务,通过 GraphQL 查询语句,彼此之间可以更精确获取数据,避免冗余数据传输和接口调用。...编写了一个简单 Resolver 函数,用来演示查询结果。 ? 它很简单。Query 里返回跟字段名一样字母,任何子节点数据,都是拼接父节点字母串。...如此我们可以查询结果看出数据流动层次。 查询结果如下: ?

3.5K21

GraphQL-BFF:微服务背景下前后端数据交互方案

数据形状验证通过后,GraphQL 将会根据 query 语句包含字段结构,一一触发对应 Resolver 函数,获取查询结果。...举个例子: 前端需要产品数据之前调用产品相关 RESTful API,变成查询产品相关 GraphQL。不过,需要订单相关数据,可能要查询另一个 GraphQL 服务。...数据消费方是其它服务,通过 GraphQL 查询语句,彼此之间可以更精确获取数据,避免冗余数据传输和接口调用。...编写了一个简单 Resolver 函数,用来演示查询结果。 ? 它很简单。Query 里返回跟字段名一样字母,任何子节点数据,都是拼接父节点字母串。...如此我们可以查询结果看出数据流动层次。 查询结果如下: ?

1.5K20

使用ASP.NET Core开发GraphQL服务器 -- 预备知识(上)

获取不足:使用REST想获取部门和部门的人员,通常需要先请求查询部门列表;然后遍历返回部门列表,再次发出请求查询每个部门下的人员,所以是N+1查询。...结果以JSON形式返回,其数据包含在data属性下,结构和查询结构一致。 如果还想在查询中包含浏览者姓名,那就加一个字段即可: ? GraphQL查询也可以有注释: ?...(所有的错误请求返回结果都是这个格式)。 错误信息里告诉我们要查询repository这个字段,必须要提供owner这个参数,那么我们就加上这个参数: ? 这次终于返回正确结果。...输入类型和返回类型 定义schema时候,我们也会相应定义所允许输入类型,它们可以是参数类型或字段类型。...别名 当我使用不同参数来查询两个同样字段时候,会报错: ? 就应该使用别名了。添加别名只需要在字段前边加上别名和冒号即可: ? 这回查询没有错误了。

1.7K40

何为GraphQL

无法获取足够信息,如果你拿到100个id,你将需要去执行100个独立API调用去获取每个队员信息。 获取过多信息,你浪费了许多后台处理时间和用来准备和传输很多不需要数据网络带宽。...强烈推荐使用它来测试不同查询。 ? 使用GraphQL特别查询 ? 一切都设定好了。 让我们导航到http://localhost:3000/graphql并找点乐子。...我们在这里查询到了一些超级明星。 毫无疑问。 让我们来看看更有趣事情:偏移(offset)4开始,查询2名球员。...该实现简单地使用查询提供参数并向data['allPlayers']添加新对象。 它也确保我们正确地设置了球队。 最后,它返回球员。...验证 GraphQL将针对模式验证每个查询或变动。 输入数据具有复杂形态,这会是一个巨大胜利。 您不必编写烦人且脆弱验证代码。 GraphQL将为您处理它。 ?

3.5K60

干货分享 | GraphQL 数据聚合层

,点了什么按纽,触发什么事件,就必须去理解每一个字段背后业务含义,要去理解每个字段背后业务含义,就必须去理解业务。...“ API 数据库”里面将查询数据结果返回给终端,而 GraphQL 就相当于这个系统一个查询语言,像 SQL 之于 MySQL 一样。...为什么它是天生支持数据拼装呢?来尝试着 GraphQL 执行原理上大概解释一下。...拿到所有需要查询字段后,第四步针对每一个字段去执行它 resolver,可以 resolver 返回数据里面拿到字段对应数据,最后是格式化结果返回。...类型做一个 mock 数据,这个 mock 数据可以会在查询文章作者和查询评论作者中同时用到,同时我们也可以在返回 mock 数据耍一些小花招,例如从几个用户数据中随机返回一个用户信息,或者根据查询条件返回对应假数据等

2.4K10

什么是GraphQL?【Programming】

它是一种类似SQL查询语言吗?像JVM这样执行引擎?像XML这样规范? 如果你回答了以上所有的问题,那么你是正确!...Graphql是一种查询语言语法,一种与编程语言无关执行引擎,以及一个不断发展规范。 让我们来深入了解GraphQL是如何具备所有这些特性,并且了解一下为什么人们对它如此热爱。...,获取结果,并使用它填充配置文件屏幕。...作为一种查询语言,GraphQL核心优点之一是客户机应用程序只能请求它需要数据,并期望以一致方式返回数据。 那么返回GraphQL响应是什么呢?...尽管该规范对GraphQL语法、什么是有效查询以及模式如何工作非常具体,但是它没有提供关于如何存储数据或者应该使用什么实现编程语言GraphQL服务器方向。

87000

探索查看以太坊交易池方法

为什么要查看全局或本地待处理交易? 可以在没有 txpool 命名空间情况下查看全局待处理交易吗? 有几种方法可以检索待处理交易。...过滤器 当我们在 Geth 上创建过滤器,Geth 将返回一个唯一 filter_id。请注意,对该特定过滤器最后一次查询开始,这个 filter_id 只会存在 5 分钟。...如果我们查看 web3.py 源代码[5], web3.py 收到一个待处理字符串,它 会映射到 eth_newPendingTransactionFilter, web3.py 收到字典参数...这是因为 eth_newPendingTransactionFilter 没有可用 get_all_entries。 最新块到待处理块过滤器 为什么下面的过滤器没有给我实时待处理交易?...getPendingTransactions 过滤器 为什么给我一个不同或空结果

2K20

为什么劝你放弃了Restful API?

修改旧接口删除冗余数据方案往往开发人员不会选择,这是为什么呢?...所以需求频繁改动是万恶之源,产品小哥哥改动需求,程序员小哥哥可能正提着铁锹赶来…… 那么有没有一种方案或者框架,可以使得在用到同一个领域模型(DO或者DTO)数据,前端对于这个模型数据字段需求改动...REST API 接口灵活性差、接口操作流程繁琐,GraphQL 声明式数据获取,使得接口数据精确返回,数据查询流程简洁,照顾了客户端灵活性。...GraphQL特点总结 声明式数据获取(可以对API进行查询): 声明式数据查询带来了接口精确返回,服务器会按数据查询格式返回同样结构 JSON 数据、真正照顾了客户端灵活性。...例如定义了一个名为User对象类型,并对其字段进行定义和施加限制条件: 那么,返回数据,像下面这种情况就是不允许Graphql会根据Schema Type来自动返回正确数据: 其他类型 除了上面的

2.7K20

GraphQL 入门指南

GraphQL有很多特性,比如: GraphQL查询总是能准确获得你想要数据,不多不少,所以返回结果是可预测, 不再像你使用 REST 那样过度获取信息。...它为我们提供了同一个端,对于同一个 API,没有版本2或版本3。给 GraphQL API 添加字段和类型而无需影响现有查询,老旧字段可以废弃,工具中隐藏。...} 如上所见,使用 GraphQL查询,还可以传递参数。在本例中,要查询特定用户,所以要传递其用户 ID。 但是,你可能想知道: GraphQL 如何知道哪里获取数据?...服务器中发生更新,服务器将运行订阅中指定 GraphQL 查询,并向客户机发送一个新更新结果。 在这篇文章中,我们不打算讨论订阅,但是如果你想阅读更多关于订阅信息,请单击这里。...总结 如你所见,GraphQL 是一项非常强大新技术。 它为我们提供了构建更好和精心设计API真正能力。 这就是为什么作者建议你现在开始学习它,本文本作者角度来说,它最终将取代 REST。

1.9K30

GraphQL 入门到实践

一些常用解决方案如 Apollo 可以帮省略一些简单解析函数,比如一个字段没有提供对应解析函数,会从上层返回对象中读取和返回与这个字段同名属性。...", "variables": { "myVariable": "someValue", ... } } 返回格式一般也是 JSON 体 # 正确返回 { "data": { ... } }...Db.user、Db.users 分别是查找对应数据函数,返回是 Promise,如果这个 Promise 被 resolve,那么传给 resolve 数据将被作为结果返回。...id、name 这两个字段,因此 GraphQL没有返回多余数据,怎么样,是不是很贴心呢 3.3 Mutation 知道如何查询数据,还得了解增加、删除、修改,毕竟这是 CRUD 工程师必备几板斧...正如尤雨溪所说,为什么 GraphQL 两三年前没有广泛使用起来呢,可能有下面两个原因: GraphQL field resolve 如果按照 naive 方式来写,每一个 field 都对数据库直接跑一个

2.5K31

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

那么为什么要对使用 GraphQL 进行辩驳呢?个人最讨厌是,社区一直在宣传 GraphQL 好处,而这些好处却非常普通,并且与 GraphQL 实际上没有任何关系。...与使用 Next.JS BFF 方法相比,在前端获得相同结果会更复杂。如何使用 GraphQL 实现 Etags?如果没有任何变化,如何使 GraphQL 服务器返回 304 状态码?...当我们讨论 GraphQL类型安全,其实我们意思是,我们相信 GraphQL 服务器行为会与自省查询响应保持一致。为什么我们不能同样信任接口定义规范呢?想我们可以。...你可以使用其他工具,或者扩展 GraphQL,来获得更好结果,例如使用 Relay 来持久化查询。要真正地 GraphQL 文档中获得好处,你要做不仅仅是向模式中添加描述。...11 结论 Kyle 问“为什么要用 GraphQL想他实际上是在说“为什么要用 Apollo”。答案很简单。没有人愿意围绕 REST API 构建一个丰富生态系统。

2K10

GraphQL到底怎么使?看看智联前端团队技术沉淀

初识 GraphQL 实现能让客户端获取以结构化方式,服务端结构化定义数据中只获取想要部分能力。 符合 GraphQL 规范实现称之为 GraphQL 引擎。...,所以如 query、mutation、subscription 字段是不会出现在返回结果返回结果第一层字段是前文提到 root field(根字段)。...使用 Fragments(片段)降低 Document 复杂度。 使用 Field Alias(字段别名)进行简单返回结果字段重命名。 这些都没有什么问题。...调用合并:经常提到与 RESTful 相比较优一点是,需要获取多个关联数据,RESTful 接口往往需要多次调用(并发或串行),而基于 GraphQL 接口调用则可以将调用顺序体现在结构化查询中...强类型(字段校验):由于 JS 语言特性,强类型只能称为字段强类型校验(包括入参类型和返回结果),数据源返回了比 Schema 多或少字段,并不会引发错误,而就算采用了 TypeScript 由于没有运行时校验

2.3K20

激荡二十年:HTTP API 变迁

PHP 开发者可以把处理用户 HTTP 请求,连接 mysql,组装 SQL 进行查询,将查询结果转换成 HTML,一路到 HTML 响应返回给用户整个业务逻辑放在一个(或者若干个)如意大利面条般脚本中...API 约定返回合适结果。...生成相应 SQL 查询,然后把结果序列化成客户端需要结构,以 Response 返回。...最终, x-fields / x-filter 中解析出来内容,连同 rang 头(用于分页)一起,就可以构建出一个完整,合法 SQL 查询,最终得到返回结果。...本来这篇文章应该在上周末发表出来,可是技痒,把周末可用时间匀给了代码实现,于是在撰写了(主要是通过 psql -E 偷师 psql 命令是如何查询)上百行 SQL,postgres 中获取关于

1.7K30

安息吧 REST API,GraphQL 长存

即使与 REST API 打交道这么多年,当我第一次了解到 GraphQL 和它试图解决问题还是禁不住把本文标题发在了 Twitter 上。 ? 请别会错意。...后文会有一个专门章节来阐述 GraphQL 灵活性成本,更高灵活性意味着更高成本。 喜欢“始终以 WHY 开头”,所以让我们开始吧。 摘要:为什么我们需要 GraphQL ?...REST API 通常是端点集合,其中每个端点代表一个资源。因此,客户端需要获取多个资源数据,需要对 REST API 进行多次往返,以将其所需数据放在一起。...在 REST API 中,没有客户端请求语言。客户端无法控制服务器返回数据。没有任何语言可以这样做。更确切地说,可用于客户端语言非常有限。...多个 GraphQL 查询结果很容易重叠,而这种基础缓存方式无法解决重叠问题。 对于这个问题有一个很巧妙解决方案,那就是使用图查询表示图缓存。

2.7K30

GraphQL 遇上图数据库,便有了更方便查询数据方式

今天给大家带来一个简单为 NebulaGraph 提供 GraphQL 查询支持 DEMO,为什么是简单,因为本来想完成更多工作再给大家介绍,但是上个月太忙加上下个月更忙,但是又很想白嫖一下...,并且这个语句返回值是不明确,至少没有办法查询看到结果。...}] } 看看这优雅查询返回结果,想必不多说,大家也都看得懂。...player 是根据 VertexID 查询返回一个 player,player 后面没有 ! 标识符,说明可能查询结果为空。...下面的 player 和 team 两个 type 就表示了这两个对象有什么属性,可以在查询指定返回属性,NebulaGraphQL 在返回结果就只会提供查询需要属性。

38610
领券