GraphQL 设计中 Resolver 分离的方案

阅读时长 7 分钟读完

什么是 GraphQL

GraphQL 是一种已经广泛使用的查询语言,用于构建 API。GraphQL 十分灵活,能够让客户端来决定请求数据的结构和内容,减少了不必要的数据传输和服务器端的开销。

Resolver 的作用

在 GraphQL 中,Resolver 负责查询请求数据,并在服务器上执行逻辑,将结果返回给客户端。它们是组成 GraphQL 查询和类型系统的核心组件。

Resolver 可以从各种来源获取数据,如数据库、REST API、其它 GraphQL 系统等。Resolver 可以定义在类型定义文件中,也可以使用代码中的函数来定义。

通常,Resolver 是将处理请求的 API 逻辑分解为可维护的单元的关键所在。

Resolver 分离的方案

Resolver 的设计非常重要,因为它可以决定构建响应式 API 的质量和可靠性。下面是分离 Resolver 的一些最佳实践:

1. Resolver 的分离

我们建议将 Resolver 抽象为独立的模块。这有助于将前端/客户端和后端/服务器端之间的责任划分清晰,并防止过于紧密的耦合。

下面是一个例子:

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

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

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

该代码创建了一个 resolvers 对象,该对象包含从 productResolverorderResolver 模块导入的 Query 和 Mutation Resolver。

你也可以在 Resolver 中使用类似的方法来分离逻辑:

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

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

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

2. Resolver 的模块化

模块化的 Resolver 使得代码更利于管理,容易维护和测试。每个 Resolver 都应该被定义在一个单独的文件中,并且文件命名应该能够体现 Resolver 的作用。

下面是一个 Resolver 模块的例子:

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

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

3. Resolver 的测试

单独测试 Resolver 是非常重要的,这不仅帮助我们保证 Resolver 的正确性,也提供了一个在代码修改时不会破坏功能的方式。

测试可以与 Resolver 一起创建并在单独的文件中执行。只需要编写测试用例,引入 Resolver 和需要进行的断言即可。

下面是一个例子:

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

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

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

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

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

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

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

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

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

总结

Resolver 是构建 GraphQL API 中不可或缺的组成部分。按照最佳实践来进行 Resolver 设计和分离可以帮助我们更好地管理代码、减少混乱、使得代码更利于维护和测试。

通过实践、探索和实现,在我们的项目中使用本文所介绍的 Resolver 设计和分离方案,以提供更高质量和可靠性的 API。

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

纠错
反馈