GraphQL 是一种由 Facebook 开发的数据查询语言,它的灵活性和可扩展性使其成为现代 Web 应用程序的理想选择。一个既定的 GraphQL API 通常由一组类型组成,并且它的类型系统是在运行时被定义的。在本文中,我们将深入探讨如何使用 GraphQL 中的类型系统来构建强大的 API。
GraphQL 类型
GraphQL 类型系统由以下核心类型组成:
- Scalar types(标量类型):代表原始数据类型,例如字符串,整数和布尔值。
- Object types(对象类型):代表 API 中的对象,例如用户,文章或评论等。
- Interface types(接口类型):代表可以实现的对象类型,并且通过这些实现共享一组字段。
- Union types(联合类型):代表两个或多个不相关对象类型的集合。
- Enum types(枚举类型):代表预定义的可能值集合。
- Input Object types(输入对象类型):代表用于输入类型的对象,并且用于在 mutation 或 query 的参数中传递数据。
标量类型
GraphQL 内置了许多标量类型,例如 String、Int、Float 和 Boolean。这些标量类型都具有与之关联的值,并行定义了一组与其关联的输入和输出类型。例如,String 标量类型的输入类型为字符串,输出类型也为字符串。
您甚至可以自定义您自己的标量类型。例如,您可能需要一种新的类型来表示钱,它包含一个整数金额值和货币代码。在这种情况下,可以定义一个 Currency 标量类型,并明确定义其输入和输出类型。
------ -------- ---- ------- - ----- ------ ------ -------- -
对象类型
在 GraphQL 中,对象类型表示单个元素,例如一个用户或一篇文章。对象类型由一组字段组成,每个字段都包含一个名称,一个输出类型和一个可选的解释字符串。
例如,对于一个简单的博客 API,我们可以定义一个名为 Post 的对象类型。
---- ---- - --- --- ------ ------- ----- ------- ------- ----- ------------ -------- -
在此示例中,Post 对象类型包含用于标识和描述博客文章的字段。字段 title 和 body 包含字符串,而 author 包含一个 User 对象。publishedAt 包含一个可选的日期时间值,用于指示文章是否被发布。
接口类型
接口类型类似于对象类型,但它定义了一组字段,这些字段可供多个对象类型共享。例如,在接口上定义了字段 name 和 biography,这些字段可以在多个类型中使用。
定义接口类型时,通常会指定实现它的对象类型并定义共享的字段。
--------- ---- - --- --- - ---- ---- ---------- ---- - --- --- ----- ------ ---------- ------ - ---- ---- ---------- ---- - --- --- ------ ------- ----- ------- ------- ----- ------------ -------- -
在此示例中,我们定义了一个名为 Node 的接口类型,并在 User 和 Post 类型中实现了它。因此,每个 User 和 Post 对象都有一个 id 字段,该字段将在 Node 接口上定义。
联合类型
联合类型与接口类型类似,但它们允许您将多个对象类型归为一组。这很有用,例如当您想要从 API 获取多种类型的结果集合时。
定义联合类型时,具有共同字段的对象类型将被指定。
----- ------------ - ---- - ---- - -------
在此示例中,我们定义了一个名为 SearchResult 的联合类型,该类型可以包含 User、Post 或 Comment 对象类型的值。
枚举类型
枚举类型允许将可能的值限制为预定义的集合。例如,可以定义一个名为 Role 的枚举类型。
---- ---- - ---- ----- ----- - ---- ---- - --- --- ----- ------- ------ ------- ----- ----- -
在此示例中,我们定义了一个 Role 枚举类型,该类型具有三种可能的值:USER、ADMIN 和 STAFF。User 对象包括一个名为 role 的字段,该字段必须是它们任何一个值。
输入对象类型
输入对象类型允许在 mutation 和 query 的参数中传递多个值。例如,可以定义一个名为 SearchInput 的输入对象类型。
----- ----------- - ------ ------- ------ --- - ---- ----- - ------------- -------------- ---------------- -
在此示例中,我们定义了一个名为 SearchInput 的输入对象类型,并将其用作 search mutation 的参数。SearchInput 包括一个名为 query 的必填字符串和一个名为 limit 的可选整数。
等等
GraphQL 类型系统非常强大,允许您自定义很多,我们无法一一列举。在这篇文章中,我们简要介绍了 GraphQL 类型系统的几种常见类型。希望能够为您提供有关如何使用它们的基本理解。
如果想要更多深入学习 GraphQL,请查看 GraphQL 官方文档:https://graphql.org/
结论
GraphQL 的类型系统是一种强大的工具,可以使我们轻松构建强大且易于扩展的 API。通过学习这些类型,您可以开始构建自己的 GraphQL API 并开始在程序中使用。如果您想要更多指导,请查看 GraphQL 的官方文档,它包含许多有用的指南和代码示例。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672d5846ddd3a70eb6da2ebf