GraphQL
API
Mobile
Backend
Frontend
Performance

适用于应用程序的 GraphQL:实施指南

适用于应用程序的 GraphQL:实施指南

[GraphQL0彻底改变了应用程序使用 API 的方式。客户端请求的不是固定端点,而是其所需的数据。本指南介绍了 GraphQL、与 REST 的比较以及如何在移动应用程序中实现它。

什么是 GraphQL

定义

Facebook 开发的 API 查询语言。

概念

客户端定义响应结构,而不是服务器。

架构

定义可用数据的类型化合同。

GraphQL 与 REST

过度获取

REST 返回固定数据。 [GraphQL1 仅返回订单。

获取不足

REST 可能需要多次调用。 查询中的 GraphQL

灵活性

客户控制他们收到的内容。

版本控制

[GraphQL3 在没有 API 版本的情况下发展模式。

基本概念

查询

获取数据。读取操作。

突变

修改数据。写操作。

订阅

通过 WebSocket 获取实时数据。

架构

类型和操作的定义。

解决

为每个字段获取数据的函数。

移动设备的优势

数据经济

传输的字节数更少。

减少延迟

一次通话与多次通话。

离线优先

最智能的缓存。

打字

架构作为合同。代码生成。

后端实现

GraphQL 服务器

Apollo 服务器,[GraphQL4 瑜伽,Hasura。

架构设计

模型域,而不是[数据库5。

解析器

从任何来源获取数据。

###数据加载器

批处理以避免 n+1 查询。

移动客户端

###Apollo客户端

iOS、Android、React Native。功能丰富。

接力

脸书。有意见,优化。

GraphQL 请求

拿走吧。对于简单的情况。

代码生成

从架构生成的类型。类型安全。

查询语言

字段

准确指定您想要的内容。

参数

过滤和定制。

别名

重命名响应中的字段。

碎片

重复使用选择。

变量

动态参数。

突变

语法

与查询类似,但要修改。

输入类型

复杂对象作为参数。

回应

返回更新后的数据。

乐观更新

UI 在响应之前更新。

订阅

用例

聊天、通知、实时提要。

交通

WebSocket、SSE。

缓存

自动更新缓存。

缓存

标准化缓存

按 ID 存储的实体。

获取策略

缓存优先、仅网络、缓存和网络。

无效

突变后更新缓存。

坚持

离线持久缓存。

##性能

查询复杂性

限制深度和复杂性。

分页

[对于大型列表,基于光标6。

持久查询

散列而不是完整字符串。

CDN

用于公共查询的边缘缓存。

安全

身份验证

标头中的令牌。

授权

验证解析器的权限。

速率限制

通过操作,而不是端点。

查询深度

限制深度以防止滥用。

错误处理

部分成功

[GraphQL7 可能会返回数据和错误。

错误类型

按错误类型自定义。

客户处理

优雅地处理错误。

工具

###GraphiQL/游乐场

用于探索模式的界面。

代码生成器

graphql-codegen。自动类型。

阿波罗工作室

监控、模式注册表。

代码检查

eslint-插件-graphql。

REST 迁移

循序渐进

在 REST 旁边添加 [GraphQL8]。

联邦

多种服务 [GraphQL9 联合起来。

包装

[GraphQL10 位于现有 REST 之前。

最佳实践

模式优先

在实施之前定义模式。

命名

明确的约定。 PascalCase 类型、camelCase 字段。

文档

架构中的描述。

弃用

标记过时的字段。

何时使用 GraphQL

适合

  • 具有复杂数据的移动应用程序
  • 多个不同的客户
  • 产品快速迭代

不适合

  • 简单的API
  • 大量文件上传
  • 密集实时(考虑 gRPC)

结论

[GraphQL11 对于需要效率和灵活性的移动应用程序来说功能强大。学习概念,选择合适的堆栈并严格实施。结果是更快的应用程序和更高效的开发。

##常见问题解答

1) [GraphQL12 取代 REST? 不一定。每个都有用例。它们可以共存。

2) [GraphQL13? 比 REST 慢吗? 不是天生的。这取决于实施。

3)我需要重写后端吗? 不会。[GraphQL14 可以包装现有服务。

4) 特定于移动设备还是适用于网络? 适用于任何客户。移动受益匪浅。

5) Apollo 是强制性的吗? 不。它很受欢迎,但还有其他选择。

另请阅读

  • [现代 GraphQL API:架构设计、性能和有效模式15
  • [GraphQL 应用程序:成本、价格和采用前的清单16
  • [应用后端:架构、技术和最佳实践17
  • [应用中的微服务:移动分布式架构18
  • [GraphQL应用:真实案例的成本和定价19
  • [应用程序API20