引言
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 'graphql' gem 'apollo-federation', '~> 0.9.0'
然后,安装 gem 后,需要在 config/initializers/graphql.rb 中配置 GraphQL:
GraphQL::Rails.configure do |config| config.default_scoped_class = ActiveRecord::Base end
这将允许 GraphQL 使用 ActiveRecord 进行数据操作。
定义 GraphQL 的类型
在开始构建 GraphQL API 之前,需要定义数据类型。GraphQL 数据类型定义可以使用 Ruby 来进行定义。例如,下面的代码定义了一个 User 类型:
Types::UserType = GraphQL::ObjectType.define do name 'User' field :id, !types.ID field :name, !types.String field :email, !types.String end
在这个例子中,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 服务器。可以使用以下代码来构建:
class MySchema < GraphQL::Schema query QueryType end class MyServer < ApolloFederation::Gateway schema(MySchema) end
在这里,我们构建了一个名为 MyServer 的服务,将 MySchema 设置为其共享的 GraphQL 架构。
测试 API
最后我们需要测试我们的 API。可以通过以下代码将查询发送到 Apollo 服务器:
query = 'query { users { id name email } }' response = MyServer.execute(query) query = 'query { userByEmail(email: "test@test.com") { id name email } }' response = MyServer.execute(query)
在这里,我们定义了两个查询。第一个查询将返回所有用户的 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