Hasura
为数据库和服务自动生成安全、实时 GraphQL API 的开源数据平台。
项目概述
Hasura GraphQL Engine 可连接 PostgreSQL 等数据源,自动生成 Query、Mutation 与 Subscription,并通过声明式权限、Actions、Events 和 Remote Schemas 组合业务逻辑。
Hasura 是面向数据 API 的开源 GraphQL 平台。稳定的 GraphQL Engine v2 可以连接 PostgreSQL 等数据源,根据表、视图、函数和关系自动生成 Query、Mutation 与实时 Subscription,并把角色、Session Variable、行过滤条件和列权限编译进数据库查询。团队还可以通过 Actions 加入自定义 Query / Mutation,通过 Event Trigger 和 Scheduled Trigger 驱动异步流程,通过 Remote Schema 与 Remote Join 组合其他 GraphQL 服务。Hasura 当前同时发展 v2 与 v3/DDN:v2 核心以 Haskell 实现、生态成熟且适合自托管;v3 核心改用 Rust,并以开放的 Native Data Connector 连接 PostgreSQL、MongoDB、ClickHouse、SQL Server 等数据源。本页快速开始聚焦官方仍称为稳定版本的 v2,同时单独说明 v3/DDN,避免混用两代项目格式和部署方式。
主要特点
Hasura 把数据库结构、声明式 Metadata 和身份声明编译成统一 API,让常规数据访问、授权、实时和服务组合不必重复编写 Resolver。
即时 GraphQL API
追踪数据库中的表、视图和函数后即可获得类型化 Query、Mutation 与 Subscription,并自动处理关系、过滤、排序、聚合和分页。
声明式细粒度权限
权限按角色、表和 Select、Insert、Update、Delete 操作配置,可限制行、列、聚合、返回数量、根字段及列预设。
实时 Subscription
客户端可通过 WebSocket 订阅数据库查询结果,权限规则仍会应用于实时数据,适合状态、通知和协作场景。
Actions 与自定义逻辑
把任意 HTTP 服务声明为自定义 GraphQL Query 或 Mutation,使支付、审核和复杂事务可以保留在独立业务服务中。
Events 与定时任务
Event Trigger 在数据库变化时可靠投递 Webhook,Scheduled Trigger 支持一次性和 Cron 任务,适合异步集成与后台处理。
Remote Schema 与 Remote Join
将现有 GraphQL 服务合并进统一 Schema,并在数据库字段与远程 API 之间建立关系,减少客户端跨服务编排。
Metadata、迁移与 CLI
数据源、关系、权限、Actions、Events 和 Remote Schemas 可导出为 Metadata;CLI 管理 SQL Migration、Seed 和多环境发布。
v3 与开放 Data Connector
Hasura v3/DDN 使用 Rust 引擎和 Native Data Connector 规范组合不同数据源,并支持 TypeScript、Python 与 Go Connector SDK。
适用场景
适合已有关系数据库、需要 GraphQL 数据层、多租户权限、实时查询或统一多个后端服务的产品团队。
现有 PostgreSQL 的 API 层
在不重写数据库的前提下快速暴露关系、视图和函数,并逐步把现有后端迁移到统一 GraphQL 数据访问层。
多租户 SaaS
结合 JWT 中的用户、组织和角色 Session Variable,为每张表配置行列权限、字段预设及租户隔离。
实时产品
为订单状态、运营大屏、聊天、通知、物流和轻量协作提供按权限过滤的 Subscription。
GraphQL BFF 与统一数据图
用 Remote Schema、Remote Join 和 Actions 聚合数据库、微服务与第三方 API,向客户端提供一个可组合入口。
事件驱动自动化
数据库事件和定时任务可触发邮件、Webhook、搜索索引、数据同步和外部工作流,同时保留重试与调用记录。
数据产品与内部工具
借助自动 Schema、权限和聚合接口,为运营后台、数据门户、合作方 API 及分析应用提供受控数据访问。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Hasura 擅长的地方
- 数据库 Schema 可快速转化为 Query、Mutation 和 Subscription,显著减少 Resolver 样板代码
- 把角色、行、列和操作权限声明为 Metadata,便于审查、复用和自动化部署
- 关系查询可被编译为数据库查询,避免传统逐字段 Resolver 常见的 N+1 往返
- Actions、Events、Remote Schemas 和 Remote Joins 允许在自动 API 之外保留任意业务服务
- 开源 v2 可使用 Docker 自托管,Hasura Cloud 与 DDN 提供托管和扩展路线
- CLI、Migration、Metadata 与 Seed 形成较完整的多环境交付工作流
需要注意
采用前应考虑的问题
它消费 JWT、Webhook Auth 和 X-Hasura-* Session Variable 来授权,但注册、登录、密码重置、MFA 与账号生命周期通常由外部身份系统负责。
X-Hasura-Admin-Secret 会绕过普通角色权限,绝不能进入浏览器、移动应用、前端环境变量、日志或公开仓库。
错误追踪表、开放匿名角色、过宽的关系权限或聚合权限都可能暴露大量数据;必须为每个角色和操作编写负向授权测试。
索引、关系基数、查询深度、排序、聚合、锁和连接池不会被 GraphQL 自动解决,应限制高成本查询并使用 Explain 与真实负载验证。
SQL Migration 和 Hasura Metadata 的应用顺序不当会产生不一致状态;生产流程需要检查 Metadata Consistency 并支持回滚。
支付、库存、审批和跨系统事务通常需要 Actions、数据库函数或独立服务来保持明确的领域边界与幂等性。
两者的项目配置、连接器、部署与部分能力不同,不能仅按大版本号直接替换;迁移前应逐项核对功能和运营模式。
缓存、连接器、可观测性、安全、HA 和运维功能可能因版本或套餐不同;选型时应以目标发行版文档和许可证为准。
快速开始
使用官方 Docker Compose 启动 GraphQL Engine 与 PostgreSQL,创建数据表并执行查询,再把迁移和 Metadata 纳入版本控制。
bashmkdir hasura-demo && cd hasura-demo
curl https://raw.githubusercontent.com/hasura/graphql-engine/stable/install-manifests/docker-compose/docker-compose.yaml -o docker-compose.yml
docker compose up -d
# 打开 http://localhost:8080/consolesqlcreate table public.todos (
id bigint generated by default as identity primary key,
user_id text not null,
title text not null,
completed boolean not null default false,
created_at timestamptz not null default now()
);
create index todos_user_id_created_at_idx
on public.todos (user_id, created_at desc);graphqlquery GetTodos($completed: Boolean!) {
todos(
where: { completed: { _eq: $completed } }
order_by: { created_at: desc }
limit: 20
) {
id
title
completed
created_at
}
}bashcurl http://localhost:8080/v1/graphql -H "Content-Type: application/json" -H "X-Hasura-Admin-Secret: <ADMIN_SECRET>" --data '{
"query": "query { todos(limit: 5) { id title completed } }"
}'yaml# metadata/databases/default/tables/public_todos.yaml
table:
name: todos
schema: public
select_permissions:
- role: user
permission:
columns:
- id
- title
- completed
- created_at
filter:
user_id:
_eq: X-Hasura-User-Id
limit: 100
insert_permissions:
- role: user
permission:
columns:
- title
- completed
check: {}
set:
user_id: X-Hasura-User-Idbashhasura init hasura-project --endpoint http://localhost:8080
cd hasura-project
hasura metadata export
hasura migrate create baseline --from-server
hasura metadata inconsistency statusbashhasura metadata apply-data-sources
hasura migrate apply --all-databases
hasura metadata apply
hasura metadata reload
hasura metadata inconsistency status下一步:示例使用稳定的 GraphQL Engine v2。浏览器请求必须通过可信身份系统签发的 JWT 或 Webhook Auth 获得 X-Hasura-* Session Variable;X-Hasura-Admin-Secret 会绕过普通权限,只能用于受控的管理和部署流程。
类似项目
这些项目也能缩短数据 API 与应用后端的搭建时间,但覆盖范围、认证归属、API 形态和运维边界不同。
Hasura vs Nhost
Hasura GraphQL Engine 是专注数据访问、授权、实时和服务组合的 API 层;Nhost 则在 Hasura 与 PostgreSQL 之上继续提供认证、文件存储、函数、邮件和完整本地开发体验。两者不是简单替代关系,Nhost 的 GraphQL 数据层本身就建立在 Hasura 生态之上。
| 比较维度 | Hasura | Nhost |
|---|---|---|
| 产品范围 | 数据 API、权限、实时、事件与 GraphQL 组合 | 数据库、Hasura、认证、存储、函数和平台工作流 |
| 数据库 | 连接已有或独立管理的数据源 | 项目内提供并管理 PostgreSQL 实例 |
| 身份认证 | 消费外部 JWT 或 Auth Webhook,不管理用户登录 | 内置 Nhost Auth、会话、登录方式与用户角色 |
| 文件能力 | 不提供通用应用文件存储 | 内置与 JWT 权限集成的 Storage 服务 |
| 自定义逻辑 | Actions、Events、Remote Schemas 和数据库函数 | 上述能力外再提供 Serverless Functions 与 Nhost Run |
| 本地开发 | Docker、Hasura CLI、Migration、Metadata 和 Seed | Nhost CLI 一次启动 Postgres、GraphQL、Auth、Storage 等 |
| 基础设施自由度 | 可自行选择数据库、身份、存储和服务架构 | 集成度更高,组件组合和平台约定更统一 |
| 更适合 | 已有数据和身份系统、只需强大的 GraphQL 数据层 | 从零构建产品并希望获得完整开源 BaaS |
如果已有 PostgreSQL、身份系统和对象存储,只需要为数据建立高性能 GraphQL、细粒度权限和事件集成,直接使用 Hasura 更轻;如果希望一开始就获得账号、文件、邮件、函数和统一的本地技术栈,Nhost 能减少集成工作。采用 Nhost 后仍应掌握 Hasura Metadata 与权限模型,因为它们依然是数据安全和 API 演进的核心。
资料核验
版本、维护信息与本页采用的官方资料来源。
本页依据 Hasura 官方 v2 Docs、DDN/v3 说明、权限文档与官方源码仓库整理。稳定版版本号、发布日期、许可证和两代引擎状态通过官方 GitHub Releases 与仓库说明核验。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 21 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。