npm 包 @graphql-toolkit/schema-merging 使用教程

阅读时长 4 分钟读完

前言

在GraphQL开发中,合并多个 schema 是一个极为常见的需求,因此市面上有许多解决方案。其中,@graphql-toolkit/schema-merging 是一个非常流行的包,其提供了一种优雅且灵活的合并 schema 的方式。

本文将结合实际示例详细介绍如何使用 @graphql-toolkit/schema-merging,希望能对初学者有所帮助。

安装

在使用之前,我们需要通过 npm 安装 @graphql-toolkit/schema-merging:

示例

下面将结合两个示例来介绍使用 @graphql-toolkit/schema-merging 的方法。

简单合并

我们有两个 schema,一个定义了 Query 类型,一个定义了 Mutation 类型:

-- -------------------- ---- -------
-- ---------------
---- ----- -
    ------ -------
-

-- ---------------
---- -------- -
    ---------------------- --------- -------
-

要将这两个 schema 合并,我们需要创建一个合并器:

这样,我们就得到了一个新的 schema,它将 Query 和 Mutation 两个类型合并在了一起。

带指令的合并

在上一个示例中,我们只是简单地将两个 schema 合并了起来。在实际项目中,我们可能需要对合并的过程进行更复杂的操作。

例如,我们需要对 Mutation 中的 updateMessage 操作进行限制,只有拥有指定权限的用户才能执行该操作。为了实现这样的功能,我们可以定义一个指令来实现这个限制:

我们将这个指令定义在 schema3.graphql 中,然后将其和之前的两个 schema 合并:

-- -------------------- ---- -------
----- - ------------- - - -------------------------------------------
----- - ------------ - - --------------

----- ------- - --------------------------------- ---------
----- ------- - --------------------------------- ---------
----- ------- - --------------------------------- ---------

----- ------------ - ----------------------- -------- --------- -
    ----------- ----------- -----------
    ------------------ -----
---

在合并的过程中,我们可以通过 options 对象来配置一些选项:

  • exclusions:排除不需要合并的内容。
  • reverseDirectives:如果为 true,指令将在合并过程中颠倒顺序。

通过配置选项,我们将 directive @hasRole 排除在了合并过程之外。

总结

本文介绍了如何使用 @graphql-toolkit/schema-merging,在实际项目中,@graphql-toolkit/schema-merging 可以减少代码冗余,提高开发效率,同时也提供了一些方便的选项,帮助开发者更加灵活地合并 schema。

希望本文能够对初学者有所帮助。更多内容,请查看@graphql-toolkit/schema-merging 的官方文档。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/192789