npm 包 @graphql-tools/stitch 使用教程

GraphQL 是一种用于 API 的查询语言,它可以把多个数据源(如数据库、REST API 等)整合到一个 API 中,提供给前端开发人员调用。而 @graphql-tools/stitch 就是一个优秀的 npm 包,用于不同 GraphQL API 的整合,本文将为大家介绍它的使用方法。

为什么要使用 @graphql-tools/stitch?

在使用 GraphQL 进行服务端开发时,我们可能会遇到这样的情况:需要对不同的数据源进行查询,但是每个数据源对应的 Schema 是不同的,此时我们可以使用 @graphql-tools/stitch 来整合这些 Schema,从而减少代码的复杂度。

而且,@graphql-tools/stitch 还提供了对 Schema 的本地化和查询计划的缓存功能,从而加快了查询速度,减少了请求次数和网络带宽的消耗。

如何使用 @graphql-tools/stitch?

安装

使用 npm 进行安装:

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

准备工作

首先,我们需要准备好要整合的不同 Schema。本文为了方便演示,我们假设有 2 个 Schema,分别是 User 和 Order。

我们先定义 User 的 Schema:

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

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

然后定义 Order 的 Schema:

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

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

整合 Schema

接下来,我们将这两个 Schema 整合起来。首先,我们需要安装一下 graphql:

--- - -------

1、定义 Schema

我们在一个新的文件里定义整合后的 Schema:

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

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

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

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

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

这里,我们通过 extend 关键字,将 User 和 Order 这两个 Schema 合并到了一个新的 Schema 中。

需要注意的是,我们为 Stitch 定义了一个新的类型,用于处理不同 Schema 的整合。同时,我们为 User 和 Order 加上了新的字段,以便能够进行跨 Schema 的查询。

在这个新的 Schema 中,我们定义了查询接口 Query,包括了 users 和 orders 两个查询字段,以及一个 createUser 的 mutation 接口。

2、创建 Schema 和 Resolver

接下来,我们需要创建 Schema 和 Resolver。

首先,我们在一个新的文件里创建 Schema:

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

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

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

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

然后,我们在另一个文件中创建 Resolver:

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

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

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

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

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

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

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

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

这里,我们先将 User Schema 和 Order Schema 转换成可执行的远程 Schema,然后使用 stitchSchemas 将它们整合。接着,我们定义了 Query 和 Mutation 的 Resolver,用于实现查询和修改操作。

在 Resolver 中,我们将 Stitch 定义的类型映射到了对应的 Schema 中,并通过 delegateToSchema 方法来调用对应 Schema 的查询接口或 mutation 接口,从而实现了整合。

测试

最后,我们可以使用一个 GraphiQL 界面来测试我们的 wholeSchema,示例如下:

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

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

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

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

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

到这里,我们已经完成了整个代码的演示,大家可以根据自己的实际需求进行调整和修改。

总结

本文介绍了如何使用 @graphql-tools/stitch 来整合多个 GraphQL Schema,从而加快了查询速度、减少了请求次数和网络带宽的消耗。希望对大家有所帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/5eedc8a5b5cbfe1ea0612317


猜你喜欢

  • npm包rollup-plugin-clear使用教程

    前言 npm(Node Package Manager)是JavaScript的包管理工具。它可以通过一些列命令帮助我们快速安装、升级、管理依赖项。我们常常使用npm来安装第三方依赖库,这些依赖库提供...

    4 年前
  • npm 包 regexp-sourcemaps 使用教程

    介绍 regexp-sourcemaps 是一款基于正则表达式和 sourcemaps 的 npm 包,可以帮助前端开发者更加高效地调试代码。该包主要提供了一个工具函数,将源码映射为编译后的代码,方便...

    4 年前
  • npm 包 gulp-wrap-commonjs 使用教程

    前言 在前端开发中,许多工程化的工具包都需要使用 Node.js 平台来进行构建打包操作。其中,使用 gulp 来构建前端工程得到广泛应用。而在使用 gulp 进行前端开发的过程中,我们往往会用到一些...

    4 年前
  • npm 包 error 使用教程

    简介 Npm 包 error 是一个非常实用的 JavaScript 库,它可以帮助开发者轻松地处理异常。不管是在前端还是后端,异常处理都是一个非常重要的方面,它可以帮助我们更好地理解和调试代码,保证...

    4 年前
  • npm 包 maddox 使用教程

    简介 Maddox 是一个用于简化 Web 应用中事件传递和管理的工具集。它提供了一种可伸缩的方式来处理事件和状态,使得代码更容易阅读和维护。Maddox 通过一系列的 API 和工具来实现事件的传递...

    4 年前
  • NPM 包 karma-painless 使用教程

    介绍 karma-painless 是一个基于 karma 的测试运行工具,支持使用 painless 来进行测试。painless 是 Elasticsearch 的一种测试语言,它实现了一种类似于...

    4 年前
  • npm 包 function-done 使用教程

    在前端开发的过程中,我们经常会用到异步回调函数。如果回调函数嵌套的层数多了,代码的可读性和可维护性就会大打折扣,因此我们需要一些工具来解决这个问题。其中一个好用的工具就是 npm 包 function...

    4 年前
  • npm 包 painless-reporter-helper 使用教程

    简介 painless-reporter-helper 是一个 Node.js 的 npm 包,用于生成简洁易读的测试报告。它可以与常用的 JavaScript 测试框架如 Mocha 和 Jest ...

    4 年前
  • npm 包 painless 使用教程

    简介 Painless 是一个 JavaScript 测试库,它的目标是通过提供简单易用的 API 和详细的测试报告来降低测试的学习成本和使用难度。Painless 支持多种断言和异步测试,并且具有可...

    4 年前
  • npm 包 setasap 使用教程

    npm 包 setasap 使用教程 在前端领域,很多开发者会使用 npm 包来完成任务,其中一个非常实用的 npm 包就是 setasap。setasap 可以帮助开发者更加高效地处理异步任务,下面...

    4 年前
  • npm 包 typo-js 使用教程

    前言 在开发过程中,难免会出现拼写错误。而繁琐的手动查错常常会耗费大量的时间和精力,因此一个能够智能检测拼写错误的 npm 包就变得尤为重要。在这篇文章中,我们将介绍一个名为 typo-js 的 np...

    4 年前
  • NPM包Codemirror-spell-checker使用教程

    简介 CodeMirror是一款用JavaScript编写的代码编辑器,可以用于编辑HTML/CSS/JavaScript等各种语言的代码。而 Codemirror-spell-checker 则是 ...

    4 年前
  • npm 包 angular-scenario 使用教程

    简介 angular-scenario 是一个可用于 AngularJS 端到端测试的 npm 包,它提供了一个高级 API 用于模拟用户操作并测试使用 AngularJS 开发的应用程序。

    4 年前
  • npm 包 grunt-hub 使用教程

    在前端开发过程中,经常需要管理多个项目,每个项目都有自己的构建工具和一些任务需要运行。如果每个项目都需要在本地单独运行,那么将会浪费很多时间。而 grunt-hub 这个 npm 包就是为了解决这个问...

    4 年前
  • npm 包 grunt-build-tools 使用教程

    在前端开发中,构建工具是非常重要的辅助工具。它可以帮助我们自动化编译、打包、部署代码等工作,提高开发效率和代码质量。而 grunt-build-tools 是一款非常好用的构建工具,它基于 Grunt...

    4 年前
  • Listen-js 使用教程

    在前端开发中,JavaScript 是非常重要的一部分,其持续快速的发展已经成为了一个庞大的生态系统。在这个系统中,npm 是最流行的 JavaScript 包管理器之一,其用于发现、安装、发布和管理...

    4 年前
  • npm 包 device-manager 使用教程

    在前端开发中,我们经常会面临处理设备相关信息的任务,例如获取设备的屏幕宽度、判断当前浏览器是否支持某种特性等。而这些常见的问题往往需要使用一些工具库来解决。在这篇文章中,我们介绍一款常用的 npm 包...

    4 年前
  • npm 包 element-kit 使用教程

    本文介绍如何使用 npm 包 element-kit 来快速开发前端应用,该包提供了常用 UI 组件及其相关的数据处理方法,能够极大地提升开发效率。本文主要包含以下内容: element-kit 的...

    4 年前
  • npm 包 build-tools 使用教程

    在前端开发中,使用构建工具可以让我们更轻松地管理项目的依赖、优化代码、转换代码等等。build-tools 就是一个非常好用的构建工具,它可以在项目中引入各种广受欢迎的插件和 Loader,帮助我们完...

    4 年前
  • npm 包 handler 使用教程

    在前端开发中,我们常常需要使用大量的第三方库,而 npm 是当前前端开发最常用的包管理器之一。而在使用这些第三方库时,我们经常会遇到需要自己编写处理器的情况,手写处理器在处理函数较多或者是处理函数需要...

    4 年前

相关推荐

    暂无文章