为什么要用 GraphQL?REST - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为什么要用 GraphQL?REST

REST是网络的基石建筑风格之一APIs。不过,随着世界的互联程度变得越来越高,开发稳健且可扩展的应用程序的需求成为更紧迫的问题。虽然REST通常用于构建 WebAPIs,但已经发现RESTful实现中反复出现的几个缺点:

  1. 数据请求:使用 RESTfulAPIs,您通常会通过端点请求所需的数据。在您的数据可能没有那么整齐打包时,就会出现问题。您需要的数据可能位于多个抽象层后面,获取数据的唯一方法是使用多个终端节点,这意味着发出多个请求以获取所有数据。

  2. 超取和低取:除了多个请求的问题外,来自每个端点的数据都是严格定义的,这意味着即使从技术上讲API,您也将返回为此定义的任何数据。

    这可能会导致过度获取,这意味着我们的请求返回多余的数据。例如,假设您请求公司个人数据,并希望知道某个部门的员工姓名。返回数据的终端节点将包含姓名,但也可能包含其他数据,例如职位或出生日期。因为API是固定的,所以你不能只请求名字;其余的数据是随之而来的。

    相反的情况是,我们没有返回足够的数据,这称为获取不足。要获取请求的所有数据,您可能需要向服务发出多个请求。根据设置数据结构的方式,您可能会遇到效率低下的查询,从而导致类似于令人头痛的 n+1 问题的情况。

  3. 开发迭代缓慢:许多开发人员RESTfulAPIs根据其应用程序的流程对其进行定制。不过,随着应用程序的扩展,前端和后端可能需要进行大量更改。因此,APIs可能不再以高效或有影响力的方式适应数据的形状。由于需要API修改,这会导致产品迭代速度变慢。

  4. 大规模性能:由于这些复杂的问题,很多领域的可扩展性都会受到影响。应用程序端的性能可能会受到影响,因为您的请求返回太多的数据或太少的数据(导致更多请求)。这两种情况都会对网络造成不必要的压力,从而导致性能下降。在开发人员方面,开发速度可能会降低,因为您的数据APIs是固定的,不再适合他们要求的数据。

GraphQL 的卖点是克服以下缺点。REST以下是 GraphQL 为开发人员提供的一些关键解决方案:

  1. 单个终端节点:GraphQL 使用单个终端节点查询数据。无需构建多个APIs以适应数据的形状。这会导致通过网络传输的请求减少。

  2. 获取:GraphQL 直接定义所需的数据以解决长期存在的过度获取和获取不足问题。GraphQL 允许您设置数据形状以满足您的需求,从而仅收到所要求的内容。

  3. 摘要:G APIs raphQL 包含一些组件和系统,它们使用与语言无关的标准来描述数据。换句话说,数据形状和结构是标准化的,因此,前端和后端知道如何通过网络发送数据。这使两端的开发人员可以使用 GraphQL 的系统,而不是围绕它们工作。

  4. 快速迭代:由于数据标准化,在开发的一端进行更改时,可能不需要在另一端进行更改。例如,前端表示形式更改可能不会导致在后端进行大量更改,因为 GraphQL 可以轻松修改数据规范。您可以直接定义或修改数据的形状,以满足应用程序扩展时的需求。这会导致潜在的开发工作减少。

这些只是 GraphQL 的一部分好处。在接下来的几节中,您将学习 GraphQL 的结构以及使其成为独特替代方案的属性。REST