GraphQL 是一种由 Facebook 开发的查询语言,用于 API 的查询和数据操作。它可以简单地描述数据需求,并返回精确的响应数据。GraphQL 实现了一种类型系统,可以对查询所需的数据进行强制验证,从而减少了错误。GraphQL 非常适合用于构建完全可组合和可自定义的 API。
在 GraphQL 中,解析器是负责执行查询的核心组件,它们会将查询转换为结果。解析器会根据查询的字段来检索请求的数据,然后将数据映射到相应的字段。在构建复杂的 GraphQL API 时,解析器是非常重要的组件。
本文将探讨如何通过补充解析器来增强 GraphQL API 的功能。接下来将引入三种补充解析器的方法:继承、解析器映射和包装器。
继承
补充解析器最简单的方法是继承。继承一个解析器意味着您可以利用现有的功能,并在其中添加自己的逻辑。您可以创建一个新的解析器实例,并在新的解析器中为需要扩展的字段添加处理逻辑。
以下是一个继承解析器的示例:
-- -------------------- ---- ------- ----- - ---------- - - ----------------- ----- ----------------- - ------------ ----- -------- ------------- - ---------------- - ----- ------- ----- ----- -------- -- -- - -- ---- ------ ----- ---- -- --- -- ---
在上面的示例中,我们使用 extendType
函数来继承现有的 Query
类型。我们然后添加了一个新的 users
字段,同时提供了自定义的 resolve
函数。使用这种方法,您可以轻松地扩展和修改现有的类型和字段。
解析器映射
解析器映射是一种将字段与函数绑定在一起的方法。解析器映射是一种将字段与 Resolver 函数进行映射的方法。您可以将一个或多个解析器函数的引用映射到一个或多个字段上。
以下是一个解析器映射的示例:
-- -------------------- ---- ------- ----- - -------------------- - - ------------------------- ----- ------ - ---------------------- --------- ---------- - ------ - ------ -- -- - -- ---- ------ ----- ---- -- ------ -- -- - -- ---- ------ ----- ---- -- --------- -- -- - -- ---- ------ ----- ---- -- -- --------- - ----------- --- - ----- -- -- - -- ---- ------ ----- ---- -- ----------- --- - ----- -- -- - -- ---- ------ ----- ---- -- -------------- --- - ----- -- -- - -- ---- ------ ----- ---- -- -- -- ---
在上面的示例中,我们为 Query
和 Mutation
类型的字段添加了自定义的解析器函数。这使得我们可以在不编写新的解析器实例的情况下扩展现有的解析器。使用这种方法,您可以轻松地将现有的解析器函数映射到新的字段上。
包装器
包装器是一种复杂的解析器映射方式,它允许您以透明的方式修改解析器。包装器可以用于在解析器执行之前或之后执行自定义逻辑。包装器可以在运行时向解析器添加行为,同时又不更改解析器的基本功能。
以下是一个用于包装器的示例:
-- -------------------- ---- ------- ----- - ---------- ------------ - - -------------------------------- ----- -------------- - ---------- ------- - ------------- - ------------ ---------- --------- ------ - -- - ----- --------------- - -------------------- ------------------- - -------- ----- -------- ----- -- - ----- - ------------ - - ------------- ------- ------------ -------------- ----------- -- ------------- -- -------------- - ----- --- ---------- ------------- - ------ ----------------------- ----- -------- ------ -- ------ ------------ -- -- - ------ - --
在上面的示例中,我们使用 mapSchema
函数来创建一个带有包装器的新 Schema。我们在 Query.user
字段上添加了一个新的包装器解析器。这个解析器会检查 requiresAuth
指令,然后检查用户是否已授权。如果授权失败,则返回一个错误消息。
使用包装器可以在不破坏现有代码的情况下修改现有的解析器功能。这种方法使您可以轻松地添加或调整现有的解析器,并以透明的方式向现有的解析器添加自定义行为。
结论
GraphQL 提供了灵活且可扩展的构建和管理 API 的方法。在构建复杂的 GraphQL API 时,解析器是非常重要的组件。本文介绍了三种补充解析器的方法:继承、解析器映射和包装器。这些方法使您可以在不破坏现有代码的情况下扩展现有的解析器功能。
希望本文对您理解 GraphQL 的深层次内容有所帮助,同时也希望本文对您在构建 GraphQL API 时有所指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6750ff9d050cf9039c18e0bd