如何用Hasura和PostgreSQL建立你的后端(附实例)

1,099 阅读8分钟

后台开发往往需要写很多行代码来处理CRUD、授权和业务逻辑。所有这些代码都需要在项目的整个生命周期中进行测试、调试和维护。这需要耗费大量的时间,而开发人员可以用这些时间来开发新的功能。在这篇文章中,你将了解Hasura和PostgreSQL如何帮助你加快应用开发,并以最小的努力快速启动后端。

Hasura是一个开源的GraphQL引擎,使用你的数据库模式生成GraphQL和REST API端点。它支持数据建模、实时查询、事件编程、基于角色的授权以及通过GraphQL运行自定义业务逻辑的行动。

PostgreSQL是一个流行的、强大的开源、面向对象的关系数据库,提供与Oracle数据库和Microsoft SQL Server类似的企业级功能。根据StackShare,PostgreSQL被Netflix、Instagram、Uber和Spotify等大型国际公司使用。

在这篇文章中,我们将介绍Hasura提供的主要功能,这些功能使它适合开发和启动可扩展的后端,用于网络和移动应用程序。我们还将看看你如何利用PostgreSQL的功能来执行各种计算和分析任务,只需使用SQL就可以向你的前端提供正确的数据,而无需编写自定义代码。

请注意,Hasura也支持其他数据库,如Microsoft SQL Server、Amazon Aurora和Google BigQuery。我们将专注于PostgreSQL,因为它是免费的,大多数企业和组织都可以使用。如果你有兴趣的话,对MySQL的支持即将到来。

如果你是GraphQL的新手,请查看我们的教程以了解更多。让我们先来看看为什么PostgreSQL可以成为你项目的完美选择。

为什么是PostgreSQL

与其他类型的数据库相比,关系型数据库有许多明显的优势,你可以使用严格的模式和表关系对你的数据进行建模。执行JOIN和执行ACID事务的能力是大多数行业中许多应用程序的主要要求。这些功能对于在任何时候促进业务数据的完整性和一致性至关重要。

与其他关系型数据库(如MySQL)相比,PostgreSQL还具有额外的优势,即:。

  • 你可以使用表的继承性进行数据建模
  • 它对多用户环境有更好的并发控制(你可以更有效地写入大量数据)。
  • 它具有容错性,不容易发生数据损坏
  • 它支持许多独特的数据类型,如JSON空间,这对金融和研究相关的应用非常有用。

PostgreSQL不仅仅是一个数据存储服务。它也是一个能够运行自定义函数和触发器以执行各种计算和分析任务的服务器。在PostgreSQL上运行逻辑是更有效的,因为它否定了编写自定义服务器代码的需要。你可以在PostgreSQL中使用定义逻辑。

  • 视图,一种存储查询,可以帮助简化复杂的查询
  • 函数和运算符,如日期格式化、模式匹配、算术运算等。
  • 扩展,扩展PostgreSQL的功能的附加组件(如PostGIS)
  • 程序语言,用于编写用户定义的函数、存储过程、触发器和扩展标准SQL的编程语言(如PL/pgSQL)。

当你在PostgreSQL中实现逻辑时,Hasura能够通过GraphQL查询和突变将它们暴露给前端应用程序。下面是一个PostgreSQL服务器的顶层视图,通过pgAdmin界面可以看到。

The pgAdmin interface

学习利用PostgreSQL的功能可以帮助你轻松解决复杂的问题,而不需要编写服务器代码。这里有几个例子说明你可以用PostgreSQL做什么。

例子1

你可以用一个视图来检索当前活跃的在线用户的列表。

CREATE OR REPLACE VIEW "public"."online_users" AS
 SELECT users.id,
    users.last_seen
   FROM users
  WHERE (users.last_seen >= (now() - '00:00:30'::interval));

例子2

使用PostGIS函数,你可以列出位于1000米半径内的所有商店。请看这个地理定位教程的详细解释。

SELECT id, name, address, geom
FROM Seattle_Starbucks
WHERE ST_DWithin(geom, ST_MakePoint(-122.325959,47.625138)::geography, 1000);

在下一节,我们将重点介绍Hasura的功能。

什么是Hasura?

Hasura是一个开源的实时GraphQL引擎,为你的数据库生成GraphQL和REST API端点。它带有一个网络控制台,允许你。

  • 建立你的数据库模式
  • 查看、插入、更新和删除数据
  • 实施基于角色的访问控制策略
  • 运行GraphQL查询和突变
  • 创建REST端点
  • 运行SQL代码
  • 定义动作和触发器

Hasura API dashboard

Hasura不支持用户认证,所以你需要将Hasura和你的前端应用程序与一个供应商集成,例如。

也没有文件存储服务,你需要将你的应用程序与第三方存储供应商集成。如果你喜欢更多的开箱即用的Hasura集成体验,你可以看看NHost,我们将在后面的部署部分讨论它。

在下一节中,我们将看看如何在本地和云中运行Hasura。

启动Hasura

有几种方法可以快速启动和运行Hasura实例。

1.Docker

使用Docker在本地机器上运行Hasura是建立开发环境的推荐方式。通过这种设置,对API请求没有速率限制,当你与Hasura的网络控制台互动时,也没有网络连接来限制你的体验。你在本地做的任何工作都可以很容易地迁移到暂存和生产环境。我们将在后面的 "迁移和环境 "部分讨论如何做到这一点。

假设你的机器上已经安装了DockerDocker Compose,你可以按照本指南提供的说明,在你的机器上运行Hasura。

# create new directory
mkdir my-hasura
cd my-hasura

# download docker-compose.yml
curl https://raw.githubusercontent.com/hasura/graphql-engine/stable/install-manifests/docker-compose/docker-compose.yaml -o docker-compose.yml

# start hasura and postgresql container instances
docker-compose up -d

你可以通过执行命令docker ps ,确认你的Hasura和PostgreSQL容器实例正在运行。你应该能够通过浏览器访问你的本地Hasura实例:http://localhost:8080/console 。为了完成设置,你需要连接到PostgreSQL数据库,该数据库作为一个容器与Hasura的数据库一起运行。

连接数据库后,你就可以使用网络控制台来创建表格,定义关系,并对数据进行CRUD操作。请注意,使用默认的Docker设置时,你的数据是公开的。你只需取消对docker-compose.yml 文件中以HASURA_GRAPHQL_ADMIN_SECRET 开始的那一行的注释,并重新启动你的Hasura容器,就可以保证它的安全。

2.云计算

一个更简单的方法是通过Hasura Cloud开始。这是一个重新设计的开源Hasura版本,旨在实现可扩展性、可用性、安全性
和全球分布。

The Hasura Cloud dashboard

Hasura云有几个开源版本所没有的新功能,其中包括。

  • 对错误、连接、订阅、缓慢查询和其他操作的监控仪表板
  • GraphQL缓存,提高服务器和客户端的数据获取性能
  • 速率限制,防止恶意用户和DDoS攻击损害你的API
  • 运行测试套件的回归测试,如对照生产实例检查开发实例中的变化。

要开始使用Hasura Cloud,你需要注册一个免费账户。请注意,免费账户的速率限制为每分钟60个请求。创建一个账户后,你需要。

  • 创建一个项目(一个Hasura实例)
  • 连接到一个PostgreSQL数据库

为方便起见,Hasura Cloud提供了一键安装和连接到免费的Heroku Cloud数据库实例。你也可以连接到任何其他可以通过互联网访问的PostgreSQL数据库。有许多PostgreSQL供应商可以使用。这些包括云服务,如。

  • AWS
  • Azure
  • 数字海洋
  • TimescaleDB云
  • 尤格比特数据库

如果你需要更清楚地了解上述步骤,你可以遵循本指南。默认情况下,Hasura Cloud使用管理员的秘密密钥限制公众的数据访问。我们将在接下来的章节中进一步讨论这个问题。

哈苏拉的特点

在本节中,我将给你一个高层次的概述,Hasura提供的功能是在不写代码的情况下建立一个自定义的后端。

数据管理器

Hasura提供了一个可视化设计器,用于为你的数据层建模。这使你能够。

  • 创建表格
  • 定义关系(一对一,一对多,多对多)。
  • 执行CRUD操作
  • 创建视图
  • 运行任何SQL语句
  • 使用PostgreSQL的DDL约束实现数据验证
  • 定义触发器

Hasura create table

当谈到列时,Hasura支持丰富的数据类型,包括。

  • 整数、数字和浮点数
  • 序列和UUID
  • 字符和文本
  • 日期和时间
  • 布尔型
  • 几何图形 - 如线、盒、路径、多边形和圆等
  • JSON

你也可以使用CREATE TYPE SQL命令添加自定义类型。接下来,我们将看看数据如何在Hasura中被授权。

继续阅读:如何用Hasura和PostgreSQL构建你的后端SitePoint.