GraphQL 是一种用于 API 的查询语言,它允许客户端指定所需的数据,并且只返回客户端需要的数据。GraphQL 中的联合类型是一种特殊的类型,它允许我们将不同的类型组合在一起,以便查询结果可以包含多种类型的数据。在本文中,我们将介绍如何在 GraphQL 中使用联合类型,并提供示例代码。
什么是联合类型
在 GraphQL 中,联合类型是一种特殊的类型,它允许我们将多种类型组合在一起。例如,我们可以将 Person
和 Animal
这两种类型组合在一起,创建一个 SearchResult
的联合类型,以便我们可以在搜索结果中返回这两种类型的数据。
----- ------------ - ------ - ------ ---- ----- - ------------- --------- ---------------- - ---- ------ - ----- ------- ---- ---- - ---- ------ - ----- ------- -------- ------- -
在上面的例子中,SearchResult
是一个联合类型,它可以是 Person
或 Animal
。我们定义了一个 search
查询,它将返回一个 SearchResult
类型的数组。
如何使用联合类型
在 GraphQL 中,我们可以使用 __typename
字段来获取查询结果的类型。例如,在上面的例子中,如果我们查询了 search
,我们可以使用以下代码来获取查询结果的类型:
----- - ------------- ------- - ---------- --- -- ------ - ---- --- - --- -- ------ - ---- ------- - - -
在上面的代码中,我们使用了 ... on
语法来根据 __typename
字段的值来选择要查询的字段。如果查询结果是 Person
类型,我们将返回 name
和 age
字段;如果查询结果是 Animal
类型,我们将返回 name
和 species
字段。
示例代码
下面是一个完整的示例代码,它演示了如何在 GraphQL 中使用联合类型:
---- ------ - ----- ------- ---- ---- - ---- ------ - ----- ------- -------- ------- - ----- ------------ - ------ - ------ ---- ----- - ------------- --------- ---------------- - ------ - ------ ----- -
----- - ------------ - - ------------------------ ----- ------ - - - ----- ------- ---- -- -- - ----- ------- ---- -- -- - ----- ------- - - - ----- -------- -------- ----- -- - ----- ----------- -------- ----- -- - ----- --------- - - ------ - ------- --- - ----- -- -- - ----- ------- - ----------- ----------------------- -- ----------------------------------------------------- - ------ ------- -- -- ------------- - -------------- --- -- - -- ------ -- ---- - ------ -------- - -- ---------- -- ---- - ------ -------- - ------ ---- -- -- - ----- ------ - --- -------------- --------- ------------------- ---------- -- ----------------------- --- -- -- - ------------------- ----- -- -------- --
在上面的代码中,我们定义了 Person
和 Animal
两种类型,并创建了一个 SearchResult
的联合类型。我们还定义了一个 search
查询,它将返回一个 SearchResult
类型的数组。
在 resolvers
中,我们实现了 search
查询的解析器,并且在 SearchResult
类型中定义了一个 __resolveType
函数,用于确定查询结果的类型。
最后,我们创建了一个 Apollo Server,并将 GraphQL schema 和 resolvers 传递给它。我们可以在浏览器中访问 GraphQL Playground,并执行以下查询:
----- - ------------- ------- - ---------- --- -- ------ - ---- --- - --- -- ------ - ---- ------- - - -
查询结果如下:
- ------- - --------- - - ------------- --------- ------- ------- ------ -- -- - ------------- --------- ------- -------- ---------- ----- - - - -
结论
在 GraphQL 中,联合类型是一种非常有用的类型,它允许我们将多种类型组合在一起,以便查询结果可以包含多种类型的数据。在本文中,我们介绍了如何在 GraphQL 中使用联合类型,并提供了示例代码。希望本文对您有所帮助,谢谢阅读!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673dba4690e7ed93bee02572