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

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

GraphQL 服务器可以自由地使用它期望的任何类型进行响应。如果你发送一个查询,则服务器的响应可以不符合自省响应中的 GraphQL 模式。以 Apollo Federation 为例。...当我们讨论 GraphQL 中的类型安全,其实我们的意思是,我们相信 GraphQL 服务器的行为会与自省查询响应保持一致。为什么我们不能同样信任接口定义规范呢?想我们可以。...需要有人坐下来,编写如何使用 API 的示例查询和用例。否则,真的很难上手。 因此,尽管社区一直在说,“GraphQL 是自记录的”,但这个特性本身并不能成为一个有用的 API。...他总结说,因为我们只使用一个 GraphQL 服务器,所以没有这个问题。 很抱歉,但是又一次得出了一个完全不同的结论。如果将规则设置为不允许版本控制,则可以添加新的端点或替换现有端点的实现。...11 的结论 当 Kyle 问“为什么要用 GraphQL想他实际上是在说“为什么要用 Apollo”。答案很简单。没有人愿意围绕 REST API 构建一个丰富的生态系统。

2K10

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

最近,有机会为自己的项目和客户开发和运行一些使用 GraphQL API 构建的移动和 Web 应用程序。这真是一个很好的体验,尤其要感谢令人惊叹的 PostGraphile 和 Apollo。...至此,再也无法回过头来享受使用 REST 的工作了。 REST 有什么问题? 每个 REST API 都是独特的 公平地说,REST 甚至不是一个标准。...如果有一个 OpenAPI 规范,可以为你生成客户端 / 服务器类型声明,那就更好了。 但你真能负担起在所有项目中都做到这样?...当你的团队在冲刺期间决定重命名或重新安排对象字段,你能负担起上线/api/v1.99端点的成本?即使完成了,团队会不会忘记更新规范并通知客户端开发人员更新内容?...本质上,所有通信都通过服务器一个预定义的 URL(通常是/graphql运行,借助一个简单的POST请求,其中包含序列化为 JSON 有效负载的查询

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

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

作者 | Khalil Stemmler 策划 | 田晓旭 在服务器使用 GraphQL 代替 REST 是有很多好处的,使用 Apollo Client 取代自己编写的数据获取逻辑也有很多优势。...3数据图 数据图 这个理念是最早在 2019 年 GraphQL 峰会上听 Apollo GraphQL 的首席技术官 Matt DeBergalis 提出的。...数据图从客户端延伸到服务器,并为现代 Web 应用程序中获取数据和更改状态面临的最常见基础架构问题提供了答案 为了通过 GraphQL 与后端服务通信,Apollo Client 公开了几种客户端方法...由于具备执行自省查询的能力,所以 GraphQL Playground 的 GraphQL 资源管理器可以显示 GraphQL 端点的所有功能 在 REST 领域中,只看到了使用 Swagger 构建的...知道这样理想化的情况并不总是存在,至少没有适当的工具链是不可能做到的。

2.1K20

在 redux 应用中使用 GraphQL

快速的启动一个服务端环境 启动一个 redux 脚手架 增加一个 GraphQL 客户端 (Apollo Client) 使用 GraphQL 获取数据 获取更多的数据 接下来要做的 1....启动一个服务端环境 首先,我们需要一个 GraphQL 服务器。最简单的方式就是完成这一教程. 如果你不想这么麻烦的话,可以克隆的 repo, 这个项目和上述教程几乎是一模一样的。...我们启动的服务器支持从一个 SQLite 数据库中进行 GraphQL 查询。...客户端正在运行,现在是开始添加 GraphQL 客户端的时候了。我们的目标是使用 GraphQL 查询,从服务器轻松获取数据并将其呈现在着陆页(HomeView)中。 3....服务器知道了 "authors" 查询的含义,让我们回到客户端。

1.9K10

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

集成可以自由使用任何编程语言:原来 Braintree 并没有公共 API。我们支持服务端 SDKs 和客户端 SDKs。挑战在于我们没有所有语言的服务器 SDKs。...使用 GraphQL,我们可以获得字段级的检测,并清楚了解哪个解析器花了多长时间、常见错误以及调用了哪些字段。这个字段级检测有助于智能地弃用不再使用的字段。...更容易测试:Apollo Client 等 GraphQL 工具可以更容易地在 React 等 UI 中添加 GraphQL 查询它有助于保持代码位于同一位置,并有助于调试和分离关注点。...如果我们遗漏了一个参数,我们将返回文档并再次搜寻这个参数。这使得使用 API 变得比较困难和耗时。...当我们向我们的团队介绍 GraphiQL 和 Playground 工具,他们立刻看到了使用 GraphQL 端点和 playground 工具来在浏览文档发出请求的好处。

3K20

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

我们得到了一个精简的写法,它已经是一段合法的 GraphQL 查询语句了。 其中的设计思路和过程是如此简单直接,很难想象还有别的方案比目前这个更满足要求。 当然,只有字段和层级,并不足够。...五、GraphQL 的几种使用模式 到目前为止,我们见识到了 GraphQL 的高自由度和灵活性。在搭建 GraphQL Server ,也可以根据实际需求和场景,采用不同的模式。...开发语言选用了 TypeScript,跑在 Node.js v10.x 版本上,服务端框架是 Koa v2.x 版本,使用 apollo-server-koa 模块去运行 GraphQL 服务。...正如 GraphQL 可以单独不作为 server,在任意支持 JavaScript 运行的地方使用一样。 我们将使用 koa-compose 这个 npm 模块,去构造我们的 Resolver。...当我们多个字段要复用相同的逻辑,编写成中间件,然后将 handler 变成数组形式即可。

3.5K21

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

我们得到了一个精简的写法,它已经是一段合法的 GraphQL 查询语句了。 其中的设计思路和过程是如此简单直接,很难想象还有别的方案比目前这个更满足要求。 当然,只有字段和层级,并不足够。...五、GraphQL 的几种使用模式 到目前为止,我们见识到了 GraphQL 的高自由度和灵活性。在搭建 GraphQL Server ,也可以根据实际需求和场景,采用不同的模式。...开发语言选用了 TypeScript,跑在 Node.js v10.x 版本上,服务端框架是 Koa v2.x 版本,使用 apollo-server-koa 模块去运行 GraphQL 服务。...正如 GraphQL 可以单独不作为 server,在任意支持 JavaScript 运行的地方使用一样。 我们将使用 koa-compose 这个 npm 模块,去构造我们的 Resolver。...当我们多个字段要复用相同的逻辑,编写成中间件,然后将 handler 变成数组形式即可。

3.6K72

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

我们得到了一个精简的写法,它已经是一段合法的 GraphQL 查询语句了。 其中的设计思路和过程是如此简单直接,很难想象还有别的方案比目前这个更满足要求。 当然,只有字段和层级,并不足够。...五、GraphQL 的几种使用模式 到目前为止,我们见识到了 GraphQL 的高自由度和灵活性。在搭建 GraphQL Server ,也可以根据实际需求和场景,采用不同的模式。...开发语言选用了 TypeScript,跑在 Node.js v10.x 版本上,服务端框架是 Koa v2.x 版本,使用 apollo-server-koa 模块去运行 GraphQL 服务。...正如 GraphQL 可以单独不作为 server,在任意支持 JavaScript 运行的地方使用一样。 我们将使用 koa-compose 这个 npm 模块,去构造我们的 Resolver。...当我们多个字段要复用相同的逻辑,编写成中间件,然后将 handler 变成数组形式即可。

1.5K20

解读GraphQL|洞见

(图片来自:http://t.cn/RGdbRgV) 此外,当我们选择不合并资源,性能损耗经常比我们想象的严重:如果合并完全无关的资源,不合并也只是两个并发的请求,返回的时间大多只取决于更慢的API...3.静态类型 可能你已经注意到了,你输入的查询都有自动补全和类型纠错功能,这归功于GraphQL的静态类型系统。你可以在定义GraphQL Schema添加更多的类型来描述不同的资源。...type到底是个啥,以及知道服务端所有的type。...Intellij IDEA还有一个非常完善的GraphQL插件,当你服务端Schema有Breaking Change,客户端代码就会报错,有些编译插件也会产生编译错误。...如果不使用某些限制过大的查询,反复请求一条Load出所有Github用户的查询可能会让他们的服务器直接挂掉,GraphQL提高了被DDoS的风险。

1.1K70

GraphQL 基础实践

GraphQL 解决了什么问题 我们先来回顾一下我们已经非常熟悉的 RESTful API 设计。...那么,上面的这个请求描述称为一个 GraphQL 请求体,请求体即用来描述你要从服务器上取什么数据用的。一般请求体由几个部分组成,从里到外了解一下。 首先是字段,字段请求的是一个数据单元。...如果感叹号跟在 field 的后面,则表示返回该 type 的数据,此字段一定不为空。 通过上面的类型定义,可以看到 GraphQL 中的类型系统起到了很重要的角色。...想象这么一个页面,要列出两个电影的信息做对比,为了发挥 GraphQL 的优势,要同时查询这两部电影的信息,在请求体中请求 movie 数据。前面我们说到,请求体决定了返回数据的结构。...接下来引用到我们中间件的handle配置中,完美,大功告成,用 ThinkJS 搭建的 GraphQL 服务器就此告一段落,npm start 运行起来之后,用 GraphiQL “播放”一下你的请求体

12.8K20

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

解决问题的基础 我们知道这个问题需要解决,现在让我们思考一下,如何正确地在 Apollo Client 中管理状态?...我们可以使用 GraphQL mutation 来表述应用状态的变化过程,而不是去发送某个 action。在查询应用状态GraphQL query 也能以一种声明式的方式描述出组件所需要的数据。...Apollo Link 使得在 Apollo Client 中管理本地的数据成为可能,从一个 GraphQL 服务器中获取数据,可以使用 HttpLink,而从 Apollo 的缓存中请求数据,则需要使用一个新的...Defaults 前文的 defaults 字段是一个用于表示状态初始值的 object,当 state link 刚创建这个默认值会被写入 Apollo Client 的缓存。...@client 指令 当应用的 UI 触发了一个 mutation 之后,Apollo 的网络栈需要知道要更新的数据存在于客户端还是服务器端。

2.3K100

防止你的GraphQL API被恶意查询

,但幸运的是,Apollo团队创建了persistgraphql,它会自动从你的客户端代码中提取所有查询,并生成一个不错的JSON文件。...如果我们只通过查询白名单,已经严重限制了他们的选择,并且破坏了拥有GraphQL API的重要性。 那些限制是我们无法使用的,所以我们重新设计。...在最新发布的2017年MacBook Pro上本地运行了上述查询,并且我们的API服务器花费了10-15秒的时间来响应1M字节的JSON。 ...通过Apollo Engine公开的性能跟踪数据确定了某些解析器的复杂程度。 看了整个模式,并根据p99服务时间分配了一个值。 ...运行上面的evilQuery,现在我们添加了graphql-cost-analysis,收到一条错误消息,告诉GraphQL查询超过最大复杂度,请删除一些嵌套或字段,然后重试。

1.8K10

如何在 React.js 项目中使用 GraphQL

当与 React.js 结合使用时,这个强大的 JavaScript 库为创建动态、响应式的 Web 应用程序打开了无限的可能性。...在本指南中,我们将介绍如何将 GraphQL 无缝集成到您的 React.js 项目中。什么是 GraphQLGraphQL 是用于 API 的查询语言,也是用于执行那些查询运行时。...连接到 GraphQL 服务器要在 React.js 项目中使用 GraphQL,您需要连接到 GraphQL 服务器。...在这个例子中,假设您有一个在 http://localhost:4000/graphql运行GraphQL 服务器。您可以将此 URL 替换为实际的 GraphQL 服务器端点。...这只是一个起点,随着您的应用程序的发展,您现在可以探索更高级的功能,如 mutations、subscriptions 和使用 Apollo Client 进行缓存。

30140

构建带 Subscriptions 的 graphql golang 后端

1.介绍graphqlws 今天,我们开放了一个新的Go库来填补这个空白: graphqlw。...它有一个简单的目的: 实现GraphQL在WebSocket(由所有流行的GraphQL客户端使用),所以不必考虑与net/http无缝集成 与net/http无缝集成 提供访问已建立订阅的简单方法,执行身份验证并向相应的客户端发送更新...或者,您可以定义一个函数来对用户进行身份验证(在建立新连接Apollo客户端会将初始WebSocket消息与可选的authToken一起发送;该函数允许将令牌字符串解析为用户)。...使用Query , Variables和OperationName可以在需要重新执行订阅查询。...,你可能有兴趣使用Go作为你自己的GraphQL服务器

2.7K30

写在 2021: 值得关注学习的前端框架和工具库

这个问题的题主很明显遇到了大部分同学入门前端时会遇到的困惑:怎么这个还没学完又看到说那个才是主流的,怎么这个版本还没吃透又来了一个break change的新版本,怎么前端出框架的速度这么快??...同样是淘系到集团广泛使用的跨端方案。 Remax[19],小程序跨端框架,基于React,亮点是运行时方案(大部分跨端方案都是编译,还有Rax这种两套方案都支持的)。...GraphiQL[45],可视化的GraphQL API调试工具,直观的查看你的Schema、发起请求、查看问题,有一个增强版本是支持通过点击单选框生成查询语句,一没找到。...在TS中这个工具的主要能力就是生成TS的类型定义,同时它的插件体系还提供了更多的额外能力,如Apollo-Client的插件,让你可以直接使用封装好的的useXXXQuery等,前端连查询语句都不用写了...(不会有人为了跑Demo还CRA从头建一个项目吧) SnowPack[58],原SkyPack,好像是最早应用ES Module特性到开发服务器的打包工具。

4.1K10

写在2021: 值得关注学习的前端框架和工具库

前言 最近在知乎看到了这么个问题:学完Vue还有必要学习React和Node?...同样是淘系到集团广泛使用的跨端方案。 Remax,小程序跨端框架,基于React,亮点是运行时方案(大部分跨端方案都是编译,还有Rax这种两套方案都支持的)。...GraphiQL,可视化的GraphQL API调试工具,直观的查看你的Schema、发起请求、查看问题,有一个增强版本是支持通过点击单选框生成查询语句,一没找到。...在TS中这个工具的主要能力就是生成TS的类型定义,同时它的插件体系还提供了更多的额外能力,如Apollo-Client的插件,让你可以直接使用封装好的的useXXXQuery等,前端连查询语句都不用写了...(不会有人为了跑Demo还CRA从头建一个项目吧) SnowPack,原SkyPack,好像是最早应用ES Module特性到开发服务器的打包工具。 ESBuild,基于Go,是真的非常快。

2.8K10
领券