用 GraphQL 解决 REST API 有的问题

阅读时长 5 分钟读完

REST API 是目前前端开发中最常用的一种方式,但是它也存在许多问题。例如,当我们需要获取多个资源时,需要进行多次请求;当需要获取部分资源或者特定形式的资源时,可能需要通过查询参数或者不同的 URL 进行多次请求;当后端数据结构发生变化时,需要整个重新定义 API。GraphQL 是一种新的 API 设计语言,它能够解决上述问题,甚至还能够解决我们一些预料之外的问题。

GraphQL 是什么?

GraphQL 是一个由 Facebook 创造的开放源代码的数据查询语言和运行时,它使 API 更加灵活、强大和易于理解。与 REST API 不同,GraphQL 的核心思想是“只要描述你需要的数据,那么你就可以得到它”,这意味着我们只需要发送一个 GraphQL 请求来获取我们需要的所有数据,而不是根据不同的 URL 和查询参数进行多次请求。GraphQL 还具有以下优点:

  • 发送请求和接收响应之间没有多余的数据传输,减少带宽消耗。
  • 数据结构的定义中包含了所有可能的查询语句,因此当后端数据结构发生变化时,只需要更改 GraphQL API 的定义即可。
  • 根据不同的使用场景定义不同的查询语句,从而确保只返回我们需要的数据。这有助于提高 API 的性能,并减少加载时间。

GraphQL 的实现

GraphQL 是一种 API 设计语言,其实现可以采用不同的技术栈。下面介绍两种常见的实现方式:

Apollo

Apollo 是一个 GraphQL 生态系统,提供了开发 GraphQL 应用程序所需的一切工具和框架。它可以将 GraphQL 与现有的web应用程序和 API 集成,并提供了一个强大的客户端和服务器。Apollo 有以下优点:

  • 类似于 REST API 的模式和数据源
  • 灵活的客户端状态管理
  • 对 SSR 和原生应用程序的支持
  • 支持 GraphQL 提供者,可以使用任何后端数据源

Relay

Relay 是 Facebook 工程师开发的一款框架,它是一个基于 React 的 JavaScript 框架,用于构建高性能、可扩展的、协作进行大型应用程序的 GraphQL 客户端。Relay 有以下优点:

  • 自动化数据请求
  • 与 GraphQL 可以无缝工作
  • 提供抽象和可伸缩式的组件和代码生成
  • 具有良好的文档支持

GraphQL 示例代码

下面是一个基于 Apollo 和 React 的 GraphQL 示例代码,用于获取 GitHub 上的用户基本信息:

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

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

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

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

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

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

总结

GraphQL 是一个新的 API 设计语言,它的优点在于它可以节省网络流量,更加灵活,易于更改数据结构等等。此外,我们可以使用不同的实现方式,如 Apollo 或 Relay,来使用 GraphQL。虽然它不是万能的,但有越来越多的前端开发者采用 GraphQL,并推崇其效果。

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

纠错
反馈