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

GraphQL—构建多服务架构的数据层

简介 作为 Facebook 在 2015 年推出的查询语言,GraphQL 能够对 API 中的数据提供一套易于理解的完整描述,使得客户端能够更加准确的获得它需要的数据 现在的web系统大多是基于restful...它描述了连接到它的客户端应用程序可用的功能。我们可以使用任何编程语言来创建 GraphQL Schema 并围绕它构建一个接口。...GraphQL 运行时定义了一个通用的基于图的模式来发布它所代表的数据服务的功能。客户端应用程序可以在其能力范围内查询Schema。这种方法将客户端与服务器分离,并允许两者独立发展和扩展。...的查询语句有几个特性: 按需取字段,不需要的字段可以不查询,类似于 SQL 里的 select 在类型定义的基础上,可以关联查询多个类型的数据,类似于 SQL 里的 join(但不完全一样) 可以递归的对某些字段进行理论上无限深度的查询...在此基础上构建了一套 DGS (Domain GraphQL Service) 的架构来进行治理的 Golang实践 这里就不具体描述了,可以参考如下两个链接: https://www.apollographql.com

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

    这才是GraphQL最详细的解释

    GraphQL 是当今软件技术领域最大的流行语之一。但它究竟是什么?它是一种像 SQL 这样的查询语言吗?像 JVM 这样的执行引擎?像 XML 这样的规范? 只有回答了以上所有问题,才是正确答案!...user 的详细信息,然后获取结果并显示在屏幕上。...这在软件领域是非常强大而且独特的 —— 它允许用任何一种编程语言去实现 GraphQL 服务器,并且客户端能够准确的了解它们的功能,因为它们是符合规范的。...一些公司通常先构建一个位于其现有后端服务之上的 GraphQL API “层”,从而开始使用 GraphQL。...这使得客户端程序可以得到他们寻求的性能和运营效率,同时允许后端团队在其系统的 GraphQL 层后面进行“改进”(如果需要的话)。

    96530

    我们准备在网关中支持GrahpQL了

    其实一提到QL,你就可以知道他是某种DSL类似的领域语言,本身肯定存在一定的切换成本。...有没有可能将来自UI/UX的需求尽量控制在UI/UX的实现端(客户端)从而减少UI展示层的逻辑变化的复杂度对后端接口的影响呢? 答案是使用GraphQL。...Facebook在接入层添加了一层GraphQL的查询语言。 使用GraphQL,我们可以按需获取数据。...同时由于QL语言可以迭代,这样很多需求可以基于原有接口上进行升级,这种升级体现在修改QL上,而不是需要后端修改追加新需求参数。 所以GraphQL专注于在客户端进行数据建模。...如图,行1~8为客户端请求的GraphQL形式的需求描述,该请求查询id为1的作者的名字,以及要求返回其关联的id为5的一本书的标题;行10~21为对应的匹配客户端数据需求的返回。

    36720

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

    作者 | Khalil Stemmler 策划 | 田晓旭 在服务器上使用 GraphQL 代替 REST 是有很多好处的,使用 Apollo Client 取代自己编写的数据获取逻辑也有很多优势。...我们之所以将基础设施组件称为基础设施,是因为 我们会在它们的基础上构建应用程序。在这一基础(即框架)内,我们编写丰富的、领域特定的应用程序。基础设施只是驱动程序而已。...https://youtu.be/EDqw-sGVq3k 数据图是虚拟层,位于我们的客户端应用程序和 GraphQL 服务器之间。...由于具备执行自省查询的能力,所以 GraphQL Playground 的 GraphQL 资源管理器可以显示 GraphQL 端点的所有功能 在 REST 领域中,我只看到了使用 Swagger 构建的...10总结 在现代 Web 应用程序架构中,GraphQL 和 RESTfulWeb 服务器都是基础架构组件。 基础架构组件是基本组件,它们构成了我们编写的特定领域 Web 应用程序的基础。

    2.2K20

    干货 | 携程机票Node.js开发实践

    我们也从最初用Node.js来完成前后端的架构分离到最近使用GraphQL来做微服务,机票部门在Node.js的应用探索上越走越宽。...能否将这个剥离出来,让前后端集中力量关注自己的领域呢?答案是肯定的,我们将客户端和服务端隔离开,服务端负责数据聚合,提供标准的restful接口,前端负责数据渲染。...在经历过几个版本迭代之后,我们发现了一些新的问题: 不同版本的客户端需求不同,相同的接口需要针对不同的版本做不同的处理; 不同的客户端对于契约的需求也不一样,比如PC由于屏幕尺寸的关系,在界面设计上给用户的信息要比...其在本质上是一种基于API的查询语言,是对restfulAPI的一种封装,目的在于构建一种更加易用的服务,通过GraphQL,客户端可以很方便的获取所需要的数据。...PM2+Node.js+Express+Express-GraphQL,选用Express-GraphQL作为核心中间件,统一客户端的请求入口为/graphql?

    1.4K20

    PayPal大规模采用GraphQL的探索和实践

    对于那些没有领域知识的人来说,易于集成:在我们的 Identity 团队中,我们希望在使用我们的服务时提供统一的体验,而不需要 PayPal 系统的领域知识。...GraphQL 在我们的应用程序中用作编排层。它位于前端 UI 应用程序和后端 API 层之间,充当面向前端的后端(BFF)。...一些团队选择使用 GraphQL 作为纯编排层,而其它一些团队使用 GraphQL 作为业务逻辑层。 收银台团队是第一个率先使用 GraphQL 的团队。...简化统一:内部客户端和周边客户端不再需要担心内部系统的复杂性,也不需要确定调用哪个 API。GraphQL 层将复杂性隐藏在幕后。 分析:对特定字段的单个请求花费的时间进行检测。...编排的 GraphQL API 的性能取决于它所使用的 API。GraphQL API 的速度仅与最慢的下游 API 的速度相同。相反,我们将重点放在开发人员的生产力和交付产品的时间上。

    3.1K20

    GraphQL

    GraphQL本质上是一种基于api的查询语言,现在大多数应用程序都需要从服务器中获取数据,这些数据存储可能存储在数据库中,API的职责是提供与应用程序需求相匹配的存储数据的接口。...客户端拓展功能时要不断编写新接口(依赖于服务端),GraphQL 中一个服务仅暴露一个 GraphQL 层,消除了服务器对数据格式的硬性规定,客户端按需请求数据,可进行单独维护和改进。...GraphQL应用的基本架构 下图是一个 GraphQL 应用的基本架构,其中客户端只和 GraphQL 层进行 API 交互,而 GraphQL 层再往后接入各种数据源。...这样一来,只要是数据源有的数据, GraphQL 层都可以让客户端按需获取,不必专门再去定接口了。...一个微服务仅暴露一个 GraphQL 层:一个微服务只需暴露一个GraphQL endpoint,客户端请求相应数据只通过该端点按需获取,不需要再额外定义其他接口。

    2.6K65

    iOS的MVC框架之控制层的构建(上)

    在我前面的两篇文章里面分别对MVC框架中的M层的定义和构建方法进行了深入的介绍和探讨。这篇文章则是想深入的介绍一下我们应该如何去构建控制层。控制层是联系视图层和模型层的纽带。...功能的展现在设计上我们可以理解为通过视图来完成,而业务逻辑实现则是由模型层来完成,所以必须要存在一个实体来将这两者关联起来,并且起到统筹和控制的能力。这个实体由控制层的控制器来实现和担当最合适。...如果你建立真实的文件夹的话,那么移动后控制器所在的真实的文件夹就有可能会和你项目工程上的所在的文件夹对应不上的情况。而用虚拟文件夹就不会出现这种情况的发生。...这一节所介绍的并不仅仅适用在控制器类的设计上,所有其他系统也是同样适用的。 类的封装实现在不同的语言上所提供的能力是不一样的,这一点非常有意思。...并且在UIView上他是定义为了id类型的。

    1.6K20

    安息吧 REST API,GraphQL 长存

    所以客户端的请求最终会多次往返服务器,以收集所有需要的数据。 使用 GraphQL,我们基本上可以将这种多个请求的复杂度转移到服务器端,并且通过 GraphQL 层处理它。...客户端向 GraphQL 层发起单个请求,并获得一个完全符合客户端需求的响应。 引入 GraphQL 层有诸多好处。例如,一大好处便是能与多个服务进行通信。...当你有多个客户端请求多个服务的数据时,中间的 GraphQL 层可以简化和标准化此通信过程。...这就是为什么我们需要在 GraphQL 运行时中定义一个模式,并且该模式能被客户端所使用。 这个模式基本上是一个功能文档,其中列出了客户端可以请求 GraphQL 层的所有查询。...我们是在 GraphQL 解析过程之前,之后还是之间处理它们? 为了解答这个问题,你可以将 GraphQL 视为在你自己的后端数据获取逻辑之上的 DSL(领域特定语言)。

    2.7K30

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

    GraphQL本质上是一种基于api的查询语言,现在大多数应用程序都需要从服务器中获取数据,这些数据存储可能存储在数据库中,API的职责是提供与应用程序需求相匹配的存储数据的接口。...客户端拓展功能时要不断编写新接口(依赖于服务端),GraphQL 中一个服务仅暴露一个 GraphQL 层,消除了服务器对数据格式的硬性规定,客户端按需请求数据,可进行单独维护和改进。...GraphQL应用的基本架构 下图是一个 GraphQL 应用的基本架构,其中客户端只和 GraphQL 层进行 API 交互,而 GraphQL 层再往后接入各种数据源。...这样一来,只要是数据源有的数据, GraphQL 层都可以让客户端按需获取,不必专门再去定接口了。...一个微服务仅暴露一个 GraphQL 层:一个微服务只需暴露一个GraphQL endpoint,客户端请求相应数据只通过该端点按需获取,不需要再额外定义其他接口。

    2.4K40

    为什么我劝你放弃了Restful API?

    GraphQL本质上是一种基于api的查询语言,现在大多数应用程序都需要从服务器中获取数据,这些数据存储可能存储在数据库中,API的职责是提供与应用程序需求相匹配的存储数据的接口。...客户端拓展功能时要不断编写新接口(依赖于服务端),GraphQL 中一个服务仅暴露一个 GraphQL 层,消除了服务器对数据格式的硬性规定,客户端按需请求数据,可进行单独维护和改进。...GraphQL应用的基本架构 下图是一个 GraphQL 应用的基本架构,其中客户端只和 GraphQL 层进行 API 交互,而 GraphQL 层再往后接入各种数据源。...这样一来,只要是数据源有的数据, GraphQL 层都可以让客户端按需获取,不必专门再去定接口了。...一个微服务仅暴露一个 GraphQL 层:一个微服务只需暴露一个GraphQL endpoint,客户端请求相应数据只通过该端点按需获取,不需要再额外定义其他接口。

    3.1K20

    干货 | 携程机票Node.js开发实践

    能否将这个剥离出来,让前后端集中力量关注自己的领域呢?答案是肯定的,我们将客户端和服务端隔离开,服务端负责数据聚合,提供标准的restful接口,前端负责数据渲染。...在经历过几个版本迭代之后,我们发现了一些新的问题: 不同版本的客户端需求不同,相同的接口需要针对不同的版本做不同的处理; 不同的客户端对于契约的需求也不一样,比如PC由于屏幕尺寸的关系,在界面设计上给用户的信息要比...其在本质上是一种基于API的查询语言,是对restfulAPI的一种封装,目的在于构建一种更加易用的服务,通过GraphQL,客户端可以很方便的获取所需要的数据。...来定义API,公开的类型都是通过SDL模式进行编写,统一前后端契约结构,便于使用; URL入口:Rest不同的请求入口不同,在请求的URL上需要做区分,GraphQL则是一个入口(/graphql?...PM2+Node.js+Express+Express-GraphQL,选用Express-GraphQL作为核心中间件,统一客户端的请求入口为/graphql?

    1.2K20

    为什么要使用 GraphQL?【Programming】

    GraphQL在标准REST API技术上获得发展的原因。...如果来自RESTAPI端点的成功响应返回35个字段,则客户端应用程序将接收35个字段 提取问题 传统上,REST API无法为客户端应用程序提供唯一的方法来仅检索或更新他们关心的数据。...在许多方面,这又回到了早期的web编程模式,客户端应用程序代码将直接查询后端系统——例如,有些人可能记得10-15年前在jsp上使用JSTL编写SQL查询!...借助GraphQL作为一种API技术,我们通过引入中间的GraphQL应用程序层来分离后端和前端应用程序系统,该层提供了一种以与组织的业务领域相一致的方式访问组织数据的机制。...通过鼓励API设计团队将更多的精力放在定义对象图上,而不是在专注于客户端应用程序所交付的内容上,前端和后端软件团队为客户提供解决方案的速度日益脱节。

    1.2K00

    GraphQL与OpenAPI:数据治理的优缺点

    但在 API 标准领域,GraphQL 和 OpenAPI 作为企业中两个重要的框架脱颖而出。 API 在数据消费中发挥着至关重要的作用,并且通过代理,在确保健全的数据治理方面至关重要。...统一语义层 API 必须在多个数据生产者之间建立和维护一个统一的语义层(或 数据访问模型)。...GraphQL GraphQL 允许您指定哪些数据元素可以直接 查询 或订阅。由于客户端在字段级别请求数据,因此您可以在语义层内实现细粒度访问控制。...定义是一个很滑坡的概念,但在我看来,GraphQL SDL 在定义类似于数据产品的数据目录方面做得很好,至少在狭义的定义上是如此。 GraphQL 还允许您指定其他谓词来细化请求,例如过滤器或排序。...手动编写 GraphQL 解析器不在我的愿望清单上;让这项任务可行的是自动化的 GraphQL。有一些可信赖的供应商拥有出色的 GraphQL 自动化功能,这使得此方法变得可行且有吸引力。

    13010

    微服务下使用GraphQL构建BFF | 洞见

    通过对特定业务领域的分析与建模,将复杂的应用分解成小而专一、耦合度低并且高度自治的一组服务。微服务中的每个服务都是很小的应用,这些应用服务相互独立并且可部署。...下图看到没有BFF以及加入BFF的前后端项目上的主要区别。 1. 没有BFF 的前后端架构 ?...它利用已有的代码和技术进行数据源的管理。比如作为在 BFF 层使用 GraphQL, 这一层的 BFF 并不需要任何的数据库或者存储媒介。...整体来看,我们的前后端架构图如下,三个 App 客户端分别使用 GraphQL 的形式请求对应的 BFF。BFF 层再通过 Consul 服务发现和后端通信。...而实际上我们使用的时候也遵从这个规范。

    2.1K60

    什么是GraphQL?【Programming】

    这在软件领域是非常强大而且相对独特的——它允许用任意数量的编程语言创建GraphQL服务器,而且客户机会准确地知道它们是如何工作的,因为它们符合规范。...总结 Graphql 是一个令人兴奋的、相对较新的进入开源 API 领域的工具。 它将查询语言和执行引擎与定义 GraphQL 实现外观和功能的开源规范相结合。...GraphQL已经开始改变公司对构建客户端和API应用程序的看法。...通常,公司首先通过在其现有后端服务之上构建一个GraphQLAPI“层”来进入GraphQL。...这使客户端应用程序可以开始获得所需的性能和运营效率,同时使后端团队有机会确定他们可能希望在GraphQL层背后进行“幕后”的更改(如果有)。

    90600

    GraphQL详解

    GraphQL本质上是一种基于api的查询语言,现在大多数应用程序都需要从服务器中获取数据,这些数据存储可能存储在数据库中,API的职责是提供与应用程序需求相匹配的存储数据的接口。...客户端拓展功能时要不断编写新接口(依赖于服务端),GraphQL 中一个服务仅暴露一个 GraphQL 层,消除了服务器对数据格式的硬性规定,客户端按需请求数据,可进行单独维护和改进。...GraphQL应用的基本架构 下图是一个 GraphQL 应用的基本架构,其中客户端只和 GraphQL 层进行 API 交互,而 GraphQL 层再往后接入各种数据源。...这样一来,只要是数据源有的数据, GraphQL 层都可以让客户端按需获取,不必专门再去定接口了。...一个微服务仅暴露一个 GraphQL 层:一个微服务只需暴露一个GraphQL endpoint,客户端请求相应数据只通过该端点按需获取,不需要再额外定义其他接口。

    2.6K00

    安全地将 Netflix 迁移到 GraphQL

    我们将 Netflix 的移动应用程序迁移到了 GraphQL,并实现了零停机时间,这涉及了从客户端到 API 层的全面改进。 直到最近,我们的移动应用程序使用的是内部 API 框架 Falcor。...现在,它们使用了 Federated GraphQL,这是一种分布式的 API 方法,领域团队可以独立地管理和拥有特定部分的 API。...在使用 GraphQL 之前:API 团队实施和维护的单体式 Falcor API: 在迁移到 GraphQL 之前,我们的 API 层由使用 Falcor 构建的单体服务器组成。...GraphQL shim 使得客户端工程师能够快速切换到 GraphQL,解决客户端方面的问题,如缓存规范化,尝试不同的 GraphQL 客户端,并在不受服务器端迁移的阻碍下研究客户端性能。...优势 高级健康指标:AB 测试为我们的整体客户端 GraphQL 实现提供了所需的保证。这帮助我们在 6 个月内成功将移动首页画布上 100% 的流量迁移到 GraphQL。

    17030

    构建弹性平台解决API蔓延问题

    Kong 的首席技术官兼联合创始人 Marco Palladino 最近写道: “当 AI 与世界互动时,它通过 API 进行,这将基本上推动 API 数量的指数增长,因为越来越多的产品和服务希望能够被...无论是通过寻找新的前端体验来实施我们今天已经拥有的服务,还是识别可重用的服务级领域,考虑如何放大我们现有投资是具有弹性的 API 策略的关键特征之一。...这些组织的团队已经意识到,GraphQL 不仅仅是另一个 API。通过诸如联合 GraphQL 等架构模式的进步,它是在展示层和服务层之间将中间层编码化的一种方式,可以推动弹性。...联合 GraphQL 使团队能够以更大规模提供 GraphQL 的好处,将 GraphQL 从仅仅是另一个 API 转变为位于现有服务之上的堆栈中的一层。...这个图形图表提供了通过单个端点访问任意数量服务的能力。它还使团队能够在这些子图之间共享实体和领域模型。

    10510
    领券