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

阅读时长 13 分钟读完

前言

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

纠错
反馈