GraphQL 是一种用于 API 开发的查询语言和运行时,它旨在提高 API 的效率和灵活性。它允许客户端精确地指定需要的数据,并且可以在一个请求中获取多个资源。在本文中,我们将介绍如何在 Ruby on Rails 中实现 GraphQL API,并提供详细的学习和指导意义。
什么是 GraphQL
GraphQL 是一种查询语言和运行时,它是由 Facebook 开发的。它允许客户端精确地指定需要的数据,并且可以在一个请求中获取多个资源。GraphQL 的一个重要特点是它允许客户端指定返回的字段和它们的关系,从而减少了网络传输的数据量。这使得 GraphQL 在移动应用和低带宽网络环境下的表现更加出色。
Ruby on Rails 中的 GraphQL
Ruby on Rails 是一个流行的 Web 开发框架,它提供了一个强大的 MVC 模型,使得开发人员可以轻松地构建 Web 应用。在 Ruby on Rails 中实现 GraphQL API 的方法有很多种,我们将介绍使用 graphql-ruby
gem 的方法。
安装 graphql-ruby
gem
首先,我们需要在 Gemfile 中添加 graphql
和 graphql-ruby
:
gem 'graphql' gem 'graphql-ruby'
然后运行 bundle install
安装 gem。
定义 GraphQL Schema
在 Ruby on Rails 中实现 GraphQL API 的第一步是定义 GraphQL Schema。Schema 描述了所有可用的查询和变更操作,以及它们的输入和输出类型。我们可以使用 graphql-ruby
gem 提供的 GraphQL::Schema.define
方法来定义 Schema。
class MySchema < GraphQL::Schema query QueryType end
在上面的代码中,我们定义了一个名为 MySchema
的 GraphQL Schema,它具有一个名为 QueryType
的查询类型。在下面的代码中,我们将定义 QueryType
。
定义查询类型
查询类型定义了所有可用的查询操作。我们可以使用 graphql-ruby
gem 提供的 GraphQL::ObjectType.define
方法来定义查询类型。
// javascriptcn.com 代码示例 QueryType = GraphQL::ObjectType.define do name 'Query' description 'The query root of this schema' field :user, UserType do description 'Find a user by ID' argument :id, !types.ID resolve ->(obj, args, ctx) { User.find(args[:id]) } end end
在上面的代码中,我们定义了一个名为 QueryType
的查询类型,它具有一个名为 user
的查询字段。该字段接受一个名为 id
的参数,并返回一个名为 UserType
的类型。在 resolve
方法中,我们使用 args[:id]
查找指定的用户。
定义类型
类型定义了查询和变更操作的输入和输出类型。我们可以使用 graphql-ruby
gem 提供的 GraphQL::ObjectType.define
方法来定义类型。
UserType = GraphQL::ObjectType.define do name 'User' description 'A user' field :id, !types.ID field :name, !types.String field :email, !types.String end
在上面的代码中,我们定义了一个名为 UserType
的类型,它具有三个字段:id
、name
和 email
。每个字段都有一个类型和一个描述。
启动 GraphQL API
我们已经定义了 GraphQL Schema、查询类型和类型。现在我们可以启动 GraphQL API 并测试它了。我们可以使用 graphql-ruby
gem 提供的 GraphQL::Rails::ControllerMethods
将 GraphQL API 添加到 Rails 应用中。
class GraphqlController < ApplicationController include GraphQL::Rails::ControllerMethods def execute result = MySchema.execute(params[:query], variables: params[:variables]) render json: result end end
在上面的代码中,我们定义了一个名为 GraphqlController
的控制器,并包含了 GraphQL::Rails::ControllerMethods
。在 execute
方法中,我们使用 MySchema.execute
方法执行 GraphQL 查询,并将结果作为 JSON 格式返回。
现在我们可以使用 GraphQL 客户端测试我们的 API 了。我们可以使用 curl
命令发送一个简单的 GraphQL 查询:
$ curl -X POST -H "Content-Type: application/json" -d '{"query": "{ user(id: 1) { name } }"}' http://localhost:3000/graphql
在上面的代码中,我们向 http://localhost:3000/graphql
发送一个 POST 请求,并包含一个 JSON 格式的查询。查询返回 ID 为 1 的用户的名称。
总结
在本文中,我们介绍了如何在 Ruby on Rails 中实现 GraphQL API,并提供了详细的学习和指导意义。我们使用 graphql-ruby
gem 定义了 GraphQL Schema、查询类型和类型,并使用 GraphQL::Rails::ControllerMethods
将 GraphQL API 添加到 Rails 应用中。如果您正在寻找一种高效和灵活的 API 解决方案,那么 GraphQL 是一个不错的选择。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6553061bd2f5e1655dcb62a7