在 GraphQL 开发中,对于查询数据中存在空值的情况,我们需要采取一些特别的处理来避免错误发生。本文将介绍 GraphQL 中如何处理字段为空的情况,并提供示例代码来帮助您理解。
问题
假设我们有一个简单的 GraphQL 查询,它返回游戏列表及它们的相关信息。
----- - ----- - -- ---- ----------- ----- --------- - ---- ------- - - -
我们可以看到,上述查询包含了一个嵌套字段 publisher
,这个字段关联了 Game
和 Publisher
两个实体。有时候,一些游戏可能没有对应的出版商,这时查询就会发生错误。因此,我们需要在 GraphQL 中如何处理这种情况呢?
方案
GraphQL 中提供了两种解决方法:使用 nullable 和 non-null types。
Nullable types
在 GraphQL 中,默认情况下,所有的 types 都是可空的(nullable)。这意味着一个字段可以返回 null。因此,我们可以通过将 Publisher
类型定义为可空类型来处理字段为空的情况。
---- --------- - ----- ------ -------- ------ - ---- ---- - --- --- ----- ------- ------------ ---- ------ ------ ---------- --------- - ----- - ----- - -- ---- ----------- ----- --------- - ---- ------- - - -
上述代码中,我们将 Publisher
类型定义为可空类型。如果某个游戏没有出版商,查询会返回 null
。
Non-null types
除了可空类型,GraphQL 还提供了非空类型(non-null types)。对于值类型(如 ID
、Int
、Float
、Boolean
和 Enum
),我们可以在定义时在类型名称后添加一个感叹号来表示它不能为 null。同样的,我们也可以在字段类型定义时添加一个感叹号来表示它不能为 null。
---- --------- - ----- ------- -------- ------ - ---- ---- - --- --- ----- ------- ------------ ---- ------ ------ ---------- ---------- - ----- - ----- - -- ---- ----------- ----- --------- - ---- ------- - - -
在上述代码中,我们将 Publisher
类型定义为非空类型,这意味着每个游戏都必须有一个出版商,否则查询会返回错误。
结论
以上就是 GraphQL 中如何处理字段为空的情况的方法,您可以根据实际业务情况选择采用哪种方案。但我们建议您优先考虑使用 nullable types,因为它能够更好地支持数据中的变化,在 GraphQL 中以及其他软件系统中取得更好的互操作性。
最后,我们提供一份附带注释的示例代码,希望能够帮助您更好地理解 GraphQL 中的 nullable 和 non-null types 的处理方式。
- -------- ----- - ---- ---- --------- - ----- ------ -------- ------ - - --- -- -------- ------ --------- ---- ------- ------ ---------- --------- -- ---- ---- - --- --- ----- ------- ------------ ---- ------ ------ ---------- --------- - - -------- ----- - ----- ------ ----------- ------ --- --------- -- - --- -- -------- ------ --------- ---- -------- ------ ---------- --------- -- ---- --------- - ----- ------- -------- ------ - ---- ---- - --- --- ----- ------- ------------ ---- ------ ------ ---------- ---------- - - ------ ----- - ----- - -- ---- ----------- ----- - ---------- ---- --------- - ---- ------- - - -
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67399349317fbffedf177db4