【GraphQL 】将GraphQL API添加到Postgres数据库的六种简单方法,比较Hasura、Prisma和其他

本文主要是介绍【GraphQL 】将GraphQL API添加到Postgres数据库的六种简单方法,比较Hasura、Prisma和其他,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PostgreSQL是世界上最流行的开源SQL数据库之一,GraphQL是一种日益流行的API规范。

将经过验证和众所周知的PostgreSQL与GraphQL带来的API创建新方式集成在一起不是很好吗?

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

以数据库为中心的方法

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

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

1. Hasura

Instant Real-time GraphQL on Postgres

Hasura可能是目前球场上最令人兴奋的球员。这是服用类固醇的PHPMyAdmin。

它在Docker容器中运行,作为数据库前面的服务器,并为我们提供一个DB和API的管理UI,就像PHPMyAdmin一样。

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

在没有托管服务的情况下,它就像BaaS一样,所以如果像AWS AppSync这样的东西不是你喜欢的,但你喜欢一些它的便利性,那就去Hasura吧。

它是Apache 2.0许可下的开源软件,大部分是用Haskell编写的。

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

2. Postgraphile

Instantly spin-up a GraphQL API server by pointing PostGraphile at your existing PostgreSQL database

Postgraphile与Hasura类似,它允许从PostgreSQL模式生成GraphQL API,并在我们的DB前作为服务器运行。它只是朝着一个不同的方向去实现这个目标。

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

因此,它非常适合那些在设置和配置这样一个数据库方面有多年经验的Postgres专业人士。他们可以使用他们所有的技能,让Postgraphile为他们做API工作。

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

这是一个在MIT许可下发布的开源产品,主要使用TypeSCript编写。

创作者还提供付费专业版,提供额外功能和付费支持。

3. Prisma & GraphQL Nexus

[Updated 2021-05-02]

Prisma replaces traditional ORMs

[Nexus is a] Declarative, Code-First GraphQL Schemas for JavaScript/TypeScript

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

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

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

然后,可以根据应用程序的使用情况自定义和扩展生成的API。

它是在Apache 2.0下授权的开源软件,使用Scala编写。

Prisma还提供付费企业版。

Moesif是什么?Moesif是最先进的REST和GraphQL分析平台,成千上万的平台使用它来衡量您的查询执行情况,并了解您最忠实的客户对您的API做了什么。

以模式为中心的方法

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

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

4.Node.js API入门套件

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

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

这是一个样板项目,附带了连接到Postgres数据库所需的所有Node.js库,运行HTTP服务器并创建GraphQL模式和解析器。

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

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

它是开源的,拥有麻省理工学院的许可证,并使用JavaScript编写。

5.graphql序列化

GraphQL&Relay for MySQL&Postgres via Sequelize

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

这是一个正确的解决方案,适合那些已经对Sequelize有了大量知识并且不想扔掉它的人。

这是一个用JavaScript编写的开源库,在MIT许可下发布。

6.JoinMonster

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

JoinMonster通过提供一种使用Postgres的全部SQL功能的方法来帮助GraphQL模式建模。它允许告诉每个GraphQL类型它属于哪个表,这样它就可以从每个GraphSQL查询中生成最好的SQL查询。

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

加入怪物是开源的,在麻省理工学院的许可下发布。它是用JavaScript编写的。

结论

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

如果我们不能完全采用云解决方案,这里列出的系统允许我们选择我们希望在API中进行多少“握手”,以及我们希望自己进行多少操作。

有了Hasura和Postgraphile,我们终于有了与语言无关的方法来完成任务,这将让许多非Node.js开发人员感到高兴。

文章链接

【GraphQL 】将GraphQL API添加到Postgres数据库的六种简单方法,比较Hasura、Prisma和其他 |欢迎收藏【架构师酒馆】和【开发者开聊】

这篇关于【GraphQL 】将GraphQL API添加到Postgres数据库的六种简单方法,比较Hasura、Prisma和其他的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/441116

相关文章

检查 Nginx 是否启动的几种方法

《检查Nginx是否启动的几种方法》本文主要介绍了检查Nginx是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 systemctl 命令(推荐)2. 使用 service 命令3. 检查进程是否存在4

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

springboot中配置logback-spring.xml的方法

《springboot中配置logback-spring.xml的方法》文章介绍了如何在SpringBoot项目中配置logback-spring.xml文件来进行日志管理,包括如何定义日志输出方式、... 目录一、在src/main/resources目录下,也就是在classpath路径下创建logba

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

C++打印 vector的几种方法小结

《C++打印vector的几种方法小结》本文介绍了C++中遍历vector的几种方法,包括使用迭代器、auto关键字、typedef、计数器以及C++11引入的范围基础循环,具有一定的参考价值,感兴... 目录1. 使用迭代器2. 使用 auto (C++11) / typedef / type alias