GraphQL Schema 中的 Union 和 Interface 有什么区别

在 GraphQL Schema 中,我们可以使用 Union 和 Interface 来定义一组相关的类型。它们的主要区别在于它们的操作和使用上不同。

Interface

Interface 是一种用来定义一组相似类型的抽象类型。我们可以通过定义一个 Interface 来描述一组具有相似属性结构的类型,例如下面这个例子:

在这个例子中,我们定义了一个 Person 接口来描述具有 nameage 属性的类型。然后我们分别使用 type 定义了两个实现 Person 接口的类型 StudentTeacher。这样做的好处是我们可以写一个查询接口来查询所有实现了 Person 接口的类型,例如:

以上查询语句将返回所有实现了 Person 接口的类型,因为我们只需要访问 nameage 属性即可。

Union

Union 也是一种用来定义一组相似类型的类型,但它与 Interface 的不同在于 Union 可以将不同类型的值归为一组类型中并作为返回值,例如下面这个例子:

在这个例子中,我们将 BookAuthor 类型归为一组类型中并定义为一个 SearchResult 类型。这样我们可以使用以下查询语句搜索 BookAuthor

以上查询语句将返回一个由 BookAuthor 类型组成的数组,具体是哪种类型可以通过查询结果中的 __typename 字段来判断。

总结

Interface 和 Union 都是用来定义一组相似类型的类型,但在使用上不同,Interface 用于描述具有相似结构的类型,而 Union 则是将不同类型的值归为一类。在实际应用中,我们需要根据具体的业务场景来选择使用哪种类型来定义。

示例代码

以下是以上介绍所涉及到的全部代码:

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


纠错
反馈