npm 包 graphql-central-types 使用教程

阅读时长 14 分钟读完

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 导入了标量类型,它包括了 DateTimePositiveIntNonNegativeIntNonPositiveIntNegativeIntEmailURL。我们在 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 库中,包括了一些定义对象的类型,包括 ImageAddressPhoneNumber

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

纠错
反馈