如何使用 GraphQL 映射 Server 端的业务逻辑

阅读时长 11 分钟读完

GraphQL 是一种用于 API 的查询语言,通过定义数据的类型和结构,映射出后端业务逻辑,使得前端可以更加灵活地请求需要的数据。本文将介绍如何使用 GraphQL 映射 Server 端的业务逻辑,并提供示例代码。

什么是 GraphQL?

GraphQL 是一种由 Facebook 开发的 API 查询语言,它允许客户端指定需要的数据,而不是像 RESTful API 那样返回固定的数据结构。GraphQL 定义了一个类型系统,客户端可以根据这个类型系统来查询数据。GraphQL 的优势在于:

  • 灵活:客户端可以自由地指定需要的数据,避免了 RESTful API 中需要多次请求的问题。
  • 低耦合:GraphQL 通过定义类型系统来实现 API,客户端和服务端之间只需要约定好类型,就可以进行交互。
  • 易于扩展:GraphQL 的类型系统允许新增字段和类型,而不需要改变 API 的版本。

如何使用 GraphQL?

使用 GraphQL 需要遵循以下步骤:

1. 定义 Schema

Schema 定义了 GraphQL 的类型系统和查询语句。在 GraphQL 中,数据都是以类型的形式存在的,可以通过定义类型来描述数据的结构。例如,下面是一个定义用户类型的 Schema:

2. 定义 Resolver

Resolver 定义了查询语句的具体实现。在 GraphQL 中,每个查询语句都需要对应一个 Resolver 函数来处理请求。Resolver 函数需要返回一个与查询语句对应的类型。例如,下面是一个查询用户信息的 Resolver:

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

3. 启动 GraphQL 服务器

启动 GraphQL 服务器需要使用一个 GraphQL 服务器库,例如 Apollo Server。在启动服务器时,需要将 Schema 和 Resolver 传入服务器。例如,下面是一个启动 GraphQL 服务器的代码:

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

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

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

4. 发送查询请求

发送查询请求需要使用一个 GraphQL 客户端库,例如 Apollo Client。在发送请求时,需要指定查询语句和查询变量(如果有)。例如,下面是一个查询用户信息的客户端代码:

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

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

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

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

示例代码

下面是一个使用 GraphQL 映射 Server 端的业务逻辑的示例代码。这个示例代码实现了一个简单的博客系统,包括查询文章列表、查询文章详情、创建文章和更新文章等功能。

定义 Schema

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

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

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

定义 Resolver

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

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

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

启动 GraphQL 服务器

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

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

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

发送查询请求

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

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

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

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

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

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

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

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

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

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

结论

GraphQL 是一种灵活、低耦合、易于扩展的 API 查询语言,可以帮助前端更加灵活地请求需要的数据。使用 GraphQL 需要定义 Schema 和 Resolver,启动 GraphQL 服务器,并使用 GraphQL 客户端发送查询请求。在实际使用中,可以根据业务需要定义自己的 Schema 和 Resolver。

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

纠错
反馈