Categories
程式開發

GraphQL两年实战避坑经验


本文作者分享了在生产环境中使用GraphQL的一些经验和解决方法,并给出了一些构建实用GraphQL查询和变更(Mutation)的建议。

本文最初发布于Medium,经原作者Stein Janssen授权由InfoQ中文站翻译并分享。

GraphQL已得到广泛认可并日益流行。我们在使用中遇到了一些非常有挑战性的问题,值得撰文分享。本文将使用一个示例配置来阐释问题,并给出相应的解决方法。

GraphQL两年实战避坑经验 1

本文作者使用GraphQL Voyager生成的关系概览图

首先谈谈我们为什么会选择GraphQL?

  • 无需操心如何更新文档,所有的查询(Query)和变更会自动形成文档。
  • 无需获取整个数据集,我们可以编写仅仅返回所请求数据的查询。
  • 对前端提供统一的访问点。从数十个不同API中获取数据并非易事。GraphQL支持开发人员将所有API进行拼接(Stitching)。

拼接(Stitching)

拼接(Stitching)让我们可以从同一端点获取所有数据。这听上去不错,但它也会导致一些非常棘手的问题。举例说明:

GraphQL两年实战避坑经验 2

如上图所示,一个前端与Public API通信。Public API拼接了Order API,后者又拼接了Product API。前端唯一能访问的是Public API。看上去这种链式拼接方式并没有太大的问题,但是在面对数十层级的API拼接时,应用发布将成为一场灾难。