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

前言

GraphQL 是一种新颖的 API 设计语言,其可以帮助我们轻松地定义数据结构,并拥有强大的查询功能。@graphql-tools/wrap 是一个非常有用的 npm 包,其可以在 GraphQL API 和 HTTP REST API 之间进行转换,支持自定义的转换逻辑,开发者可以在代码层面随意定制转换过程,非常适用于现实场景中的后端服务架构升级。

本篇文章将介绍如何使用 @graphql-tools/wrap,实现 GraphQL API 和 HTTP REST API 的转换,以及如何进行自定义转换,最后会给出一个示例应用。

@graphql-tools/wrap 简介

@graphql-tools/wrap 提供了 wrapSchema 方法,可以把一个 GraphQL Schema 和一个转换方法 transform 传入,返回一个新的 GraphQL Schema 对象,根据传入的转换方法,将输入的数据格式转换为输出的数据格式。wrapSchema 可以支持转换流程分为两个阶段:

  1. GraphQL Query 被解析到对应 REST API 的请求,并发送到对应的 REST 服务器。
  2. GraphQL Proxy 从 HTTP REST API 中接收响应,并将其转换为 GraphQL API 的响应数据格式。

@graphql-tools/wrap 的使用

我们以一个 JSONPlaceholder REST API 为例,来演示如何使用 @graphql-tools/wrap。

1. 添加依赖

通过 npm 添加 @graphql-tools/wrap 包:

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

2. 编写转换方法

我们需要先编写转换方法。本例使用的转换方法就是将 GraphQL API 转换为 JSONPlaceholder REST API 请求。具体代码如下:

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

3. 使用转换方法

将生成的新的 GraphQL Schema 对象用于创建 GraphQL API。具体代码如下:

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

至此,我们就实现了 GraphQL API 和 JSONPlaceholder REST API 的转换。例如我们有一个查询请求:

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

将其转换为 JSONPlaceholder 的请求:

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

得到的响应是:

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

自定义转换方法

使用 @graphql-tools/wrap 具有更加灵活的自定义功能。我们可以编写自己的转换方法以满足项目的需求。以下是一个自定义的转换方法用于将转化后的 REST API 响应转换为 GraphQL 数据格式:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-- -----

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

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

示例应用

最后,我们给出一个示例应用。应用将 @graphql-tools/wrap 和 JSONPlaceholder REST API 集成,编写一个图书管理系统。具体实现请看下面的代码:

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

上面的应用展示了如何将 JSONPlaceholder API 查询转换为 GraphQL 查询字段,并在 GraphQL Resolver 中进行处理,最终通过 API 中的 books 返回给客户端。

结论

到此,我们已经学习了 @graphql-tools/wrap 这个包的使用。我们可以看到,用这个包来处理 GraphQL 和 HTTP REST API 的转换是相当方便和高效的。如果你在你的项目中需要进行 GraphQL 和 HTTP REST API 的转换,那么你应该考虑使用 @graphql-tools/wrap。

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


猜你喜欢

  • 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 年前

相关推荐

    暂无文章