GraphQL 是一个由 Facebook 开发的查询语言,它提供了一种让客户端可以精确请求需要的数据的方式,而不是像传统的 REST API 一样返回固定的结构。GraphQL 能够快速、高效地完成数据请求和相应,因此正在被越来越多的公司采用。
在 GraphQL 中,我们经常需要处理不同类型的数据。有时候,这些数据之间可能是有关联的,而又没有固定的结构。为了满足这种情况,GraphQL 引入了 Union 和 Interface 类型。
Union 类型
Union 类型允许我们将多个类型组合在一起,以便在查询时选择合适的类型。例如,假设我们有一个查询请求一些动物(例如猫、狗、老虎),我们可以使用 Union 类型将它们组合在一起。
union Animal = Cat | Dog | Tiger type Query { getAnimal(id: ID!): Animal }
在这个例子中,Animal 类型就是一个 Union 类型,表示一个 Animal 可以是 Cat、Dog 或 Tiger 中的任何一种。我们可以在 Query 中使用 getAnimal 来查询一个动物的信息,getAnimal 的返回类型是 Animal 类型。
-- -------------------- ---- ------- - ------------- ---- - --- -- --- - ---- --- ----- - --- -- --- - ---- --- ----- - --- -- ----- - ---- --- ------- - - -
在这个查询中,我们使用了 GraphQL 中的 inline fragment,通过对查询结果进行类型判断,得到不同类型的 Animal。
Interface 类型
Interface 类型定义了一组字段和它们的类型,可以被其他类型实现。如果一个类型实现了一个接口,那么它必须实现该接口中定义的所有字段和类型。这样我们就可以在查询中请求这个接口的任何实现类型。
举个例子,假设我们有一个接口类型 Animal,定义了一组共同的字段和类型(例如 id、name、age),我们可以将它实现在 Cat、Dog、Tiger 中。
-- -------------------- ---- ------- --------- ------ - --- --- ----- ------- ---- ---- ------------ ------- - ---- --- ---------- ------ - --- --- ----- ------- ---- ---- ------------ ------- ------ ------- - ---- --- ---------- ------ - --- --- ----- ------- ---- ---- ------------ ------- ------ ------- - ---- ----- ---------- ------ - --- --- ----- ------- ---- ---- ------------ ------- -------- ------- - ---- ----- - ------------- ----- ------ -
在这个例子中,Animal 就是一个 Interface 类型,表示一个 Animal 必须包含 id、name、age、commonField 字段和类型。Cat、Dog、Tiger 三种类型都实现了 Animal 接口。
-- -------------------- ---- ------- - ------------- ---- - -- ---- --- ----------- --- -- --- - ----- - --- -- --- - ----- - --- -- ----- - ------- - - -
在这个查询中,我们可以请求 Animal 的所有共有字段和类型,以及 Cat、Dog、Tiger 各自的特有字段和类型。这样我们就可以在查询中灵活地请求我们需要的数据。
总结
在 GraphQL 中,Union 和 Interface 类型能够让我们更好地处理多类型的数据,提高查询的灵活性和可维护性。通过合理使用 Union 和 Interface 类型,我们可以更好地设计出合适的数据结构和查询接口,使得我们的代码更加简洁、高效。
以上就是使用 GraphQL 中 Union 和 Interface 类型的一些基本知识和使用方法,希望对大家学习 GraphQL 有帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6485470f48841e989442b7f4