使用 GraphQL 构建可维护的 API

阅读时长 9 分钟读完

前言

在前端开发中,API 是不可或缺的一部分。传统的 RESTful API 存在一些问题,比如接口粒度过大或过小、数据冗余等。而 GraphQL 作为一种新型的 API 技术,能够解决这些问题,并提供更好的可维护性。

本文将介绍 GraphQL 的基础知识,并演示如何使用 GraphQL 构建可维护的 API。

GraphQL 是什么

GraphQL 是一种由 Facebook 开发的数据查询和操作语言。它允许客户端指定需要的数据,并返回与之匹配的数据。相比于传统的 RESTful API,GraphQL 更加灵活,因为它允许客户端定义返回的数据结构,而不是由服务端固定返回。

GraphQL 有以下几个特点:

  • 定义精细:GraphQL 允许客户端定义需要的数据结构,而不是由服务端固定返回。
  • 一次请求多个数据:GraphQL 允许一次请求多个数据,这样可以减少请求次数,提升性能。
  • 自我描述:GraphQL 有一套自我描述的语言,可以方便地理解和维护 API。

GraphQL 基础

Schema

在 GraphQL 中,Schema 是定义数据结构的核心部分。它描述了数据的类型、字段和关系。一个 GraphQL Schema 包含两个部分:

  • Query:用于读取数据。
  • Mutation:用于修改数据。

以下是一个简单的 Schema 示例:

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

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

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

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

Resolver

Resolver 是一个函数,用于处理客户端的请求。它接收一个参数,即客户端传递的参数。Resolver 的返回值必须与 Schema 中定义的数据类型匹配。

以下是一个简单的 Resolver 示例:

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

Query

Query 是用于读取数据的操作。客户端可以指定需要的数据,并返回与之匹配的数据。

以下是一个简单的 Query 示例:

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

Mutation

Mutation 是用于修改数据的操作。客户端可以指定需要修改的数据,并返回修改后的数据。

以下是一个简单的 Mutation 示例:

使用 GraphQL 构建可维护的 API 需要遵循以下几个原则:

定义精细

在定义 Schema 时,需要精细地定义数据类型、字段和关系。这样可以让客户端精确地获取需要的数据,而不会出现数据冗余或不足的情况。

一次请求多个数据

GraphQL 允许一次请求多个数据,这样可以减少请求次数,提升性能。在编写 Query 时,应该尽量合并需要的数据,避免重复请求。

自我描述

GraphQL 有一套自我描述的语言,可以方便地理解和维护 API。在编写 Schema 时,应该尽量使用自我描述的语言,方便其他开发者理解和使用 API。

示例代码

以下是一个使用 GraphQL 构建可维护的 API 的示例代码:

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

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

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

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

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

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

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

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

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

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

结论

使用 GraphQL 构建可维护的 API 可以提供更好的灵活性和性能。在实践中,需要遵循定义精细、一次请求多个数据和自我描述的原则,才能构建出高质量的 API。

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

纠错
反馈