【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和其他 |欢迎收藏【架构师酒馆】和【开发者开聊】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入了解Rabbit加密技术:原理、实现与应用

一、引言 在信息时代,数据安全愈发受到重视,加密技术作为保障信息安全的核心手段,得到了广泛的研究与应用。Rabbit加密技术作为一种新型加密方法,具有较高的安全性和便捷性。本文将对Rabbit加密技术进行深入探讨,分析…

【动态规划】LeetCode-面试题08.01三步问题

🎈算法那些事专栏说明:这是一个记录刷题日常的专栏,每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目,在这立下Flag🚩 🏠个人主页:Jammingpro 📕专栏链接&…

六、初识FreeRTOS之FreeRTOS的任务挂起和恢复函数介绍

本节需要掌握以下内容: 1,任务的挂起与恢复的API函数(熟悉) 2,任务挂起与恢复实验(掌握) 3,课堂总结(掌握) 一、任务的挂起与恢复的API函数(熟…

exceljs读取el-upload上传的excle数据并转为json输出

当使用 Element UI 的 el-upload 组件上传 Excel 文件时&#xff0c;您可以使用 exceljs 库将上传的 Excel 数据转换为 JSON 格式。以下是一个示例代码&#xff0c;演示了如何在 Vue 项目中实现这一功能&#xff1a; <template><el-uploadclass"upload-demo&quo…

C++ day41 动态规划 整数拆分 不同的二叉搜索树

题目1&#xff1a;343 整数拆分 题目链接&#xff1a;整数拆分 对题目的理解 将正整数n&#xff0c;拆分成k个正整数的和&#xff08;k>2&#xff09;使得这些整数的乘积最大化&#xff0c;返回最大乘积 动规五部曲 1&#xff09;dp数组的含义以及其下标i的含义 dp[i]…

Verilog 入门(四)(门电平模型化)

文章目录 内置基本门多输入门简单示例 内置基本门 Verilog HDL 中提供下列内置基本门&#xff1a; 多输入门 and&#xff0c;nand&#xff0c;or&#xff0c;nor&#xff0c;xor&#xff0c;xnor 多输出门 buf&#xff0c;not 三态门上拉、下拉电阻MOS 开关双向开关 门级逻辑…

OSG编程指南<十七>:OSG光照与材质

1、OSG光照 OSG 全面支持 OpenGL 的光照特性&#xff0c;包括材质属性&#xff08;material property&#xff09;、光照属性&#xff08;light property&#xff09;和光照模型&#xff08;lighting model&#xff09;。与 OpenGL 相似&#xff0c;OSG 中的光源也是不可见的&a…

工博会新闻稿汇总

23届工博会媒体报道汇总 点击文章标题即可进入详情页 9月23日&#xff0c;第23届工博会圆满落幕&#xff01;本届工博会规模之大、能级之高、新展品之多创下历史之最。高校展区在规模、能级和展品上均也创下新高。工博会系列报道深入探讨了高校科技发展的重要性和多方面影响。…

【合集】MQ消息队列——Message Queue消息队列的合集文章 RabbitMQ入门到使用

前言 RabbitMQ作为一款常用的消息中间件&#xff0c;在微服务项目中得到大量应用&#xff0c;其本身是微服务中的重点和难点。本篇博客是Message Queue相关的学习博客文章的合集篇&#xff0c;目前主要是RabbitMQ入门到使用文章&#xff0c;后续会扩展其他MQ。 目录 前言一、R…

自定义链 SNAT / DNAT 实验举例

参考原理图 实验前的环境搭建 1. 准备三台虚拟机&#xff0c;定义为内网&#xff0c;外网以及网卡服务器 2. 给网卡服务器添加网卡 3. 将三台虚拟机的防火墙和安全终端全部关掉 systemctl stop firewalld && setenforce 0 4. 给内网虚拟机和外网虚拟机 yum安装 httpd…

阿里云国际短信业务网络超时排障指南

选取一台或多台线上的应用服务器或选取相同网络环境下的机器&#xff0c;执行以下操作。 获取公网出口IP。 curl ifconfig.me 测试连通性。 &#xff08;推荐&#xff09;执行MTR命令&#xff08;可能需要sudo权限&#xff09;&#xff0c;检测连通性&#xff0c;执行30秒。 m…

【华为OD题库-052】数字序列比大小-java

题目 A&#xff0c;B两个人玩一个数字比大小的游戏&#xff0c;在游戏前&#xff0c;两个人会拿到相同长度的两个数字序列&#xff0c;两个数字序列是不完全相同的&#xff0c;且其中的数字是随机的。 A&#xff0c;B各自从数字序列中挑选出一个数字进行大小比较&#xff0c;赢…

Scrapy框架中间件(一篇文章齐全)

1、Scrapy框架初识&#xff08;点击前往查阅&#xff09; 2、Scrapy框架持久化存储&#xff08;点击前往查阅&#xff09; 3、Scrapy框架内置管道&#xff08;点击前往查阅&#xff09; 4、Scrapy框架中间件 Scrapy 是一个开源的、基于Python的爬虫框架&#xff0c;它提供了…

HashMap的实现原理

1.HashMap实现原理 HashMap的数据结构&#xff1a; *底层使用hash表数据结构&#xff0c;即数组链表红黑树 当我们往HashMap中put元素时&#xff0c;利用key的hashCode重新hash计算出当前对象的元素在数组中的下标 存储时&#xff0c;如果出现hash值相同的key&#xff0c;此时…

自动化测试 —— 如何优雅实现方法的依赖!

在 seldom 3.4.0 版本实现了该功能。 在复杂的测试场景中&#xff0c;常常会存在用例依赖&#xff0c;以一个接口自动化平台为例&#xff0c;依赖关系&#xff1a; 创建用例 --> 创建模块 --> 创建项目 --> 登录。 用例依赖的问题 •用例的依赖对于的执行顺序有严格…

SpringBoot——Spring Security 框架

优质博文&#xff1a;IT-BLOG-CN 一、Spring Security 简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的 Bean&#xff0c;充分利用了Spring IoC&#xff0c;DI&#xff0…

什么是 Proxy?

目录 Proxy 的作用 1. 流量过滤 2. 记录日志 3. 加快访问速度 4. 隐藏 IP 地址 Proxy 的分类 1. 按协议分类 - HTTP 代理&#xff1a;只支持 HTTP 协议的代理服务器&#xff0c;它可以缓存 HTTP 请求和响应并过滤 HTTP 流量。 - FTP 代理&#xff1a;只支持 FTP 协议的…

异常数据检测 | Python实现孤立森林(IsolationForest)异常检测

孤立森林(IsolationForest)异常检测 IsolationForest[6]算法它是一种集成算法(类似于随机森林)主要用于挖掘异常(Anomaly)数据,或者说离群点挖掘,总之是在一大堆数据中,找出与其它数据的规律不太符合的数据。该算法不采样任何基于聚类或距离的方法,因此他和那些基于距离的的…

一文讲透Python机器学习特征工程中的特征标准化

在Python中&#xff0c;可通过scikit-learn模块中的StandardScaler()函数实现对特征的标准化处理。StandardScaler()函数处理的数据对象同样是每一列&#xff0c;也就是每一维特征。StandardScaler()函数通过去除平均值和缩放到单位方差来标准化特征&#xff0c;将样本特征值转…

使用autodl服务器,在A40显卡上运行, Yi-34B-Chat-int4模型,并使用vllm优化加速,显存占用42G,速度18 words/s

1&#xff0c;演示视频 https://www.bilibili.com/video/BV1gu4y1c7KL/ 使用autodl服务器&#xff0c;在A40显卡上运行&#xff0c; Yi-34B-Chat-int4模型&#xff0c;并使用vllm优化加速&#xff0c;显存占用42G&#xff0c;速度18 words/s 2&#xff0c;关于A40显卡&#xf…