玩弄Hasura GraphQL Engine
Hasura是什么?
Hasura是一個工具,可以自動從PostgreSQL等數據源創建GraphQL服務器。
只需設置目標數據源的地址和密碼,就可以立即使用它作為GraphQL服務器。
它可以作為SaaS使用,但Hasura GraphQL Engine的核心功能是開源的,可以在Docker上構建。
本次我們將使用Docker以自建方式構建。
建立环境
通过从这里获取docker-compose.yaml文件,在yaml文件所在的目录中启动容器。
docker-compose up -d
你可以通过http://localhost:8080访问Hasura控制台。同时,也会在同一个容器中启动PostgreSQL。
数据库连接

创建表

创建一个包含UUID类型的id和Text类型的name字段的employees表。
插入和获取数据

由于Hasura GraphQL Engine能够根据表的信息自动创建与GraphQL更新相关的mutation,因此我们直接使用insert_employees即可。
mutation {
insert_employees(objects: {name: "Yosuke Sakaue"}) {
affected_rows
}
}
参考查询的格式如下所述
query {
employees {
id
name
}
}
结果
{
"data": {
"employees": [
{
"id": "24c1de75-9578-497a-9fb2-011dc920572c",
"name": "Yosuke Sakaue"
}
]
}
}
表之间的关系




插入和检索数据②
在「API」选项卡中插入数据。
将组织信息插入到部门表中。
mutation {
insert_departments(objects: {name: "software development"}) {
affected_rows
returning {
id
}
}
}
成果
{
"data": {
"insert_departments": {
"affected_rows": 1,
"returning": [
{
"id": "20b0042c-bc31-4657-8178-d4e7e097b668"
}
]
}
}
}
将已返回的id更新到员工的员工信息中。
mutation {
update_employees(where:
{id:{_eq: "24c1de75-9578-497a-9fb2-011dc920572c"}},
_set: {departments_id: "20b0042c-bc31-4657-8178-d4e7e097b668"}){
affected_rows
}
}
让我们尝试一下GraphQL的优势之一,批量获取数据。
query MyQuery {
employees {
id
name
department {
id
name
}
}
}
结果
通过一次请求,我们能够一次性获取员工信息以及其所属组织的信息。
{
"data": {
"employees": [
{
"id": "24c1de75-9578-497a-9fb2-011dc920572c",
"name": "Yosuke Sakaue",
"department": {
"id": "20b0042c-bc31-4657-8178-d4e7e097b668",
"name": "software development"
}
}
]
}
}
总结
这次我们是通过创建新表来实现,但是能够通过连接现有的RDB来创建API服务器非常方便,也让我感受到了其潜力。
如果只是构建简单的CRUD服务,这已经足够了。此外,Hasura还具备其他功能,如Actions、Remote Schemas、Event Triggers、认证和授权、自动生成分页等,我也想在文章中介绍它们。