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

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

没有静态类型意味着要注意类型验证 无论如何努力避免这种情况,你迟早会遇到 JSON 属性拼写错误、发送或接收的数据类型错误、字段丢失等问题。...你需要同时服务器和客户端上实现每个端点 还有大量的库可以 ORM 或直接数据库自省的帮助下自动生成 REST 端点。即使使用了这样的库,它们通常也不是很灵活或可扩展的。...如果开发团队不是全栈的,那么服务器和客户端团队之间的沟通就至关重要,没有机器可读的 API 规范的情况下更是如此。 GraphQL 如何做得更好?...现在,客户端和服务器团队可以一种更好的方式 API 设计上开展合作,缩短迭代时间,共享自动生成的文档,它们让每次 API 更新对每个人都可见。...服务器只需这种方式实现顶级模式对象。 一个简单的例子 GraphQL 模式定义了可用于服务器和客户端之间通信的类型。

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

解密国内BAT等大厂前端技术体系-携程篇(长文建议收藏)

整个业界在前端框架不断迭代中,也寻找到了许多突破方向,例如跨平台中的RN、Flutter,服务端GraphQL、Serverless,前端和客户端的融合越来越紧密,前端Node和Electron的加持下...其次,伴随着人工智能的加持,端上的人工智能应用也变的普及,减少了服务端的交互,提高了系统的实时响应能力。...日志展示上一次用户session为集合,按照时间轴显示不同的页面信息,同时每个页面的详细信息中会提供当前页面所有的网络请求、用户行为埋点、研发自主埋点等等内容。 MTP - 无线技术平台 ?...技术选型上,开发语言选用了 TypeScript,跑 Node.js v10.x 版本上,服务端框架是 Koa v2.x 版本,使用 apollo-server-koa 模块去运行 GraphQL 服务...Apollo-GraphQL 是 Node.js 社区里,比较知名和成熟的 GraphQL 框架。做了很多的细节工作,也有一些相对前沿的探索,比如 Apollo Federation 架构等。

1.4K20

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

开发工作早期,我们完全可以使用一个端口的内存内实现。 通过依赖注入方法,这种架构还会让开发人员优先编写可以测试的代码。这样我们就可以尽可能地减少可能导致代码不可测试的具体依赖项。...简化的数据获取架构,其中视图可以是任意前端框架——nerdwallet 数据图连接的两端均有 Apollo 服务器和客户端,它可以简化获取逻辑、错误逻辑、重试逻辑、分页、缓存、optimistic UI...,这些方法在被调用时会将操作转换为适当的 API 跨越数据图。...API 客户端了解如何解决该请求的唯一方法是检查错误响应(指望错误消息描述了所需的信息,否则也没用)。...架构层面,由于 GraphQL 仅向客户端公开单个端点,因此它满足了这一原则。 客户端隐藏了字段解析机制的所有复杂性,它只需关注如何GraphQL 服务器之上构建即可。

2.1K20

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

我们支持服务端 SDKs 和客户端 SDKs。挑战在于我们没有所有语言的服务器 SDKs。许多商户出于各种原因不想使用 SDKs。我们决定在服务端上为商户提供更好的 API。...更容易测试Apollo Client 等 GraphQL 工具可以更容易地 React 等 UI 中添加 GraphQL 查询。它有助于保持代码位于同一位置,并有助于调试和分离关注点。...它发展之后,我们通过添加内部插件和中间件来提供支持,规范化错误处理、检测和减少内部网络聊天,但我们希望能够更快地构建支持。 我们对单图方案的采用速度很慢。...我们演示了 GraphQL 如何帮助提高内部和外部开发人员的生产力,GraphQL 如何帮助减少交付功能的时间,以及我们如何能够向客户端隐藏复杂性。...我们 KPI 上没有指标,例如首次集成到生产中。通过 GraphQL,我们能够展示我们的学习、工具和字段级别的监测情况。 8 你如何开始自己的公司采用 GraphQL

3K20

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

但当 Apollo Client 进入 2.0 版本,不再依赖于 Redux,如何去同步本地和远端的数据,变得比原来更加棘手。...解决问题的基础 我们知道这个问题需要解决,现在让我们思考一下,如何正确地 Apollo Client 中管理状态?...GraphQL 并不在乎请求是要发送给一个 gRPC 服务器,或是 REST 端点,又或是客户端缓存。GraphQL 是一门针对数据的通用语言,与数据的来源毫无关联。...Resolvers 使用 Apollo Client 管理应用状态后,Apollo cache 成为了应用的单一数据源,包括了本地和远端的数据。那么我们应当如何查询和更新缓存中的数据呢?...@client 指令 当应用的 UI 触发了一个 mutation 之后,Apollo 的网络栈需要知道要更新的数据存在于客户端还是服务器端。

2.3K100

redux 应用中使用 GraphQL

您需要编写自定义代码来调用服务器接口,解释数据,对其进行规范化并将其插入到存储中 - 同时跟踪各种错误和加载状态。 本教程中,您将学习如何通过 Apollo Client 来获取和管理数据。...该页您可以看到一个如下 GraphQL 界面: ? GraphiQL 允许您测试不同的查询,并立即看到从服务器获得的响应。...增加一个 GraphQL 客户端(Apollo 客户端) 安装 apollo-client, react-apollo, 和 graphql-tag。...增加 mapQueriesToProps() 并且定义一个能够获取作者信息的 GraphQL 查询。注意,这个查询语句其实和我们之前 GraphIQL 界面上测试的语句是一样的。...我们的 GraphQL 服务器中,并没有定义如何获取 authors。

1.9K10

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

使用GraphQLApollo之后,前端方面只需要全局定义一个URL,接下来就是定义每个Query需要取得的数据,根据页面定制接口数据。同时还可以做全局的异常处理,接口请求的合并。...对于我们应用的订单页面数据,Restuful场景下首先会根据订单ID请求订单信息,接着依据从订单信息中得到的产品ID获取产品详细数据,之后还需要根据创建人ID获取客户详细数据,最后将这些数据结合起来才能渲染页面...结合GraphQLApollo的情况下我们的鉴权方案主要依赖于AppAsyncStorage和web localStorage这两个数据可持久化的方案。...现在转换到GraphQL后,请求发起机制、数据刷新、文件上传等等都完全不同,相当于要从头开始学习新的东西。 使用Apollo的过程中我们也遇到了一些坑。...我们目前端上有树莓派、tv、pad、web、app、微信端、ipad。 以上为全部分享内容,谢谢大家! IT大咖说 | 关于版权 本文由“IT大咖说”原创,转载时请注明作者、出处。

7.4K20

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

文章会 JavaScript 生态和 JavaScript 客户端调用与服务端开发体验为例。...初识 GraphQL 的实现能让客户端获取结构化的方式,从服务端结构化定义的数据中只获取想要的部分的能力。 符合 GraphQL 规范的实现我称之为 GraphQL 引擎。...}, updateTime: '2020-04-11' } } 预期数据会返回 data 中,当有错误时,会出现 errors 字段并按照规范规定的格式展示错误。... Apollo 实现的 Graphql 生态中则是支持自定义 Schema 端可用的指令,对 Document 端的自定义指令实现暂不支持且不建议支持。...几乎是 Apollo GraphQL: Apollo 提供的实现和 GraphQL 生态,内容丰富,不止一套引擎,还提供了纯客户端使用(不局限JavaScript)多种工具。

2.3K20

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

本指南中,我们将深入探讨如何利用ServBay一站式环境和Docker,构建可扩展的GraphQL微服务。...主要功能包括声明式数据获取:使用 GraphQL客户端可以查询中精确指定所需的数据,包括字段和关系。这消除了传统 REST API 经常出现的数据过度获取和获取不足的问题。...高效的类型系统: GraphQL 拥有强大的类型系统,可以 API 中定义数据的结构和关系。高效的数据加载功能: GraphQL 使客户端能够单个请求中检索多个资源。...如何构建GraphQL微服务构建GraphQL微服务时,我们将遵循以下步骤:第1步:使用ServBay设置环境不同于传统的手动安装Node.js,ServBay提供了预配置的环境,包括各个版本的Node.js...然后,无论底层基础设施如何,这些映像都可以作为独立的组件隔离的容器环境中执行,并配备所需的计算资源。

13600

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

Next.JS 为例。Next 提供了非常轻量级的语法定义 API。你可以将多个调用封装到一个 API 中,让它们服务器端完成,而不是从客户端发出多个请求。...在这种情况下,如果想引入一个破坏性更改,而又不破坏客户端,该怎么办?这是不可能的。你必须一种非破坏性的方式引入此更改。了解下 Facebook 是如何避免破坏客户端的,这很有趣。...但是,GraphQL 模式是如何保证的呢? GraphQL 内省是向服务器发送一个特定的 GraphQL 查询获取关于 GraphQL 模式的信息。...GraphQL 服务器可以自由地使用它期望的任何类型进行响应。如果你发送一个查询,则服务器的响应可以不符合自省响应中的 GraphQL 模式。 Apollo Federation 为例。...你将模式上传到模式注册中心,然后因为错误部署了 GraphQL 服务器的错误版本。如果你更改字段的类型,客户端可能就无所适从了。

2K10

你不知道的 GraphQL

你会发现借助于GraphQL工具链,这并不比开发Rest客户端难多少。 一切从Schema开始 当我开发一个GraphQL服务时,我总会从白板上设计模型开始,而不是上来就写代码。...客户端用户可以看到到底发生了什么事儿。 但这种响应中显示错误信息的简单处理,并没有服务端记录错误日志。...把resolver定位为一个纯函数,是GraphQL设计者们的另一个明智之举。 查询引擎的集成化测试 那么,如何测试数据依赖,类型和聚合逻辑呢?...另一种Apollo公司比较推荐的测试手段是使用来自graphql-tools中的mockServer来测试。基于文本化的schema,它会创建一个内存数据源,并填充伪造的数据。...现在,User schema声明文件中,我们如何添加字段到已经存在的query类型中?

3.3K20

GraphQL 基础实践

你可以将 GraphQL 理解成一个中间件,是连接客户端和数据库之间的一座桥梁,客户端给它一个描述,然后从数据库中组合出符合这段描述的数据返回。...例如在 Android 或 iOS 客户端上,发版升级了一个很爆炸的功能,同一个API上可能为了支持这个功能而多吐一些数据。但是对于未升级的客户端来说,这些新数据是没有意义的,也造成了一定的资源浪费。...以及 Meteor 团队开发的 Apollo,同时开发了客户端和服务端,同时也支持流行的 Vue 和 React 框架。...通过上面的类型定义,可以看到 GraphQL 中的类型系统起到了很重要的角色。本例中,Schema 定义了 name 为 String类型,那么你就不能传 Int类型进去,此时会抛出类型不符的错误。...字段得到的是一组 id,不符合 Schema 的定义,此时 GraphQL 会抛出错误

12.8K20

解读GraphQL|洞见

Facebook自2012年就已经移动端上使用GraphQL了,只是去年才将其开源。...在这点上GraphQL有点像RPC,可以生成GraphQL Schema来作为服务端和客户端间的契约。一般这个过程也会自动生成JSON schema来方便你做其他的契约测试。...因此使用GraphQL的过程中,我们要对安全问题更加重视。 3.需要重新思考Cache策略 REST虽然会引起一些性能问题,但它也HTTP Cache的方式解决了很多性能问题。...与此同时,随着客户端越来越复杂,我们应该如何同步服务端状态,如何管理缓存等等。...(图片来自:http://t.cn/R6qcOfq) 我们将会从Apollo开始,感受GraphQL究竟是如何工作的,之后我们也会看到这个方案中的一些问题,而这些问题会将我们引向更深层的Web客户端问题

1.1K70

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

GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且 没有任何冗余。...查询的返回结果就是输 入的查询结构的精确映射 客户端可以自定义 Api 聚合 如果设计的数据结构是从属的,直接就能在查询语句中指定;即使数据结构是独 立的,也可以查询语句中指定上下文,只需要一次网络请求...将它与vue-apollographql一起安装: npm install vue-apollo graphql apollo-boost --save src/main.js中引入apollo-boost...控制台查看查询结果 src/main.js配置vue-apollo插件 import VueApollofrom'vue-apollo' Vue.use(VueApollo); 创建Apollo...provider Provider保存了可以接下来被所有子组件使用的Apollo客户端实例 const apolloProvider = newVueApollo({     defaultClient

5.1K42
领券