
使用 Rust 构建功能完整的 gRPC API
在本文中,我们将演示如何通过 Hasura Actions 将现有的 Ruby on Rails REST API 转换为 GraphQL。这可以让你利用 Hasura 的强大功能,将自定义业务逻辑无缝集成到 GraphQL API 中,提高开发效率和可维护性。
Hasura Actions 是一种扩展 Hasura GraphQL 模式的方式,允许你定义自定义查询(Query)和变更(Mutation),以实现复杂的业务逻辑。典型应用场景包括:
如果已有 GraphQL 服务器,也可以通过远程模式与 Hasura 集成,Hasura 会自动合并 GraphQL 模式。
本教程聚焦于使用 Actions 将 Ruby on Rails REST API 转换为 GraphQL。
registerUser
的 Mutation,参数包括 name
、email
和 password
,返回 id
:mutation {
registerUser(name: "Marion", email: "marion@example.com", password: "mysecretpassword") {
id
}
}
提示:如果出现 HTTP 异常,这是因为处理程序 URL 尚未配置。
创建 Action 后,可点击 Codegen 自动生成 Rails 样板代码:
class HasuraController < ActionController::API
def register_user_handler
request_data = params[:input]
render json: request_data
end
end
在生成的代码中实现核心逻辑,例如:
示例:
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 register_user.rb
服务器默认运行在 http://localhost:3000
,更新 Hasura 中的 Action 处理程序 URL:
http://localhost:3000/registerUser
若 Hasura Cloud 无法访问本地服务器,可使用 ngrok 创建公网 URL:
ngrok http 3000
在 GraphiQL 中测试:
mutation {
registerUser(name: "John", email: "john@example.com", password: "securepassword") {
id
}
}
如果配置正确,将返回用户 ID。
public
角色,允许执行 registerUser
变更。Hasura 提供基于角色的访问控制,可在 Permissions 标签页配置。
若已有 REST API,可通过 Action 将其转换为 GraphQL:
{
"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