使用 Apollo 和 Active Record 来构建 GraphQL API

引言

GraphQL 是一种用于 API 的查询语言,它使得应用程序可以精确的描述它们需要的数据。相比于传统的 RESTful API,GraphQL 具有更高的灵活性和效率。Apollo 是一组用于构建 GraphQL API 和客户端的开发工具,而 Active Record 是一种数据映射模式,可用于在 Ruby on Rails 应用程序中创建和操作数据库记录。

在本文中,我们将介绍如何使用 Apollo 和 Active Record 来构建高效的 GraphQL API,通过讨论实例,探讨如何结合这两个技术来更好地构建 GraphQL API。

开始

首先,需要在 Ruby on Rails 应用程序中安装 Apollo 和 GraphQL,可以使用以下命令:

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

然后,安装 gem 后,需要在 config/initializers/graphql.rb 中配置 GraphQL:

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

这将允许 GraphQL 使用 ActiveRecord 进行数据操作。

定义 GraphQL 的类型

在开始构建 GraphQL API 之前,需要定义数据类型。GraphQL 数据类型定义可以使用 Ruby 来进行定义。例如,下面的代码定义了一个 User 类型:

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

在这个例子中,id,name 和 email 被定义为 User 类型的字段。在这里,需要注意的是,id,name 和 email 的类型被定义为 !types.ID,!types.String 和 !types.String。这些是 GraphQL 中的一些基本数据类型,可以根据需要使用。

定义 GraphQL 的查询

定义好类型之后,需要定义相应的查询。查询也可以使用 Ruby 进行定义。例如,下面的代码定义了一个查询 resolver:

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

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

在这个例子中,users 被定义为一个查询,并返回所有 User 类型的记录。查询 resolver 的参数由 GraphQL 自动填充,可以直接忽略。

定义 GraphQL 的变量

GraphQL API 也支持变量,变量可以被定义为查询的参数之一。例如,下面的代码定义了一个名称为 email 的变量:

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

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

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

在这个例子中,userByEmail 被定义为一个查询,并返回匹配 email 的 User 类型记录。在这里,定义了一个名为 email 的变量,并且要求该变量为一个 String 类型的非空值。在查询 resolver 中,可以使用 args[:email] 访问这个变量。

构建 Apollo 的服务

定义完 GraphQL 的类型、查询和变量之后,我们需要构建 Apollo 服务器。可以使用以下代码来构建:

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

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

在这里,我们构建了一个名为 MyServer 的服务,将 MySchema 设置为其共享的 GraphQL 架构。

测试 API

最后我们需要测试我们的 API。可以通过以下代码将查询发送到 Apollo 服务器:

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

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

在这里,我们定义了两个查询。第一个查询将返回所有用户的 id、name 和 email 信息,第二个查询将返回所有匹配 email 的用户的 id、name 和 email 信息。

结论

在本文中,我们介绍了如何使用 Apollo 和 Active Record 来构建高效的 GraphQL API。通过结合这两个技术,我们能够轻松地定义 GraphQL 的类型、查询和变量,构建 Apollo 服务器,并测试我们的 API。

GraphQL 提供了一种更加灵活和高效的数据查询方式,使得开发者可以更加精确地定义需要的数据。Apollo 和 Active Record 则提供了更加强大的工具,帮助我们更加高效地创建和操作 GraphQL API。

我们相信,这些技术将在未来的 Web 开发中扮演着越来越重要的角色。如果你正在寻找构建高效、灵活的 API 的方法,请考虑使用这些技术。

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