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

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

如果开发团队不是全栈的,那么服务器和客户端团队之间的沟通就至关重要,在没有机器可读的 API 规范的情况下更是如此。 GraphQL 如何做得更好?...要了解这些工具是如何工作的,请查看 Star Wars API 示例,它可以作为 GraphiQL 的在线演示。 能指定从服务器请求的对象字段客户端可以根据需要只获取需要的数据。...请注意,allTodos字段的offset参数是缺失的。作为可选项,它的缺失意味着它有null值。如果服务器提供这种模式,文档中可能会声明,null偏移量意味着默认情况下应该返回第一页。...客户端库可以很容易地 GraphQL 响应自动解包所需类型的对象实例,因为从模式和查询可以提前知道响应形状。 GraphQL 是个时髦的东西,是一种时尚,对吗?...你可以所有常见的 CRUD 操作暴露所有表的查询和修改。它可能看起来像 ORM,但它不是:你可以完全控制如何设计数据库模式,以及使用什么索引。

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

GraphQL 基础实践

虽然这你听起来觉得像是一款数据库软件,但实际上 GraphQL 并不是数据库软件。...那么,上面的这个请求描述称为一个 GraphQL 请求体,请求体即用来描述你要从服务器上取什么数据用的。一般请求体由几个部分组成,从里到外了解一下。 首先是字段字段请求的是一个数据单元。...在上面的 Schema 中,后面紧跟着的感叹号声明了此类型是个不可类型(Non-Nullable),在参数中声明表示该参数不能传入。...两种写法的含义是不同的:前者表示 movies字段始终返回不可为但Movie元素可以为。后者表示movies中返回的 Movie 元素不能为,但 movies字段的返回是可以为的。...GraphQL 的片段结构符号片段内的字段“结构”到选择集中。 ? 接口(Interface) 与其他大多数语言一样,GraphQL 也提供了定义接口的功能。

12.8K20

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

GraphQL API 的配置工作包括: 安装 GraphQL 公开一个服务器端点 设计一个模式(schema) 解析器连接到数据源 这是我们需要做的工作,但不是我们项目的工作重心。...在 Apollo GraphQL,我们这种虚拟层称为数据图。并且 Apollo 构建了很多可提高开发人员生产效率的工具。...使用 Apollo Federation,每个服务团队都可以从其限界上下文中构建和管理自己的 GraphQL 服务,将其注册到一个 Apollo 网关,从而在整个企业中分布化 GraphQL 的运维工作...通过 Apollo Federation,我们可以绘制并公开由多个 GraphQL 端点组成的单个数据图 在 Federation 中,你可以组成模式并解析其他服务 / 限界上下文中的字段。...在架构层面,由于 GraphQL 仅向客户端公开单个端点,因此它满足了这一原则。 客户端隐藏了字段解析机制的所有复杂性,它只需关注如何GraphQL 服务器之上构建即可。

2.1K20

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

作为开发者,我们可能既要协调从多个远端服务器发送来的数据,也要管理好涉及 UI 交互的本地数据。我们需要以一种合适的方法存储这些数据,应用中的组件可以简洁地获取这些数据。...但当 Apollo Client 进入 2.0 版本,不再依赖于 Redux,如何去同步本地和远端的数据,变得比原来更加棘手。...解决问题的基础 我们知道这个问题需要解决,现在让我们思考一下,如何正确地在 Apollo Client 中管理状态?...此外,GraphQL 有能力将对多个数据源的请求集成在单次查询中,在此我们充分利用这个特性。 . 以上是 Apollo Client 的数据流架构图。...辅助组件:我们的目标是 Apollo 的状态管理尽可能地与应用无缝连接。

2.3K100

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

你可以多个调用封装到一个 API 中,它们在服务器端完成,而不是从客户端发出多个请求。此方法也可以解决过取和欠取问题,因为你可以在数据发回客户端之前对其进行操作。...然后他总结道,在 GraphQL 中,graph 只有一个版本,变更可以在模式注册表中跟踪,这是 Apollo 的一个付费功能。因为这个原因,你在版本控制方面不会有任何问题。...了解下 Facebook 是如何避免破坏客户端的,这很有趣。 在 GraphQL 的情况下,模式演进意味着弃用一个旧字段,并添加一个新字段。新客户端使用新字段,而你希望使用旧字段的客户端越来越少。...GraphQL 服务器可以自由地使用它期望的任何类型进行响应。如果你发送一个查询,则服务器的响应可以不符合自省响应中的 GraphQL 模式。以 Apollo Federation 例。...你模式上传到模式注册中心,然后因为错误部署了 GraphQL 服务器的错误版本。如果你更改字段的类型,客户端可能就无所适从了。

2K10

GraphQL+Koa2实现服务端API结合Apollo+Vue

从这个意义上说,它是数据库无关的, 而且可以在使用 API 的任何环境中有效使用,我们可以理解 GraphQL 是基于 API 之上的一 层封装,目的是为了更好,更灵活的适用于业务的需求变化 GraphQL...但 GraphQL 提供了强类型的 schema 机制,从而天然确保了参数类型的合法性 二、GraphQl类型系统 2.1 GraphQl类型 可以GraphQL的类型系统分为标量类型(ScalarTypes...:不能为Null Non-Null强制类型的值不能为null,并且在请求出错时一定会报错。...可以用于必须保证值不能为null字段。...将它与vue-apollographql一起安装: npm install vue-apollo graphql apollo-boost --save 在src/main.js中引入apollo-boost

5.1K42

你不知道的 GraphQL

因为是最外层,所以调用resolver函数时第一个参数null。第二个参数传递的是查询携带的参数{ id: 2 }。...执行Query.Tweetsresolver,第一个参数null。...把resolver定位一个纯函数,是GraphQL设计者们的另一个明智之举。 查询引擎的集成化测试 那么,如何来测试数据依赖,类型和聚合逻辑呢?...注意,文件最后导出的是一个数组而非字符串。后面你就会知道是为啥了。 现在,在User schema声明文件中,我们如何添加字段到已经存在的query类型中?...注意:这篇教程中提到的大多数js库都源自Facebook或Apollo。那么,Apollo到底是哪位?它是来自于Meteor团队的一个项目。这些家伙GraphQL贡献了很多的高质量代码。顶他们!

3.2K20

干货 | 携程基于 GraphQL 的前端 BFF 服务开发实践

此外,code 和 message 字段的类型都带 !,表示非。而 data 字段的类型不带 !,即可能为。这就带来一个问题,code  1 表达存在错误时,data 也可能不为。...由于非类型的字段不能为字段错误被传播到父字段中处理。如果父字段可能是null,那么它就会解析null,否则,如果它是一个非null类型,字段错误会进一步传播到它的父字段。...如上,在 GraphQL Specification 的 6.4.4Handling Field Errors 中,明确了如何的问题。...当 Grandchild 的 value 结果 null 时,查询结果如下: 通过值冒泡,Grandchild 的值,被冒泡到 parent 节点,令 parent 的结果也。...这也是符合我们编写的 GraphQL Schema 的类型约束的。如果只有 Grandchild 的 value  null,反而不符合类型,因为该节点是带 ! 的非类型。

2.5K20

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

前端对字段及返回类型也能够了如指掌,GUI清晰的展现了字段的类型结构。 如何给高速运行的汽车更换轮子(前端) 给高速运行的汽车更换轮子是一件相当危险的事情,而我们早期所面临的情况和这差不多。...如何安装轮子(前端) 接下来讲一下我是如何安装轮子的,会涉及到一些面向场景的解耦操作,还有具体的代码演示。...Query其实就是GraphQL对传统前端Fragment的定义,它可以使用GraphQL官方提供的方法关联的数据字段绑定给某个component。 鉴权及续租方案(前端) ?...现在使用GraphQL之后,我们发现了一个更优的解决方案。 因为每个对象的资源字段固定,完全可以每个Component和GraphQL 的Query片段一一对应。...第三点是没有做分页的数目限制,一般来说前端可以通过传递特定的参数给接口来设置每页的接收数量,但是有些前端人员可能会为了快速上线新功能将每页的数量直接设置9999,这样服务器就又会被搞宕机。

7.3K20

用ServBay快速构建下一代GraphQL应用

在本指南中,我们深入探讨如何利用ServBay一站式环境和Docker,构建可扩展的GraphQL微服务。...主要功能包括声明式数据获取:使用 GraphQL,客户端可以在查询中精确指定所需的数据,包括字段和关系。这消除了传统 REST API 经常出现的数据过度获取和获取不足的问题。...如何构建GraphQL微服务在构建GraphQL微服务时,我们遵循以下步骤:第1步:使用ServBay设置环境不同于传统的手动安装Node.js,ServBay提供了预配置的环境,包括各个版本的Node.js...Node.js安装部署指南第2步:初始化Apollo服务器Apollo Server是一个开源的、与GraphQL规范兼容的服务器,它简化了GraphQL API的构建。...转至Docker Hub、注册并登录到您帐户的概述页面。单击创建存储库按钮。您的存储库提供名称并选择其可见性(公共或私有)。然后,单击“创建”。

12500

GraphQL 从入门到实践

age: Int } 这个 User 对象类型有两个字段,name 字段是一个 String 的非标量,age 字段一个 Int 的可标量。...一些常用的解决方案如 Apollo 可以帮省略一些简单的解析函数,比如一个字段没有提供对应的解析函数时,会从上层返回对象中读取和返回与这个字段同名的属性。...2.5 请求格式 GraphQL 最常见的是通过 HTTP 来发送请求,那么如何通过 HTTP 来进行 GraphQL 通信呢 举个栗子,如何通过 Get/Post 方式来执行下面的 GraphQL 查询呢...;另一个查询入口 user 接受一个字符串,查找 ID 这个字符串的用户,并返回一个 User 类型的可字段 # src/schema.graphql # Query 入口 type Query...大约可以概括性能瓶颈和团队分工的原因,希望随着社区的发展,基础设施的完善,会渐渐有完善的解决方案提出,广大前后端开发者们可以早日用上此利器。

2.5K31

GraphQL测试实践

去年随着GraphQL在全球风靡,它也出现在了最近两期的ThoughtWorks技术雷达中,当我们面对新的GraphQL APi时,QA应如何应对?...Schema只是一个概念,它是由各种数据类型及其字段组成,而每个类型的每个字段都有相应的函数来返回数据,且Schema里的字段可以聚合其他Schema,我们可以Schema理解多个Query组成的一张表...---- 如何简单快速的手动测试GraphQL? 我们先来看看 GraphQL与RESTful的区别: ?...基于以上事实,我选择所有角色都用过Postman工具来实现GraphQL 手动测试。 首先怎么GraphQL于Postman结合?...---- 利用测试脚本实现GraphQL自动化api测试 上面主要介绍如何手动测试GraphQL,当然我们也可以利用代码来实现GraphQL 测试。

2K30

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

: 使用GraphQL语言定义的一个或多个操作或者数据片段,类型是字符串。...这些参数会跟它们相关的字段一起被传递到服务器端执行,并影响服务器字段的处理方式。如上面的示例,参数可以是字面量,接下来还有参数作为变量形式的栗子。...请注意,参数可以显示在任何字段中,即使是嵌套层次很深的字段。 为了你以非常简洁的形式定义一个GraphQL查询,上面的栗子是GraphQL的一种非常简单的形式。...这样,无论你是在网络日志中或者GraphQL服务器上发现错误,你都可以通过名字很轻松的在代码库中定位问题,而不是靠猜测(类似的工具有 Apollo Optics)。...`include` 指令表示只有在 if 参数 true 时才引入片段表示的字段。`skip` 指令表示在 if 参数 true 时忽略片段中的字段

2.8K20

防止你的GraphQL API被恶意查询

在这篇文章中,他描述了他们是如何在攻击中保护GraphQL API。 使用GraphQL,你可以随时查询想要的内容。 这对于使用API来说是惊人的,但也具有复杂的安全隐患。 ...(尽管DataLoader可能会缓解数据库压力,但网络和处理压力不会) 我们没有第一个参数的类型设置Int(允许任意数量),而是使用graphql-input-number创建了一个自定义标量,该标量最大值限制为...前两名是graphql-validation-complexity,一个即插即用模块,或graphql-cost-analysis,它可以你指定@cost指令,从而获得更多的控制。 ...它也有乘法支持,所以如果你要求列表中的任何嵌套字段乘以分页数量,这是非常整洁。...为了给我们一点未来的余地,我们最大复杂度设置750。

1.8K10

构建带 Subscriptions 的 graphql golang 后端

GraphQL提供了一种灵活而有效的方式来查询服务器中的数据。 它正在成为设计后端的流行技术,通常会替换或封装一些不灵活的REST API,并客户负责决定他们需要的数据。...现在有许多用于编写JavaScript的GraphQL客户端和服务器的库和框架,其中最着名的是Apollo和Graphcool 。...Apollo团队还开发了针对WebSockets的GraphQL协议,该协议主要用于Apollo Client和Graphcool中的Subscriptions。...或者,您可以定义一个函数来对用户进行身份验证(在建立新连接时,Apollo客户端会将初始WebSocket消息与可选的authToken一起发送;该函数允许将令牌字符串解析用户)。...一个典型的服务器实现将监听数据库的变化,并通过识别哪些订阅需要更新,重新执行这些订阅的查询并将结果发送给相应的订阅客户端来对这些更改做出反应。 以下代码示例显示了订阅管理器在任何时候如何检索订阅。

2.7K30
领券