Hasura 入门
简介
[](https://res.cloudinary.com/practicaldev/image/fetch/s--RrJdPj9j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/i/z0i3f7aii1hxv7ua2exy.png)
图像源
Hasura是一个开源引擎,可连接到您的数据库和微服务并自动生成生产就绪的 GraphQL 后端。
Hasura 将您的 Postgres 模式映射到 GraphQL 并为您生成查询、突变和订阅。除此之外,它们还提供不同类型的查询过滤器,如where
、order_by
、limit
、offset
等,以帮助您在前端构建复杂的功能,如过滤、排序、分页等。
部署
Hasura 提供了多种部署 Hasura 引擎的方法:
-
至 6
-
码头工人
-
Kubernetes
使用 Docker,您几乎可以将引擎部署在任何允许您使用 docker 的服务上。
使用 Heroku 部署
要使用 Heroku 部署 Hasura,请转到此文档。点击该Deploy to Heroku
按钮,您将被重定向到 Heroku 以部署您的应用程序。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--pQR2dmI5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/p1zzlyaijfukss922y44.png)
为您的应用程序命名并选择要部署到的区域,然后单击Deploy App
按钮并等待 Heroku 部署您的应用程序。
部署后,您可以单击View App
按钮,您将被带到 Hasura 控制台。 Hasura 控制台有 4 个选项卡,如果您使用的是最新的 beta 版本,那么您将有一个名为Actions
的选项卡
-
GraphiQL: 此选项卡可让您访问 graphiql 游乐场以探索查询、突变和订阅。
-
数据: 在此选项卡中,您可以管理 SQL 表并创建不同的模式来托管相关表。
-
Remote Schema: 这就是
microservices
的用武之地。使用远程模式,您可以将服务添加到您的应用程序。现在这些服务也必须用 GraphQL 编写。此功能类似于 Apollo 引入的 Schema Stiching 或Schema Federation,让您将后端划分为多个服务。 -
事件: 当您想要执行基于事件触发器的自定义逻辑时,例如创建、更新或删除表中的行时,会出现事件。
-
操作: 目前处于测试阶段,可以将操作添加到现有的 Hasura 架构中以扩展它以将业务逻辑添加到您的查询中,并执行数据验证甚至身份验证/授权等操作。
添加架构
对 SQL 表有一点了解可能会派上用场,但也有一种 GUI 方式来管理表,也可以用来代替在 SQL 编辑器中编写 SQL 代码。让我们从创建表开始。
创建表
在Data
选项卡中,单击Create Table
按钮,您将进入表创建表单。我们将以费用管理应用程序为例进行演示。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--S4D3Gztl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/qy3r7hxm8ybwdh3zuy5t.png)
让我们添加expenses
作为我们的表名,我们将创建以下字段。
-
id:属于
UUID
类型,设置为unique
,默认值设置为gen_random_uuid()
。 -
标题:属于
Text
类型。 -
类别:也属于
Text
类型。 -
日期:类型
timestamp without time zone
-
数量:
double precision
型 -
payment_method:类型为
Text
并设置为可为空。
您的表单现在应该如下所示。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--wog1STuK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/63irfbqx1eartltu6fzc.png)
现在点击表单底部的Add Table
按钮来添加表格。现在,如果您转到GraphiQL
选项卡,您将看到 Hasura 已为您生成查询,您可以开始探索。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--8I2xyGxE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/i/apxl1jprt7zpbcc57j09.png)
Hasura 为您生成以下查询、突变和订阅。
-
个查询
-
花费
-
费用_by_pk
-
费用_聚合
-
突变
-
插入_费用
-
删除_费用
-
更新_费用
-
订阅
-
花费
-
费用_by_pk
-
费用_聚合
这里expenses_by_pk
用于通过主键获取费用。查询的名称也是根据表名生成的,可以更改为:
数据 > 选择表 > 修改 > 自定义 GraphQL 根字段。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--r_CcL_vX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/i/2uw180wy0ld7kevv1fe3.png)
修改后,只需保存更改,Hasura 将为您更新查询名称。
写查询
Hasura GraphQL 引擎从 Postgres 模式模型中自动生成查询作为 GraphQL 模式的一部分。它生成一系列可能的查询和运算符,这些查询和运算符也适用于 SQL 模式中定义的关系。
query MyQuery {
expenses {
id
date
title
amount
category
payment_method
}
}
进入全屏模式 退出全屏模式
您可以像使用 GraphQL 一样向查询中添加字段。 Hasura 为您提供额外的是不同类型的子句,让您的生活更轻松,并立即内置过滤、排序、搜索功能。
-
distinct_on
:当您需要获取一个没有其他对象共享的具有唯一值的对象时使用。 -
limit
:用于限制您在响应中获得的行/对象的数量。 -
offset
:最好与限制一起使用以进行分页。 -
order_by
:用于按顺序排列查询响应。多个字段可以与asc
或desc
序列一起使用。 -
where
:当需要根据不同字段的比较来查找行/对象时使用。 Hasura 足够聪明,可以根据字段的类型显示适当的过滤器。
写入突变
对于每个表,您会得到三个突变:
-
创建
-
更新
-
删除
每个突变都使您可以访问批处理操作。因此,要添加单行/对象,您可以使用以下突变。
mutation MyMutation {
create_expenses(
objects: {
date: ""
title: ""
amount: ""
category: ""
payment_method: ""
}
) {
returning {
id
date
title
amount
category
payment_method
}
}
}
进入全屏模式 退出全屏模式
要一次添加多个行/对象,只需传递一组对象而不是一个对象。
mutation MyMutation {
create_expenses(
objects: [
{
amount: "487"
title: "Groceries"
payment_method: "Card"
category: "Food & Drinks"
date: "2017-11-17T18:30:00"
}
{
amount: "5400"
title: "Table"
payment_method: "Card"
category: "Furniture"
date: "2017-11-16T18:30:00"
}
]
) {
returning {
id
date
title
amount
category
payment_method
}
}
}
进入全屏模式 退出全屏模式
写作订阅
订阅在编写方式上与查询相同,除了关键字query
,使用subscription
。
subscription MyQuery {
expenses {
id
date
title
amount
category
payment_method
}
}
进入全屏模式 退出全屏模式
结论
我已经在工作中使用 Hasura 几个星期了。 Hasura 帮助我们构建了一个功能丰富的应用程序,几乎没有后端代码库。因此决定分享我在过去几周学到的东西。上周我还构建了一个费用应用程序,可以在我的Github上找到。
我将写更多关于将 Hasura 与我们的前端集成的文章,敬请期待。您可以在我的Twitter或我的Instagram上关注我,以随时了解最新进展。
更多推荐
所有评论(0)