阅读 51

如何使用GraphQL-进阶教程:常见问题

接上篇 —— 如何使用 GraphQL-进阶教程:安全 —— 继续翻译How to GraphQL 系列教程

回答有关服务端缓存,身份验证,授权,错误处理,离线使用等的常见 GraphQL 问题。

基础和进阶系列翻译已完成:

  1. 介绍
  2. GraphQL 比 REST 的优点
  3. 核心概念
  4. 架构
  5. 客户端
  6. 服务端
  7. 更多概念
  8. 工具和生态
  9. 安全
  10. 常见问题

GraphQL 是数据库技术吗?

不是。GraphQL 经常会与数据库技术混淆。这是一个误解,GraphQL 是 API(而非数据库)的 查询语言(query language) 。从这个意义上说,它与数据库无关,可以与任何类型的数据库一起使用,甚至可以根本不使用任何数据库。

GraphQL 仅适用于 React / Javascript 开发人员吗?

不是。GraphQL 是一种 API 技术,因此可以在需要 API 的任何环境中使用。

服务端(backend) 上,可以使用可用于构建 Web 服务器的任何编程语言来实现 GraphQL 服务。除了 Javascript 之外,还有流行的 Ruby、Python、Scala、Java、Clojure、Go 和.NET 的参考实现。

由于 GraphQL API 通常是通过 HTTP 操作的,因此任何使用 HTTP 交流的客户端都可以从 GraphQL 服务器查询数据。

注意:GraphQL 实际上与传输层无关,因此也可以选择 HTTP 以外的协议来实现服务。

如何进行服务器端缓存?

尤其是与 REST 比较时,GraphQL 的一个常见问题是维护服务端缓存比较困难。使用 REST,可以轻松地为每个端点缓存数据,因为可以确保数据的 结构(structure) 不会改变。

另一方面,使用 GraphQL 不清楚客户端下一步将要请求什么,因此将缓存层放在 API 后面没有意义不大。

使用 GraphQL,服务端缓存仍然是一个挑战。有关缓存的更多信息,请参见GraphQL 网站

如何进行身份验证和授权?

身份验证和授权通常很混乱。身份验证(Authentication) 描述声明 (身份)identity 的过程。当使用用户名和密码登录服务并进行身份验证时,便会执行此操作。另一方面,授权(Authorization) 描述了 权限规则(permission rules) ,该规则指定了单个用户或用户组对系统某些部分的访问权限。

可以使用OAuth等常见模式来实现 GraphQL 中的身份验证。

为了实现授权,推荐将所有数据访问逻辑委托给业务逻辑层,而不是直接在 GraphQL 实现中处理它。如果想学习如何实现授权,可以看看Graphcool's permission rules

如何处理错误?

成功的 GraphQL 查询应该返回一个带有名为 "data" 的根字段的 JSON 对象。如果请求失败或部分失败(例如,由于请求数据的用户没有正确的访问权限),则会在响应中添加另一个名为 "errors" 的根字段:

{
  "data": { ... },
  "errors": [ ... ]
}
复制代码

有关更多的详细信息,可以参考GraphQL 规范

GraphQL 是否支持离线使用?

GraphQL 是(Web)API 的查询语言,从定义上讲仅可在线使用。但是,对客户端的离线支持是一个值得思考的问题。对于某些用法,Relay 和 Apollo 的缓存功能可能已经足够,但是还没有一种用于实际持久存储数据的流行解决方案。可以在RelayApollo的 GitHub issues 中获得更多的见解,其中讨论了离线支持。

可以找到一种有趣的离线使用和持久性方法


前端记事本,不定期更新,欢迎关注!


文章分类
前端
文章标签