GraphQL 是一种现代的查询语言和 API 构建工具,它的优点在于:强类型检查、可组合性、一次获取多个资源和自我文档化。graphql-central-types
是一个 npm 包,它可以帮助开发者更好地使用 GraphQL,提供了许多帮助构建 GraphQL API 的类型定义和解析器。本篇文章将详细介绍如何使用这个 npm 包和它的主要特性。
安装
首先,我们需要使用 npm 在我们的项目中安装 graphql-central-types 包:
--- ------- ---------------------
我们还需要安装 graphql 客户端,如果没有安装的话:
--- ------- -------
使用
graphql-central-types 库提供了一些基础类型定义,类型定义可以是对象、枚举或标量。你可以使用这些类型定义来构建你的 GraphQL schema。下面是一个简单的例子:
----- - ------------- --- - - ------------------------- ----- - ------------ - - --------------------------------- ----- -------- - ---- --------------- ---- ----- - ------ ------ - -- ----- --------- - - ------ - ------ -- -- ------ ------- - -- ----- ------ - --- -------------- --------- ---------- --- ----------------------- --- -- -- - ------------------- ----- -- --------- ---
在上面的例子中,我们在 typeDefs 中导入了 centralTypes,它将会导入所有被 centralTypes 提供的 GraphQL 基础类型定义,在这个例子中,我们使用 centralTypes 导入了标量类型,它包括了 DateTime
、PositiveInt
、NonNegativeInt
、NonPositiveInt
、NegativeInt
、Email
和 URL
。我们在 typeDefs 中定义了一个 Query 类型,它只有一个字段,这个字段将会返回 'Hello world!'。
这是最简单的例子,graphql-central-types 的更多用例将在下面的部分中讲解。
标量类型
在许多情况下,我们需要使用自定义的标量类型。graphql-central-types 包提供了一些标量类型,它们的用法与标准的 GraphQL scalar 类型一样。
DateTime
类型
DateTime 类型是一个包含日期和时间的标量类型。
------ - --- - ---- ---------------- ------ - ----------- - ---- ----------------------- ----- -------- - ---- -------------- ---- ----- - ----------- ---------- -------- - -- ----- --------- - - ------ - ------ --------- ---- - ----- -- - ------- ---- -- -- ------ -- --
在这个例子中,我们定义了一个 date
的查询参数和一个 date
的查询字段。如果我们传入一个 DateTime
类型的参数,我们可以在 resolver 函数中获取到这个参数并将其直接返回。以下是查询的一个例子:
----- - ----------- --------------------------- -
PositiveInt
类型
PositiveInt 类型是一个只含正整数的标量类型。如果值为负数或小数,这个类型将会返回一个验证错误。
------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------- ------------- ----------- - -- ----- --------- - - ------ - ------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 PositiveInt
类型。如果我们传递了一个非正整数的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
----- - ------------- --- -
NonNegativeInt
类型
NonNegativeInt 类型是一个只含非负整数的标量类型。如果值为负数或小数,这个类型将会返回一个验证错误。
------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------- ---------------- -------------- - -- ----- --------- - - ------ - ------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 NonNegativeInt
类型。如果我们传递了一个负整数或小数的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
----- - ------------- -- -
NonPositiveInt
类型
NonPositiveInt 类型是一个只含非正整数的标量类型。如果值为正数或小数,这个类型将会返回一个验证错误。
------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------- ---------------- -------------- - -- ----- --------- - - ------ - ------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 NonPositiveInt
类型。如果我们传递了一个正整数或小数的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
----- - ------------- --- -
NegativeInt
类型
NegativeInt 类型是一个只含负整数的标量类型。如果值为正数或小数,这个类型将会返回一个验证错误。
------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------- ------------- ----------- - -- ----- --------- - - ------ - ------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 NegativeInt
类型。如果我们传递了一个正整数或小数的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
----- - ------------- --- -
Email
类型
Email 类型是一个邮箱地址的标量类型。
------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------ ------- ----- - -- ----- --------- - - ------ - ------ --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 Email
类型。如果我们传递了一个非邮箱地址的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
----- - ------------ -------------- -
URL
类型
URL 类型是一个 URL 地址的标量类型。
------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ---------- ----- --- - -- ----- --------- - - ------ - ---- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 URL
类型。如果我们传递了一个非 URL 地址的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
----- - ---------- --------------------- -
枚举类型
在 GraphQL 中,枚举是一组预定义的常量。它们在定义字段时非常有用。graphql-central-types 提供了一些常用的枚举类型。
Weekday
类型
Weekday 类型是一个包含所有星期几的枚举类型。
------ - --- - ---- ---------------- ------ - --------- - ---- ------------------------ ----- -------- - ---- ------------ ---- ----- - ------------ --------- ------ - -- ----- --------- - - ------ - -------- --------- ---- - --- -- - ----- ------ -- -- ---- -- --
在这个例子中,我们定义了一个查询参数 day
,它将被转换为 Weekday
类型。如果我们传递了一个非星期几的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
----- - ------------ --------- -
Currency
类型
Currency 类型是一个包含所有货币代码的枚举类型。
------ - --- - ---- ---------------- ------ - --------- - ---- ------------------------ ----- -------- - ---- ------------ ---- ----- - --------------- ---------- ------ - -- ----- --------- - - ------ - --------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 Currency
类型。如果我们传递了一个非货币代码的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
----- - --------------- ---- -
对象类型
GraphQL 中,对象类型是构建 GraphQL schema 的核心。在 graphql-central-types 库中,包括了一些定义对象的类型,包括 Image
、Address
和 PhoneNumber
。
Image
类型
Image 类型包含一个 URL 和一个可选的 title 和描述。
------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------ ------- ----- - -- ----- --------- - - ------ - ------ --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 Image
类型。其中包括一个 URL 和一个可选的 title 和描述。以下是查询的一个例子:
------ ------------- ---- ------------------------------ ------ ----- ------------ ------------- --- ----- ----------- - -
Address
类型
Address 类型包含一个可选的 city、state、country 和 street 字段。
------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - -------------- --------- ------- - -- ----- --------- - - ------ - -------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 Address
类型。其中包括一个可选的 city、state、country 和 street 字段。以下是查询的一个例子:
------ --------------- ----- ----- -------- ----- ------ ----- ------- --------- ----- ------- ---- ------- ----- ------ - -
PhoneNumber
类型
PhoneNumber 类型表示一个电话号码,包括国家代码和区号。
------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------ ------------- ----------- - -- ----- --------- - - ------ - ------ --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 PhoneNumber
类型。其中包含了国家代码、区号和电话号码。以下是查询的一个例子:
------ ------------- ------------ ------ --------- ----- ------------ ------------- ----------- -------- ----------- - -
总结
graphql-central-types 是一个很有用的 npm 包,它包括了许多帮助我们构建 GraphQL API 的类型定义和解析器。在本篇文章中,我们介绍了如何使用基础类型和自定义类型、如何使用枚举和对象类型,我们还给出了一些例子来帮助你更好理解它的使用方法。如果你正在使用 GraphQL 构建 API,那么 graphql-central-types 是一个不错的选择。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/600668edd9381d61a3540ca2