GraphQL 是一种现代的查询语言和 API 构建工具,它的优点在于:强类型检查、可组合性、一次获取多个资源和自我文档化。graphql-central-types
是一个 npm 包,它可以帮助开发者更好地使用 GraphQL,提供了许多帮助构建 GraphQL API 的类型定义和解析器。本篇文章将详细介绍如何使用这个 npm 包和它的主要特性。
安装
首先,我们需要使用 npm 在我们的项目中安装 graphql-central-types 包:
npm install graphql-central-types
我们还需要安装 graphql 客户端,如果没有安装的话:
npm install 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 函数中获取到这个参数并将其直接返回。以下是查询的一个例子:
query { date(value: "2022-03-25T15:43:53.407Z") }
PositiveInt
类型
PositiveInt 类型是一个只含正整数的标量类型。如果值为负数或小数,这个类型将会返回一个验证错误。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------- ------------- ----------- - -- ----- --------- - - ------ - ------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 PositiveInt
类型。如果我们传递了一个非正整数的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
query { number(value: 10) }
NonNegativeInt
类型
NonNegativeInt 类型是一个只含非负整数的标量类型。如果值为负数或小数,这个类型将会返回一个验证错误。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------- ---------------- -------------- - -- ----- --------- - - ------ - ------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 NonNegativeInt
类型。如果我们传递了一个负整数或小数的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
query { number(value: 0) }
NonPositiveInt
类型
NonPositiveInt 类型是一个只含非正整数的标量类型。如果值为正数或小数,这个类型将会返回一个验证错误。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------- ---------------- -------------- - -- ----- --------- - - ------ - ------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 NonPositiveInt
类型。如果我们传递了一个正整数或小数的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
query { number(value: -1) }
NegativeInt
类型
NegativeInt 类型是一个只含负整数的标量类型。如果值为正数或小数,这个类型将会返回一个验证错误。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------- ------------- ----------- - -- ----- --------- - - ------ - ------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 NegativeInt
类型。如果我们传递了一个正整数或小数的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
query { number(value: -2) }
Email
类型
Email 类型是一个邮箱地址的标量类型。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------ ------- ----- - -- ----- --------- - - ------ - ------ --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 Email
类型。如果我们传递了一个非邮箱地址的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
query { email(value: "foo@bar.com") }
URL
类型
URL 类型是一个 URL 地址的标量类型。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ---------- ----- --- - -- ----- --------- - - ------ - ---- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 URL
类型。如果我们传递了一个非 URL 地址的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
query { url(value: "https://google.com") }
枚举类型
在 GraphQL 中,枚举是一组预定义的常量。它们在定义字段时非常有用。graphql-central-types 提供了一些常用的枚举类型。
Weekday
类型
Weekday 类型是一个包含所有星期几的枚举类型。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - --------- - ---- ------------------------ ----- -------- - ---- ------------ ---- ----- - ------------ --------- ------ - -- ----- --------- - - ------ - -------- --------- ---- - --- -- - ----- ------ -- -- ---- -- --
在这个例子中,我们定义了一个查询参数 day
,它将被转换为 Weekday
类型。如果我们传递了一个非星期几的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
query { weekday(day: SATURDAY) }
Currency
类型
Currency 类型是一个包含所有货币代码的枚举类型。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - --------- - ---- ------------------------ ----- -------- - ---- ------------ ---- ----- - --------------- ---------- ------ - -- ----- --------- - - ------ - --------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 Currency
类型。如果我们传递了一个非货币代码的值,GraphQL 将会抛出一个验证错误。以下是查询的一个例子:
query { currency(value: USD) }
对象类型
GraphQL 中,对象类型是构建 GraphQL schema 的核心。在 graphql-central-types 库中,包括了一些定义对象的类型,包括 Image
、Address
和 PhoneNumber
。
Image
类型
Image 类型包含一个 URL 和一个可选的 title 和描述。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------ ------- ----- - -- ----- --------- - - ------ - ------ --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 Image
类型。其中包括一个 URL 和一个可选的 title 和描述。以下是查询的一个例子:
query{ image(value:{ url: "http://placehold.it/350x350", title: "图标", description: "这是一个测试图标"}){ url title description } }
Address
类型
Address 类型包含一个可选的 city、state、country 和 street 字段。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - -------------- --------- ------- - -- ----- --------- - - ------ - -------- --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 Address
类型。其中包括一个可选的 city、state、country 和 street 字段。以下是查询的一个例子:
query{ address(value:{ city: "上海", country: "中国", state: "上海", street: "世纪公园Core Plaza 23楼"}){ city country state street } }
PhoneNumber
类型
PhoneNumber 类型表示一个电话号码,包括国家代码和区号。
-- -------------------- ---- ------- ------ - --- - ---- ---------------- ------ - ----------- - ---- ------------------------ ----- -------- - ---- -------------- ---- ----- - ------------ ------------- ----------- - -- ----- --------- - - ------ - ------ --------- ---- - ----- -- - ------- ------ -- -- ------ -- --
在这个例子中,我们定义了一个查询参数 value
,它将被转换为 PhoneNumber
类型。其中包含了国家代码、区号和电话号码。以下是查询的一个例子:
query{ phone(value:{ countryCode: "+86", areaCode: "21", phoneNumber: "88888888"}){ countryCode areaCode phoneNumber } }
总结
graphql-central-types 是一个很有用的 npm 包,它包括了许多帮助我们构建 GraphQL API 的类型定义和解析器。在本篇文章中,我们介绍了如何使用基础类型和自定义类型、如何使用枚举和对象类型,我们还给出了一些例子来帮助你更好理解它的使用方法。如果你正在使用 GraphQL 构建 API,那么 graphql-central-types 是一个不错的选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600668edd9381d61a3540ca2