用途
Hasura GraphQL Engine 用于基于现有 PostgreSQL 数据库快速构建生产可用的 GraphQL API。其核心价值在于自动生成 API:将 Hasura 指向数据库并跟踪表后,即可立即获得查询(query)、变更(mutation)和订阅(subscription),无需编写解析器、ORM 配置或样板代码。它适合需要快速交付 GraphQL 接口、实现细粒度访问控制、构建实时应用或整合多数据源的场景。
主要能力
即时 GraphQL API 生成:跟踪 PostgreSQL 表后自动生成查询、变更与订阅;自动推断外键关系为 GraphQL 连接;数据库模式直接映射为 GraphQL 类型;每个查询默认具备对应的实时订阅能力。
元数据驱动架构:以 JSON/YAML 元数据定义 API,采用声明式配置,元数据文件可纳入 Git 版本控制,并可通过 Hasura CLI 管理元数据与迁移,或通过元数据 API 实现自动化。
权限系统:按角色、按 GraphQL 操作定义权限,支持行级安全(通过布尔检查表达式过滤可访问行)、列级安全(对特定角色隐藏敏感列),并可使用会话变量(如 JWT 声明或 Webhook 数据)实现动态权限。权限类型包括 select、insert、update、delete。
认证集成:Hasura 将认证委托给外部服务,自身负责授权。支持 JWT 模式(校验包含用户声明的 JWT)与 Webhook 模式(每次请求调用 Webhook 获取会话变量),可对接 Auth0、Firebase、Cognito 及自定义认证。会话变量包括 x-hasura-role、x-hasura-user-id 及自定义声明。
事件触发器:在数据库 INSERT、UPDATE、DELETE 时调用 Webhook,提供至少一次投递与重试机制,负载包含新旧行数据,适用于异步处理与外部集成,如发送邮件、同步 Elasticsearch、更新缓存、触发工作流。
Actions:通过自定义 GraphQL 变更与查询扩展 Hasura,可调用 REST API,使用 GraphQL SDL 定义输入输出类型,由自有 HTTP 端点处理 GraphQL 变量。常见用途包括支付处理、复杂校验、第三方 API 调用、自定义算法、文件上传、发送邮件。
远程 Schema:通过 Schema 拼接合并外部 GraphQL API,可扩展类型字段、应用基于角色的权限、使用命名空间隔离以避免冲突,适用于微服务、遗留 GraphQL API 与第三方服务。
实时订阅:原生 GraphQL 订阅,数据变化时自动推送更新,基于 WebSocket 双向通信,支持多路复用与过滤,在受限网络中可回退为基于 HTTP 的流式传输。
使用方式
基本流程为:连接 Hasura 到 PostgreSQL 数据库,在 Hasura Console 中跟踪表,随后 GraphQL API 立即可用。权限、事件触发器、Actions、远程 Schema 等均可通过 Console 或元数据 API 配置。认证方面,JWT 模式需设置 HASURA_GRAPHQL_JWT_SECRET 环境变量,JWT 声明中需包含 x-hasura-default-role 与 x-hasura-allowed-roles;Webhook 模式需设置 HASURA_GRAPHQL_AUTH_HOOK 与 HASURA_GRAPHQL_AUTH_HOOK_MODE。事件触发器可通过 Console 的 Events 标签创建,或通过元数据 API 的 create_event_trigger 创建,并可配置重试次数、间隔与超时。Actions 通过 GraphQL SDL 定义类型,并在配置中指定 handler、同步或异步类型及权限。远程 Schema 通过 add_remote_schema 添加,可配置请求头、超时、类型与字段命名定制。
适用场景
- 快速构建 GraphQL API,无需编写后端代码
- 从现有 PostgreSQL 数据库获得即时 CRUD API
- 实现行级与列级安全
- 构建带 GraphQL 订阅的实时应用
- 整合多种数据源(数据库、REST API、GraphQL 服务)
- 通过数据库触发器构建事件驱动架构
- 通过 Actions 扩展自定义业务逻辑
- 在 API 层实现认证与授权
- 快速构建管理面板、仪表盘或内部工具
- 从 REST 迁移到 GraphQL 而不重写后端
- 需要生产级特性(缓存、限流、监控)
- 构建基于角色的多租户 SaaS 应用
限制
资料未提供关于收费、价格、平台支持范围、性能指标或具体部署环境要求的信息,暂未提供。