GraphQL 教程

GraphQL 是一种用于构建 API 的查询语言和运行时系统,它由 Facebook 开发并于 2015 年首次公开发布。GraphQL 的主要目标是提供更高效,更强大和更灵活的 API,它能够帮助开发人员更好地管理数据,并且能够适应不断变化的需求。

GraphQL 的优点

相比传统的 REST API,GraphQL 具有以下优点:

  1. 客户端可以自定义查询,只请求需要的数据,减少了不必要的网络传输,提高了性能。
  2. GraphQL 支持数据的联合查询,可以一次性请求多个接口的数据,降低了网络请求的次数。
  3. GraphQL 具有强类型系统,可以在编译时检查查询语句的正确性,减少了运行时错误。
  4. GraphQL 可以提供实时数据更新,支持 WebSockets 协议,可以在数据更新时自动推送更新的数据到客户端。

GraphQL 的基本概念

在学习 GraphQL 之前,我们需要了解一些基本概念。

Schema

Schema 是 GraphQL 的核心概念之一,它定义了 API 的类型和操作。Schema 由类型定义和查询定义组成,类型定义描述了数据的结构和类型,查询定义描述了可以执行的操作。

例如,下面是一个简单的 Schema:

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

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

这个 Schema 定义了一个查询操作 user,接受一个 id 参数,并返回一个 User 类型的对象。

Resolver

Resolver 是执行查询操作的函数,它负责根据查询语句返回相应的数据。Resolver 可以是任何函数,例如从数据库查询数据、调用外部 API 等。

例如,下面是一个简单的 Resolver:

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

这个 Resolver 接受一个 id 参数,从数据库查询相应的用户数据,并返回该用户的信息。

Query

Query 是执行查询操作的语句,它描述了客户端需要返回的数据。Query 和 Schema 是相互关联的,Schema 定义了可以执行的操作,Query 描述了要执行的操作。

例如,下面是一个简单的 Query:

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

这个 Query 查询了一个 id1 的用户的信息,返回该用户的 idnameemail

GraphQL 的实现

GraphQL 的实现有很多种方式,可以使用各种编程语言和框架。在本教程中,我们将使用 Node.js 和 Apollo Server 来实现 GraphQL API。

安装

首先,我们需要安装 Node.js 和 Apollo Server。可以使用以下命令安装:

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

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

实现 Schema

我们可以在一个单独的文件中定义 Schema。例如,我们可以在 schema.js 文件中定义一个用户查询操作:

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

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

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

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

实现 Resolver

我们可以在一个单独的文件中定义 Resolver。例如,我们可以在 resolvers.js 文件中实现一个查询用户的 Resolver:

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

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

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

启动 Apollo Server

最后,我们需要启动 Apollo Server,将 Schema 和 Resolver 传递给 Apollo Server:

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

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

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

现在,我们可以运行 node index.js 启动 Apollo Server,访问 http://localhost:4000 即可使用 GraphQL Playground 进行测试。

示例代码

下面是一个完整的示例代码:

schema.js

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

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

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

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

resolvers.js

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

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

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

db.js

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

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

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

index.js

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

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

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

总结

本文介绍了 GraphQL 的基本概念和优点,并提供了一个使用 Node.js 和 Apollo Server 实现 GraphQL API 的示例代码。GraphQL 是一个非常强大和灵活的 API 构建工具,它可以帮助开发人员更好地管理数据和适应变化的需求。希望本文能够对您了解 GraphQL 有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/663c0b42d3423812e49ee684