hasura 是什么?
引用hasura官方的介绍
Hasura GraphQL引擎是一个高性能的GraphQL服务器,可为您提供 Postgres上开箱即用的实时GraphQL API, 响应数据库事件的 Webhook触发器,以及用于业务逻辑处理的 远端Schema。
Hasura可帮助您构建基于Postgres的GraphQL应用程序,或将使用Postgres的现有应用迁移到GraphQL上。
给个数据库就能提供GraphQL接口,对比于restful的api来说,是不是时候都不用写接口了呢?
背景调查
因为 hasura官方只有amd64版本的镜像,所以为了让这个能跑在arm服务器上,需要自行编译。
所以我们进行了一番背景调查,以下为背调中牵涉的对象:
hasura 分为三个部分
1)graphql-engine: 真正的server
2)console:web界面
3)cli:命令行工具
实际上我们只需要前两个部分即可,而console为web工程,使用npm run build即可编译,非常简单,我们只需要重点关注server部分即可。现在我们重点分析这个server部分:
- graphql-engine server 使用haskell语言进行编写,使用 cabal 进行构建;
- haskell是一个函数式编程语言,编译器为GHC,编译工具一般使用cabal,cabal同时也是项目的管理工具(如包管理,依赖管理)。
也就是说为了编译server,我们需要GHC及cabal,那么这两个工具的arm版本现状如何了?
- GHC: 无arm版本现成的docker镜像,有预编译的二进制;
- cabal: 无arm版本现成的docker镜像及二进制文件;
为了不污染环境,并且持久化构建环境,我们准备构建一个docker的镜像,包含ghc及cabal,也就是说,我们两者都需要构建。
总结以下构建步骤:
- 准备haskell的ARM版本编译环境(包括GHC编译器及hasura编译所需要的cabal工具);
- 使用之前准备好的ARM版本编译环境编译hasura;
- 打包成Docker镜像;
网友评论