使用Hasura从现有的PostgreSQL数据库快速构建GraphQL API服务器

由于Hasura使得能够从现有的PostgreSQL数据库快速构建GraphQL API服务器,因此将其内容整理成备忘录。

这篇文章的目标受众如下所述。

    • HerokuのPostgres add-onを利用してアプリのDBを構築している

 

    • GraphQLでのAPIサーバーを試したい

 

    でもリゾルバとかTypeDefをイチから書くのは面倒

Hasura是什么?

即时实时的GraphQL引擎和文档中介绍的是,简单来说,它是一个能够自动构建基于PostgreSQL的GraphQL API服务器的工具。

根据下图所示的公式,PostgreSQL作为数据库,与使用GraphQL的客户端之间通过GraphQL和SQL(或JSON)相互转换数据。

f7a4cfcf2813970ee1350efc9d748c79.gif

建立Hasura服务器

在本文中,我們將使用Heroku來輕鬆使用Hasura,而不需要建立本地環境。雖然有許多方法可以啟動Hasura,如Docker和Heroku,但本文只介紹使用Heroku的方法。

首先,从Hasura的文档页面开始创建HerokuApp。
https://docs.hasura.io/1.0/graphql/manual/getting-started/heroku-simple.html

スクリーンショット 2019-11-24 21.07.34.png

当Heroku被打开时,您应该会进入以下界面。请在“App Name”处输入任意名称,然后执行“Deploy App”。

スクリーンショット 2019-11-24 21.09.17.png

如果你等到部署完成,Hasura应该会在任何你指定的URL上搭建起来。
真快..!!!

スクリーンショット 2019-11-24 21.41.27.png

与现有的PostgreSQL数据库进行连接

接下来,我们将进行与现有的PostgreSQL的连接,这是本文的主要目的。
以下是官方文件中的内容。

删除PostgreSQL附加组件

首先,您需要从前面创建的Hasura服务器中自动集成的Heroku Postgres Addon进行删除。
请在Heroku仪表板上选择创建的应用程序,然后在以下页面上执行删除Addon的操作。

スクリーンショット 2019-11-24 21.44.25.png

由于有删除确认,您需要输入已创建的应用名称,然后执行“删除插件”。

スクリーンショット 2019-11-24 21.46.19.png

删掉了初始建立的Postgres。
在这种情况下,打开之前的Hasura界面,应该会出现应用错误。

スクリーンショット 2019-11-24 21.48.19.png

用环境变量指定数据库

接下来,将要连接的Heroku上现有的PostgreSQL的URL设置为变量。
要指定的URI可从现有的Postgres附加设置、数据库凭据中获取。

スクリーンショット 2019-11-24 21.51.39.png

在部署Hasura的Heroku应用程序的设置和配置变量中,将获得的URI指定为DATABASE_URL。

スクリーンショット 2019-11-24 21.57.02.png

只要在现有的PostgreSQL上认证通过,数据库就会连接上。
在这种情况下,再次显示Hasura的URL,它应该已经启动了。

スクリーンショット 2019-11-24 21.59.26.png

现在,您可以使用GraphQL查询来引用表格数据了。

如果表格信息没有自动导入的话,就进行导入。

通常情况下,通过前述步骤进行的操作将导入Table的数据并构建GraphQL模式。但如果未能成功构建,可以从Hasura的DATA中进行TrackTable操作。

スクリーンショット 2019-11-24 22.02.34.png

执行查询

让我们立即从控制台上执行一下。
根据表的结构,构建了GraphQL的API,如此这般。

スクリーンショット 2019-11-24 22.04.50.png

当然,在仪表板之外,只要指定端点的URL,就可以执行。

スクリーンショット 2019-11-24 22.06.28.png

此外,它还会自动构建用于不仅仅获取简单列的查询。

    • 合計・平均・総数などを取得するaggregateのクエリ

 

    primary_key指定でリソースを取得する by_keyクエリ

等等,还有对于每个选项,也支持无需编写解析器即可进行分页、排序和条件筛选。

スクリーンショット 2019-11-24 22.12.45.png

太厉害了!!

结束

只需大约15分钟,即可从零开始搭建一个GraphQL API服务器,无需编写任何服务器端的解析器、类型定义等。真是非常方便。

然而,由于尚未进行与终端身份验证与授权设置相关的必要安全设置(如复杂性和深度),因此我希望以后能进行调查并再次撰写文章。

以上是在Hasura上从现有的PostgreSQL数据库中快速构建GraphQL API服务器。

bannerAds