使用 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 设置
- 创建一个 Postgres 数据库,可使用 Heroku 免费层。
- 登录 Heroku,创建新项目并启动控制台。
- 获取 Hasura GraphQL 端点,该端点支持全局访问、安全且可扩展。
三. 创建 Hasura Action
- 打开 Hasura 控制台,进入 Actions 标签页,点击 Create。
- 定义一个名为
registerUser的 Mutation,参数包括name、email和password,返回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
五. 添加业务逻辑
在生成的代码中实现核心逻辑,例如:
- 哈希用户密码。
- 调用 Hasura API 保存用户数据。
- 返回用户对象或错误信息。
示例:
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
六. 配置与运行服务器
- 安装 Ruby 和依赖。
- 启动服务器:
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:
- 确保 REST API 能处理 Hasura 请求格式。
- 支持请求体格式:
{
"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
最新文章
- 如何使用Python创建API – Ander Fernández Jauregui
- API 集成成本全景解析:从 2 千到 15 万美元的隐藏账单与 ROI 攻略
- 2025年小本生意新风口:如何借助 AI 实现低成本高效率创业?
- 使用 python 和 flask 构建 restful api
- rpa vs. api:差异与应用场景
- 微服务 API 安全实战:防护策略与漏洞修复
- 从零开始掌握Reddit获取API密钥与数据分析
- API在保险公司数字化转型中的作用
- GraphQL API 实战:架构设计、性能优化与安全防护
- 连接mqtt与rest api:完整教程
- Java String API 的强大功能:2024 年 A+ 指南 – Aloa
- 使用FileSystem API读写HDFS数据