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

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

作者 | Khalil Stemmler 策划 | 田晓旭 在服务器上使用 GraphQL 代替 REST 是有很多好处的,使用 Apollo Client 取代自己编写的数据获取逻辑也有很多优势。...简化的数据获取架构,其中视图可以是任意前端框架——nerdwallet 数据图在连接的两端均有 Apollo 服务器和客户端,它可以简化获取逻辑、错误逻辑、重试逻辑、分页、缓存、optimistic UI...由于具备执行自省查询的能力,所以 GraphQL Playground 的 GraphQL 资源管理器可以显示 GraphQL 端点的所有功能 在 REST 领域中,我只看到了使用 Swagger 构建的...由于 GraphQL 语言是通行(ubiquitous)且标准化的,因此人类 和机器 会更容易理解如何集成和使用它。...使用 Apollo Federation,每个服务团队都可以从其限界上下文中构建和管理自己的 GraphQL 服务,将其注册到一个 Apollo 网关,从而在整个企业中分布化 GraphQL 的运维工作

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

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

对一个稳定且广泛使用的 API 来说,这没什么大不了的,但是在敏捷流程的开发过程中,这就比较糟糕了。文档单独存储意味着,它经常不会更新,特别是当更改是一个小的、但会破坏客户端的更改时。...GraphQL 如何做得更好? 对于所有讨论过的问题,我倾向于认为,在 CRUD 应用程序中,有一种标准方式来生成和使用 API 会非常棒。...只要 GraphQL 模式中有任何更改,你就可以在 GraphQL 浏览器中看到它,就像嵌入式 API 文档。...本质上,所有通信都通过服务器上一个预定义的 URL(通常是/graphql)运行,借助一个简单的POST请求,其中包含序列化为 JSON 有效负载的查询。...你可以将所有常见的 CRUD 操作暴露为所有表的查询和修改。它可能看起来像 ORM,但它不是:你可以完全控制如何设计数据库模式,以及使用什么索引。

2.3K30

构建带 Subscriptions 的 graphql golang 后端

现在有许多用于编写JavaScript的GraphQL客户端和服务器的库和框架,其中最着名的是Apollo和Graphcool 。...Apollo团队还开发了针对WebSockets的GraphQL协议,该协议主要用于Apollo Client和Graphcool中的Subscriptions。...一个典型的服务器实现将监听数据库的变化,并通过识别哪些订阅需要更新,重新执行这些订阅的查询并将结果发送给相应的订阅客户端来对这些更改做出反应。 以下代码示例显示了订阅管理器在任何时候如何检索订阅。...使用Query , Variables和OperationName可以在需要时重新执行订阅查询。.../ handler结合使用 结合使用WebSocket端点上的GraphQL和普通的GraphQL HTTP端点,就像其他任何net/http处理程序一样工作。

2.7K30

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

我们可以使用 GraphQL mutation 来表述应用状态的变化过程,而不是去发送某个 action。在查询应用状态时,GraphQL query 也能以一种声明式的方式描述出组件所需要的数据。...Defaults 前文的 defaults 字段是一个用于表示状态初始的 object,当 state link 刚创建时,这个默认会被写入 Apollo Client 的缓存。...尽管不是必需的参数,不过预热缓存是一个很重要的步骤,传入的 default 使得组件不会因为查询不到数据而出错。 . 以上代码的 defaults 代表了 Apollo cache 的初始。...Resolvers 在使用 Apollo Client 管理应用状态后,Apollo cache 成为了应用的单一数据源,包括了本地和远端的数据。那么我们应当如何查询和更新缓存中的数据呢?...以上代码使用 @client 指令查询 Apollo cache。 在我们 最新的文档页中,可以找到更多的例子,以及一些将 apollo-link-state 集成在应用中的小贴士。

2.3K100

GraphQL两年实战避坑经验

作者 | Stein Janssen 译者 | 盖磊 策划 | 蔡芳芳 本文作者分享了在生产环境中使用 GraphQL 的一些经验和解决方法,并给出了一些构建实用 GraphQL 查询和变更(Mutation...本文作者使用 GraphQL Voyager 生成的关系概览图 首先谈谈我们为什么会选择 GraphQL? 无需操心如何更新文档,所有的查询(Query)和变更会自动形成文档。...这样,我们就可以通过查询 Product 获取 Order 信息。扩展 Schema 的详细做法,参见 Apollo 文档。...推荐一个 很好的查询实现例子,访问页面右侧的“doc”选项卡, 并搜索 assetFilter。 对查询和变更定义自己的命名规则,以简化对查询和变更的查找。 在使用查询分页时,设置默认和最大上限。...推荐使用 GraphQL Voyager,可生成对 Schema 所有查询、变更、关系的概览图。

1K30

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

几乎是 Apollo GraphQL: Apollo 提供的实现和 GraphQL 生态,内容丰富,不止一套引擎,还提供了纯客户端使用(不局限JavaScript)多种工具。...Apollo Apollo 提供了完整的 GraphQL Node.js 服务框架,但是为了更直观的感受可执行 Schema 的创建过程,使用 Apollo 提供的 graphql-tools 进行可执行...上手快;apollo 实现则使用结构和行为分离的方式定义,且使用了 SDL,结构和行为使用类名形成对应关系,有一定的理解成本,好处是 Schema 结构更直观,且使用 SDL 定义 Schema 更快。...提供了生成可执行 Schema 的函数和执行 Schema 生成返回的函数(graphql、execute 函数),使用执行方法可快速将现有 API 接口快速改造为 GraphQL 接口。...版本控制:客户端结构化的查询方式可以让服务追踪到字段的使用情况。且在增加字段时,根据结构化查询按需查询的特点,不会影响旧的调用(虽然 JavaScript 对多了个字段的事情不在意)。

2.3K20

GraphQL 从入门到实践

本文首先介绍了 GraphQL,再通过 MongoDB + graphql + graph-pack 的组合实战应用 GraphQL,详细阐述如何使用 GraphQL 来进行增删改查和数据订阅推送,并附有使用示例...什么是 GraphQL GraphQL 是一种面向数据的 API 查询风格。...变更:对数据进行变更,比如增加、删除、修改,CRUD 中的 CUD substription 订阅:当数据发生更改,进行消息推送 这些操作类型都将在后文实际用到,比如这里进行一个查询操作 query {...args:查询中传入的参数 context:提供给所有解析器的上下文信息 info:一个保存与当前查询相关的字段特定信息以及 schema 详细信息的 解析函数的返回可以是一个具体的,也可以是...2.5 请求格式 GraphQL 最常见的是通过 HTTP 来发送请求,那么如何通过 HTTP 来进行 GraphQL 通信呢 举个栗子,如何通过 Get/Post 方式来执行下面的 GraphQL 查询

2.5K31

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

在这种情况下,如果想引入一个破坏性更改,而又不破坏客户端,该怎么办?这是不可能的。你必须以一种非破坏性的方式引入此更改。了解下 Facebook 是如何避免破坏客户端的,这很有趣。...但是,GraphQL 模式是如何保证的呢? GraphQL 内省是向服务器发送一个特定的 GraphQL 查询以获取关于 GraphQL 模式的信息。...GraphQL 服务器可以自由地使用它期望的任何类型进行响应。如果你发送一个查询,则服务器的响应可以不符合自省响应中的 GraphQL 模式。以 Apollo Federation 为例。...需要有人坐下来,编写如何使用 API 的示例查询和用例。否则,真的很难上手。 因此,尽管社区一直在说,“GraphQL 是自记录的”,但这个特性本身并不能成为一个有用的 API。...不幸的是,其中许多工具是内部使用的,从未公开。社区必须要设法跟上,在这方面,我认为我们已经做了很多。

2K10

为 Vue 配置 GraphQL API

接前文为 Django 配备 GraphQL API,Django 提供 GraphQL 接口服务之后,我们需要让前端来消费这些接口数据,以 Vue 为例,看一看前端如何访问后端 GraphQL API...使用 Vue Apollo Vue Apollo[2] 是一个三方库,可以让你在 Vue 的应用中使用 GraphQL使用起来也很轻松,在上述 hello-world 目录下,也就是 package.json...同级的目录下,打开命令窗口执行: vue add apollo 这个命令会自动安装 npm 包:graphql graphql-tag @apollo/client。...Django 里面的 graphql查询语句,因为需要传入参数,这里外层做了一下封装,不要问为啥这样写,这是 apollo 规定好了的,我们只需要比葫芦画瓢,如下: query categoryByName...由于搜索框有默认 'Dairy' 因此显示时已经查询出了 Django 的数据。 改变搜索的菜谱分类名称,可以看到结果立刻显示: ?

1.2K20

GraphQL 入门详解

简介 定义 一种用于API调用的数据查询语言 核心思想 传统的api调用一般获取到的是后端组装好的一个完整对象,而前端可能只需要用其中的某些字段,大部分数据的查询和传输工作都浪费了。...的查询请求,它接收一个options参数,其中schema是一个 GraphQLSchema实例,我们接下来定义,graphiql设置为true可以在浏览器中直接对graphQL进行调试。...GraphQL的客户端有多种实现,本次项目使用 Apollo,最流行的GraphQL Client。更多client请参考 GraphQL Clients。...安装依赖 安装如下依赖: $ cd client $ npm i apollo-boost react-apollo graphql 其中 apollo-boost 是apollo client本身,...react-apollo 是react视图层的集成,graphql 用于解析graphql查询语句。

2.1K20

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

在本指南中,我们将深入探讨如何利用ServBay一站式环境和Docker,构建可扩展的GraphQL微服务。...我们将从微服务架构和GraphQL的基础知识入手,逐步深入到如何利用现代工具和技术构建、容器化并部署我们的微服务。...主要功能包括声明式数据获取:使用 GraphQL,客户端可以在查询中精确指定所需的数据,包括字段和关系。这消除了传统 REST API 经常出现的数据过度获取和获取不足的问题。...如何构建GraphQL微服务在构建GraphQL微服务时,我们将遵循以下步骤:第1步:使用ServBay设置环境不同于传统的手动安装Node.js,ServBay提供了预配置的环境,包括各个版本的Node.js...模式GraphQL模式是你的数据和操作(查询和变更)的类型系统的描述。

13200

在 redux 应用中使用 GraphQL

在本教程中,您将学习如何通过 Apollo Client 来获取和管理数据。 您将不再需要编写多个操作调度程序、reducer 和规范化程序来在前端和后端之间获取并同步数据。...快速的启动一个服务端环境 启动一个 redux 脚手架 增加一个 GraphQL 客户端 (Apollo Client) 使用 GraphQL 获取数据 获取更多的数据 接下来要做的 1....客户端正在运行,现在是开始添加 GraphQL 客户端的时候了。我们的目标是使用 GraphQL 查询,从服务器轻松获取数据并将其呈现在着陆页(HomeView)中。 3....如果想要使用 GraphQL 查询语句而不是 action dispatchers 来获取数据,需要做以下改变: 1....在我们的 GraphQL 服务器中,并没有定义如何获取 authors。

1.9K10

防止你的GraphQL API被恶意查询

在这篇文章中,他描述了他们是如何在攻击中保护GraphQL API。 使用GraphQL,你可以随时查询想要的内容。 这对于使用API来说是惊人的,但也具有复杂的安全隐患。 ...不幸的是,它还有两个主要的折衷: 1、我们永远不能更改或删除查询,只能添加新的查询:如果任何用户运行过时的客户端,我们不能阻止他们的请求。 ...我们检查了我们的客户端,我们使用的最深的查询有7个级别,所以我们使用了(相当宽松的)最大深度为10的,并将其添加到我们的验证规则中: app.use('/api', graphqlServer({   ...(尽管DataLoader可能会缓解数据库压力,但网络和处理压力不会) 我们没有将第一个参数的类型设置为Int(允许任意数量),而是使用graphql-input-number创建了一个自定义标量,该标量将最大限制为...我通过Apollo Engine公开的性能跟踪数据确定了某些解析器的复杂程度。 我看了整个模式,并根据p99服务时间分配了一个

1.8K10

GraphQL项目中前端如何预生成Persisted Query

但是这样带来了几个坏处: 我明明只需要部分数据, 你却给我返回了整个对象,不太合理 如果整个对象过于庞大 甚至你需要多个表查询拼一个对象给我, 那么我只取其中的一小部分而已, 性能开销浪费了 我只需要部分信息...如何使用persisted query?...support with Apollo Link 它里面已经有介绍如何使用, 以及工作原理了: How it works When the client makes a query, it will optimistically...预生成persisted query 刚刚我们介绍了, 如何使用过程中生成. 但是如何预生成呢? 也就是, 在前端部署的过程中或者是在访问页面之前就已经生成好....· apollographql/apollo-client · GitHub, 但是使用上述代码也是没有问题的.

98720

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

从这个意义上说,它是数据库无关的, 而且可以在使用 API 的任何环境中有效使用,我们可以理解为 GraphQL 是基于 API 之上的一 层封装,目的是为了更好,更灵活的适用于业务的需求变化 GraphQL...比如:字段冗余,扩展性差、无法聚合 api、无法 定义数据类型、网络请求次数多 GraphQL 的出现整好弥补了 RESTful APi 的不足 使用 GraphQL 的公司 目前已经有很多的公司在使用...修改 删除 五、Vue中使用GraphQl 5.1 使用graphQl简单查询 安装 找到Vue中集成GraphQl的文档 https://github.com/vuejs/apollo https...将它与vue-apollographql一起安装: npm install vue-apollo graphql apollo-boost --save 在src/main.js中引入apollo-boost...:h=>h(App) }) 简单查询 组件加载的时候就会去服务器请求数据,请求的数据会放在navList这个属性上面,在模板中可以直接使用当前属性 简单查询文档 带参数查询参考 import gql from'graphql-tag

5.1K42
领券