解决 GraphQL Mutation 返回类型不一致的问题

阅读时长 6 min read

GraphQL 是一种用于 API 的查询语言,它使得客户端能够精确地指定需要的数据,同时避免了不必要的数据传输。在开发 Web 应用时,我们通常会使用 GraphQL 作为前端与后端之间的通信协议,以便于数据的请求和响应。然而,在使用 GraphQL Mutation 进行数据的修改或创建时,我们可能会遇到返回类型不一致的问题,导致客户端无法正常解析数据。本文将详细介绍如何解决这一问题,并提供示例代码和指导意义。

问题描述

在 GraphQL Mutation 中,我们通常会使用 returning 关键字指定需要返回的数据,例如:

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

上述 Mutation 的作用是创建一篇新的博客文章,并返回该文章的 ID、标题、内容以及创建时间。在大多数情况下,后端会根据 returning 中指定的字段返回对应的数据,因此客户端可以直接解析这些字段并使用它们。然而,有时候返回的数据并不会按照我们预期的格式进行返回,例如:

上述 Mutation 的 returning 关键字被省略了,因此后端将会按照默认的方式返回结果,可能并不包含我们指定的所有字段。此时客户端解析数据时就会发现返回的数据类型不一致,导致解析失败。

解决方案

为了解决 GraphQL Mutation 返回类型不一致的问题,我们可以使用以下两种方法:

方法一:指定默认返回值

在 GraphQL Schema 中,我们可以为 Mutation 类型指定一个默认的返回值类型,例如:

如上所示,我们在 @pgMutation 中指定了 defaultReturn 属性,将其设为一个空的 Post 类型。这样,即使客户端没有指定 returning 关键字,后端仍然会按照指定的返回值类型返回数据,确保返回数据的格式是一致的。

方法二:使用 GraphQL Fragments

GraphQL Fragments 是一种用于定义可重用的字段集合的语法,可以帮助我们在不同的查询和 Mutation 中重复使用相同的字段,避免代码冗余。在解决返回类型不一致的问题时,我们可以将 returning 中的字段抽象成一个 Fragment,例如:

然后在 Mutation 中使用该 Fragment 来指定返回的数据类型,例如:

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

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

如上所示,我们在 Mutation 中使用 ...PostFragment 来指定返回的数据类型,确保客户端可以正确解析数据。

示例代码

为了帮助读者更好地理解解决方案,下面提供一个示例代码:

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

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

如上所示,我们在 Mutation 中指定了需要返回的数据字段,使其与 Post 类型一致。

如上所示,我们在 Mutation 中指定了需要返回的数据字段,确保客户端可以正确解析数据。

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

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

如上所示,我们使用了 PostFragment 来指定需要返回的数据类型,确保客户端可以正确解析数据。

指导意义

通过上文的介绍,我们可以了解到解决 GraphQL Mutation 返回类型不一致的问题的两种方法:指定默认返回值和使用 GraphQL Fragments。使用这些方法可以确保我们在进行数据修改或创建时,能够正确地解析返回值,从而使得后续的数据操作更加高效和可靠。因此,在开发 Web 应用时,我们可以充分利用 GraphQL 的特点,通过合理地设计 GraphQL Schema 和使用相关的技术手段,使得前后端之间的通信更加顺畅和可控。

Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67d8474da941bf7134ec3f62

Feed
back