GraphQL 作为一种查询语言和执行引擎,可以用于任何类型的应用程序,尤其是Web应用程序。您可以使用不同的客户端和服务器库来支持 GraphQL。在实际开发中,GraphQL 是一种很流行的解决方案,由于其优异的性能和灵活性,越来越多的公司和组织将其用于项目中。
GraphQL 支持内置数据类型和自定义数据类型。在 GraphQL 中,自定义标量类型(Custom scalar)是一种独立的数据类型,可以通过编写自定义解析器来扩展 GraphQL 数据类型系统。标量类型是一种原始数据类型,表示数据的基本类型,例如字符串、整数、浮点数和布尔值。
在本文中,我们将向您介绍在 GraphQL 中如何使用和扩展自定义标量类型,并提供示例代码,以便更好地理解。
使用自定义标量类型
使用自定义标量类型非常简单。我们只需要将自定义标量类型的名称添加到我们的GraphQL类型声明中即可。以下是添加自定义标量类型的 GraphQL类型声明示例:
------ ------- ---- ----- - ------------- --------- ------ -
上面的代码片段中,我们通过添加 ISODate
标量类型在查询中添加了一个名为 example
的字段并指定日期参数,该日期参数采用 ISODate
自定义标量类型作为参数类型。
在使用自定义标量类型时,在 GraphQL schema 中必须定义解析器以将自定义类型转换为实际类型。下面是定义自定义日期类型解析器的示例:
----- --------- - - -------- --- ------------------- ----- ---------- ---------------- - -- --------- ------ -------------------- -- ----------------- - -- ----- ------ --- ------------ -- ----------------- - -- --------- --- ------------ - -- ------- ------ --- ---------------- - ------ ----- -- --- --
上述解析器中所涉及的三种方法是标量类型应该实现的三种方法:serialize
,parseValue
和 parseLiteral
。这些方法分别用于序列化、解析输入值以及解析 AST 节点(AST 是一个 JavaScript 对象,描述了 GraphQL 查询语句的结构和内容)。
扩展自定义标量类型
在 GraphQL 中扩展现有的自定义标量类型或创建新的自定义标量类型非常容易。我们可以直接在我们的 GraphQL schema 中定义并向解析器添加一个标量类型。
以下是如何扩展日期类型的示例:
------ ---- ------ ---- ----- - ----------------- ------ ------ - ----- --------------- - - ----- --- ------------------- ----- ------- ---------------- - -- -------- ------ -------------------- -- ----------------- - -- ----- ------ --- ------------ -- ----------------- - -- --------- --- ------------ - -- ------- ------ --- ---------------- - ------ ----- -- --- --
上述代码中,我们使用 extend 操作符来添加新的 Date
标量类型,并使用新的解析器来扩展它。然后我们使用这个新的标量类型在查询中添加了一个新的名为 exampleDate
的字段。
综合示例
我们来看下一个综合的自定义标量类型的示例。假设我们想在 GraphQL schema 中添加自定义标量类型 Contact
,表示联系方式,包括电子邮件和电话号码。
以下是我们的 GraphQL schema:
------ ------- ---- ----- - ----- ------ --------------------------- --------- ------ -
现在我们需要添加一个新的标量类型 Contact
并在解析器中实现序列化和解析方法。
----- --------- - - -------- --- ------------------- ----- ---------- ---------------- - ------ ------ -- ------ -- ----------------- - -- --------------------- -- --------------------- - ------ ------ - ----- --- -------------- ------- -------------- -- ----------------- - -- --------- --- ------------ - ----- ----- - ---------- -- --------------------- -- --------------------- - ------ ------ - ----- --- -------------- ------- -------------- - ------ ----- -- --- ------ - ----- -- -- ----- ----- ------------------- -------- ----- -- - ------ ----- ------- ----------- -- ----------------- -- -- -- -- -- ----- -------- -------- -------------------- - -- ---- ------ ----- - -------- -------------------- - -- ---- ------ ----- -
我们在 parseValue
和 parseLiteral
方法中添加了一个验证逻辑,用于检查传入的联系方式是否有效。如果联系方式有效,则可以将其传递给下游 GraphQL 服务。
结论
在 GraphQL 中使用和扩展自定义标量类型非常简单。您只需要将自定义标量类型的名称添加到GraphQL类型声明中,然后定义解析器来将自定义类型转换为实际数据类型即可。在解析器中,您需要实现三种方法:serialize
,parseValue
和 parseLiteral
,以序列化和解析输入值和 AST 节点。
自定义标量类型可以帮助您更轻松地处理查询和返回数据,并提供更好的类型检查和错误处理。通过使用自定义标量类型,您可以扩展GraphQL 默认的类型系统,使其更适合您的应用程序。
本文为您提供了如何在GraphQL 中使用和扩展自定义标量类型的完整解释和示例代码。我们希望这篇文章对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6735f48f0bc820c582516897