所有文章 > 日积月累 > 向 Postgres 数据库添加 GraphQL API 的六种简便方法,比较 Hasura、Prisma 和其他方法
向 Postgres 数据库添加 GraphQL API 的六种简便方法,比较 Hasura、Prisma 和其他方法

向 Postgres 数据库添加 GraphQL API 的六种简便方法,比较 Hasura、Prisma 和其他方法

PostgreSQL是世界上最流行的开源 SQL 数据库之一,而GraphQL是一种新兴的 API 规范,其受欢迎程度日益增长。

将经过验证且众所周知的 PostgreSQL 与 GraphQL 带来的新 API 创建方式相结合不是很好吗?

在本文中,我们讨论了六个不同的项目,它们试图将 SQL 与 GraphQL 世界融合。其中一些甚至允许根据数据库结构自动创建模式。

以数据库为中心的方法

以数据库为中心的解决方案试图消除大多数配置和模式设置。它们将检查我们的数据库的外观,并为我们提供类型和端点。

由于他们知道数据库的结构,因此他们可以为我们生成高性能的解析器,这样我们就不会遇到 N+1 查询问题。

1.Hasura

Postgres 上的即时实时 GraphQL

Hasura 可能是目前场上最令人兴奋的选手。它是 PHPMyAdmin 的强化版。

它在 Docker 容器中运行,作为数据库前端的服务器,并为我们提供 DB 和 API 的管理 UI,类似于 PHPMyAdmin。

它具有自己的身份验证和授权功能,甚至可以与其他身份验证提供商集成。

它是没有托管服务尽可能地 BaaS,所以如果您不喜欢AWS AppSync之类的东西,但喜欢的便利性,那么就选择 Hasura。

它是Apache 2.0许可下的开源软件,主要用 Haskell 编写。

此外,创作者还提供付费支持计划。

2. Postgraphile

通过将 PostGraphile 指向您现有的 PostgreSQL 数据库,立即启动 GraphQL API 服务器

Postgraphile 与 Hasura 类似,它允许从 PostgreSQL 模式生成 GraphQL API,并作为我们的数据库前面的服务器运行。它只是在实现这一目标的方式上有所不同。

它不使用 Docker 容器,并尝试尽可能多地重用 Postgres 功能。例如用户管理、通过 RLS 授权和自动更新视图。

因此,它非常适合在设置和配置此类数据库方面拥有多年经验的 Postgres 专业人员。他们可以使用所有技能,并让 Postgraphile 为他们完成 API 工作。

Postgraphiles 还主要关注通过 CLI 来完成所有交互,这可能是 DB 管理员所喜欢的。

它是一个根据MIT 许可发布的开源产品,主要用 TypeSCript 编写。

创建者还提供具有额外功能和付费支持的付费专业版。

3. Prisma和GraphQL Nexus

[更新日期 2021-05-02]

Prisma 取代传统 ORM

[Nexus 是] 适用于 JavaScript/TypeScript 的声明式、代码优先的 GraphQL 模式

Prisma 是一套开源数据库工具,用于数据访问(类似于传统的 ORM)、迁移和数据管理。

开发人员可以使用 SDL 的子集来定义 Prisma 映射到其数据库的数据模型,从而简化数据库迁移过程。

然后,Prisma 会生成一个类型安全的数据库客户端,该客户端可在 API 服务器内部使用。当与 GraphQL Nexus(代码优先的 GraphQL 模式构建库)和集成结合使用时nexus-prisma,开发人员可以利用数据库模型的自动生成的 CRUD 操作。这使得只需几行代码就可以启动完整的 GraphQL CRUD API!

然后可以根据应用程序的用例定制和扩展生成的 API。

它是根据Apache 2.0许可的开源软件,并用 Scala 编写。

Prisma 还提供付费企业版。

以模式为中心的方法

接下来的三种解决方案在方法上更加经典,它们需要手动创建模式并且没有提供很多额外功能,但它们试图帮助解决常见的陷阱。

由于它们是常规的 Node.js 库,因此它们还需要使用 Node.js。

4. Node.js API 入门套件

使用 Node.js 和 GraphQL 编写数据 API 后端的样板和工具

Node.js API 入门套件可能是启动和运行 GraphQL API 的最基本方法。

它是一个样板项目,附带连接 Postgres DB、运行 HTTP 服务器以及创建 GraphQL 模式和解析器所需的所有 Node.js 库。

对于需要完全控制 API 服务器每个部分的绿地项目来说,这是一个良好的开端。

没有付费支持,只有免费社区支持。

它是开源的,拥有MIT 许可证,并用 JavaScript 编写。

5. graphql-sequelize

通过 Sequelize 为 MySQL 和 Postgres 提供 GraphQL 和 Relay

这是一个从 Sequelize 模型生成 GraphQL 解析器函数的库。我们仍然需要创建架构,但不必再担心解析器了。

对于那些已经拥有丰富的 Sequelize 知识并且不想抛弃它的人来说,这是一个正确的解决方案。

它是一个用 JavaScript 编写的开源库,根据MIT 许可证发布。

6.加入 Monster

它是一个函数,接受 GraphQL 查询并动态地将 GraphQL 转换为 SQL,以便在解析之前进行高效、批量的数据检索。

Join Monster 通过提供一种方法来充分利用 Postgres 的 SQL 功能,从而帮助进行 GraphQL 模式建模。它允许告诉每个 GraphQL 类型它属于哪个表,因此它可以从每个 GraphQL 查询中生成最佳 SQL 查询。

对于那些想要自己构建大部分 API 服务器但又不想直接使用 SQL 的人来说,这是一个很好的解决方案。

Join Monster 是开源的,根据MIT 许可证发布。它是用 JavaScript 编写的。

结论

有许多不同的解决方案可以通过 GraphQL API 访问 Postgres 数据库。每种解决方案都有其优缺点。

如果我们不能全力采用云解决方案,这里列出的系统可以让我们选择我们想要在 API 中得到多少“手动控制”以及我们想要自己做多少事情。

借助 Hasura 和 Postgraphile,我们终于可以用与语言无关的方式来完成工作,这将使许多非 Node.js 开发人员感到高兴。

文章来源:Six Easy Ways to add a GraphQL API to your Postgres Database, comparing Hasura, Prisma and others

#你可能也喜欢这些API文章!