所有文章 > 如何集成API > 使用 Hasura Actions 将 Ruby on Rails REST API 转换为 GraphQL
使用 Hasura Actions 将 Ruby on Rails REST API 转换为 GraphQL

使用 Hasura Actions 将 Ruby on Rails REST API 转换为 GraphQL

在本文中,我们将演示如何通过 Hasura Actions 将现有的 Ruby on Rails REST API 转换为 GraphQL。这可以让你利用 Hasura 的强大功能,将自定义业务逻辑无缝集成到 GraphQL API 中,提高开发效率和可维护性。


一. 什么是 Hasura Actions?

Hasura Actions 是一种扩展 Hasura GraphQL 模式的方式,允许你定义自定义查询(Query)和变更(Mutation),以实现复杂的业务逻辑。典型应用场景包括:

  • 数据验证
  • 外部数据源的数据丰富
  • 复杂业务逻辑处理

如果已有 GraphQL 服务器,也可以通过远程模式与 Hasura 集成,Hasura 会自动合并 GraphQL 模式。

本教程聚焦于使用 Actions 将 Ruby on Rails REST API 转换为 GraphQL。


二. 准备工作:Hasura 与 Postgres 设置

  1. 创建一个 Postgres 数据库,可使用 Heroku 免费层。
  2. 登录 Heroku,创建新项目并启动控制台。
  3. 获取 Hasura GraphQL 端点,该端点支持全局访问、安全且可扩展。

三. 创建 Hasura Action

  1. 打开 Hasura 控制台,进入 Actions 标签页,点击 Create
  2. 定义一个名为 registerUser 的 Mutation,参数包括 nameemailpassword,返回 id
mutation {
  registerUser(name: "Marion", email: "marion@example.com", password: "mysecretpassword") {
    id
  }
}

提示:如果出现 HTTP 异常,这是因为处理程序 URL 尚未配置。


四. 自动生成 Ruby on Rails 样板代码

创建 Action 后,可点击 Codegen 自动生成 Rails 样板代码:

class HasuraController < ActionController::API
  def register_user_handler
    request_data = params[:input]
    render json: request_data
  end
end

五. 添加业务逻辑

在生成的代码中实现核心逻辑,例如:

  1. 哈希用户密码。
  2. 调用 Hasura API 保存用户数据。
  3. 返回用户对象或错误信息。

示例:

class HasuraController < ActionController::API
  def register_user_handler
    input = params[:input]
    hashed_password = BCrypt::Password.create(input[:password])
    # 调用 Hasura API 保存用户数据
    render json: { id: 1 } # 返回示例用户 ID
  end
end

六. 配置与运行服务器

  1. 安装 Ruby 和依赖。
  2. 启动服务器:
ruby register_user.rb

服务器默认运行在 http://localhost:3000,更新 Hasura 中的 Action 处理程序 URL:

http://localhost:3000/registerUser

若 Hasura Cloud 无法访问本地服务器,可使用 ngrok 创建公网 URL:

ngrok http 3000

七. 测试 GraphQL 端点

在 GraphiQL 中测试:

mutation {
  registerUser(name: "John", email: "john@example.com", password: "securepassword") {
    id
  }
}

如果配置正确,将返回用户 ID。


八. 数据库与权限

  • 通过 Hasura 自动生成的 GraphQL API 与数据库交互。
  • 配置角色和权限,例如创建 public 角色,允许执行 registerUser 变更。

Hasura 提供基于角色的访问控制,可在 Permissions 标签页配置。


九. 重用现有 REST API

若已有 REST API,可通过 Action 将其转换为 GraphQL:

  1. 确保 REST API 能处理 Hasura 请求格式。
  2. 支持请求体格式:
{
  "action": { "name": "registerUser" },
  "input": { "name": "John", "email": "john@example.com", "password": "secret" },
  "session_variables": {
    "x-hasura-user-id": "1",
    "x-hasura-role": "public"
  }
}

可以在同一服务器托管多个端点或将功能拆分为无服务器函数(Serverless Functions)。


十. 总结

通过 Hasura Actions,你可以轻松将 Ruby on Rails REST API 转换为 GraphQL,同时保留原有业务逻辑。Hasura 提供的工具使开发、管理 GraphQL API 变得简单高效,是现代应用开发的理想选择。

原文链接:Hasura Blog

#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费