解决 GraphQL 查询时无需再执行第二次解析

GraphQL 是一种用于 API 的查询语言,它提供了一种更有效地获取数据的方式。在 GraphQL 中,客户端可以明确地指定需要的数据,而不必像 REST API 一样获取整个资源。然而,当我们在使用 GraphQL 时,有时候还需要执行第二次解析才能获取到我们需要的数据。本文将介绍如何解决这个问题。

问题描述

假设我们有一个查询,需要从服务器获取一些数据,然后在客户端上进行处理。我们可以使用 GraphQL 查询来获取这些数据。下面是一个示例查询:

----- -
  ----- -
    --
    -----
    ------ -
      ----
    -
  -
-

在这个查询中,我们要获取所有文章的 id、title 和 author 的 name。服务器将返回以下数据:

-
  ------- -
    -------- -
      -
        ----- --
        -------- ----------
        --------- -
          ------- ------
        -
      --
      -
        ----- --
        -------- --------
        --------- -
          ------- ------
        -
      -
    -
  -
-

现在,我们需要在客户端上对这些数据进行处理。我们可以使用一个函数来解析数据:

-------- --------------------- -
  ------ ------------------ -- --
    --- --------
    ------ -----------
    ----------- ----------------
  ----
-

这个函数将返回一个包含文章 id、title 和 author 的 name 的数组。现在,我们可以使用这个函数来处理我们的数据:

----- --------- - -------------------------
----- ----- - ----------------------

在这个例子中,我们需要执行第二次解析才能获取到我们需要的数据。

解决方案

为了解决这个问题,我们可以使用 GraphQL 的 fragmentsfragments 允许我们定义一组字段,然后在查询中引用这些字段。这样,我们就可以在客户端上直接使用查询返回的数据,而无需执行第二次解析。

下面是一个使用 fragments 的示例查询:

----- -
  ----- -
    -------------
  -
-

-------- ---------- -- ---- -
  --
  -----
  ------ -
    ----
  -
-

在这个查询中,我们使用 fragment 定义了一组字段 PostFields,然后在 posts 查询中引用了这些字段。服务器将返回以下数据:

-
  ------- -
    -------- -
      -
        ----- --
        -------- ----------
        --------- -
          ------- ------
        -
      --
      -
        ----- --
        -------- --------
        --------- -
          ------- ------
        -
      -
    -
  -
-

现在,我们可以直接使用查询返回的数据。我们不再需要执行第二次解析,而是可以直接使用以下代码来处理数据:

----- --------- - -------------------------
----- ----- - ------------------ -- --
  --- --------
  ------ -----------
  ----------- ----------------
----

总结

在本文中,我们介绍了如何使用 GraphQL 的 fragments 解决查询时无需再执行第二次解析的问题。使用 fragments 可以让我们在客户端上直接使用查询返回的数据,从而提高效率。希望本文对您有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65ffa4d4d10417a222adc4c2