GraphQL 是一种用于 API 操作的查询语言,它允许客户端定义需要的数据形式,从而使 API 只传递此数据。GraphQL Scalars 是一个内置的 GraphQL 类型系统扩展,提供了许多常见的标量类型的标准和自定义实现。@okgrow/graphql-scalars 则在此基础上进一步提供了更多的自定义标量类型。
本文将介绍如何使用 @okgrow/graphql-scalars 包,并结合示例代码详细介绍其功能和使用方法。
安装
使用 npm 管理工具进行安装:
npm install @okgrow/graphql-scalars
或者
yarn add @okgrow/graphql-scalars
使用
首先,需要在 GraphQL Scalar 类型定义中引入 @okgrow/graphql-scalars:
import { GraphQLScalarType } from 'graphql'; import { Kind } from 'graphql/language'; import { URLScalar } from '@okgrow/graphql-scalars';
然后,定义一个新的标量类型:
const typeDefs = ` scalar URL `;
然后,在解析函数中使用 @okgrow/graphql-scalars 中提供的解析器:
const resolvers = { URL: URLScalar, };
最后,使用你的新标量类型:
type User { id: ID! name: String! bio: String! website: URL! }
自定义实现
在 @okgrow/graphql-scalars 中,自定义实现一个标量类型非常简单。可以使用自动生成值和解析函数来创建一个新的标量类型。
-- -------------------- ---- ------- ------ - ------------- - ---- -------- ------ - ---------------- - ---- -------------------------- ------ - --------------- - ---- ------------------- ------ ----- ------------- - ------------------------------ ------------ ------ ----- -------------- - ----------------------------------- ----- ----------- -------------- ----------- -------- ----------- ---------- ------- -- --- ------------ ----------- ------- -- --- ------------ ------------- ----- -- --------- --- ----------- - --- --------------- - ------ ---展开代码
上述代码中,使用 GraphQL ISO Date 库获取了 DateTime 类型,之后通过使用自动生成值和解析函数来创建了一个新的标量类型。可以看到,其中实现了序列化、解析值和解析字面值等函数。
最后,将自定义标量类型进行注册:
const resolvers = { DateTime: DateTimeScalar, };
示例代码
下面我们通过一个完整的示例来演示 @okgrow/graphql-scalars 的使用。
-- -------------------- ---- ------- ------ - -------------------- - ---- ---------------- ------ - ----------------- - ---- ---------- ------ - ---- - ---- ------------------- ------ - --------------------- ---------- ----------------- - ---- -------------------------- ----- -------- - - ------ ----------- ------ ------------ ------ --- ---- ----- - -------- ----- ---- - ---- ---- - --- --- ----- ------- ------ ------------- ------ ------------ ----------- ---- - -- ----- --------- - - ------------ ------------------ ------------- --------------------- ---- ---------- ------ - ----- ------ ----- -------- ----- -- - -- ---- -------------- -- --- ---- ----- -- -- ----- - --- -------- ----- -------- ----- -- - -- ---- -------------- -- --- -- ----- -- ----- -------- ----- -------- ----- -- - -- ---- -------------- -- --- ---- ----- -- ------ -------- ----- -------- ----- -- - -- ---- -------------- -- --- ----- ----- -- ------ -------- ----- -------- ----- -- - -- ---- -------------- -- --- ----- ----- -- ----------- -------- ----- -------- ----- -- - -- ---- -------------- -- --- ---------- ----- -- - -- ----- ------ - ---------------------- --------- --------- --- ------ ------- -------展开代码
在上述代码中,我们定义了三个自定义的标量类型:PhoneNumber、EmailAddress 和 URL。同时,我们还定义了 Query 和 User 两个对象类型,并在相应的 resolvers 中
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/109193