当前位置: 首页 > news >正文

【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和其他

PostgreSQL是世界上最流行的开源SQL数据库之一,GraphQL是一种日益流行的API规范。 将经过验证和众所周知的PostgreSQL与GraphQL带来的API创建新方式集成在一起不是很好吗? 在本文中,我们讨论了六个不同的项目,它们试图将SQL与Gr…...

每日一题(LeetCode)----哈希表--有效的字母异位词

每日一题(LeetCode)----哈希表–有效的字母异位词 1.题目(242. 有效的字母异位词) 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互…...

【设计模式】行为型模式-第 3 章第 6 讲【中介者模式】

目录 定义 场景描叙 目的 主要解决 实现 基本类图 案例代码...

Django 通过 Trunc(kind) 和 Extract(lookup_name) 参数进行潜在 SQL 注入 (CVE-2022-34265)

漏洞描述 Django 于 2022 年6月4 日发布了一个安全更新,修复了 Trunc() 和 Extract() 数据库函数中的 SQL 注入漏洞。 参考链接: Django security releases issued: 4.0.6 and 3.2.14 | Weblog | Djang…...

Vue3-toRef 和 toRefs 函数

Vue3-toRef 和 toRefs 函数 功能:可以简化语法调用。toRef 函数执行时会生成一个对象 ObjectRefImpl ,是一个引用对象,具有value属性(getter 和 setter 属性)语法格式:toRef(对象名, 对象中的属性名) toRe…...

STM32---时钟树

写在前面:一个 MCU 越复杂,时钟系统也会相应地变得复杂,如 STM32F1 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就 可以解决一切。对于 STM32F1 系列的芯片,其有多个时钟源,构成了一个庞大的是时…...

【功能测试】软件系统测试报告

1.引言 1.1.目的 本测试报告为 xxx 系统测试报告,本报告目的在于总结测试阶段的测试及测试结果分析,描述系统是否达到需求的目的。 本报告预期参考人员包括测试人员、测试部门经理、开发人员、项目管理人员等。 1.2.参考文档 《xxxx系统需求规格说明…...

CentOS一键安装docker脚本

CentOS安装Docker一键脚本 在CentOS上安装Docker是许多项目中常见的任务之一。为了简化这个过程,你可以使用下面的一键脚本。 #!/bin/bash# 卸载旧版本(如果有) sudo yum remove -y docker \docker-client \docker-client-latest \docker-c…...

PostGIS学习教程八:空间关系

PostGIS学习教程八:空间关系 到目前为止,我们只使用了测量(ST_Area、ST_Length)、序列化(ST_GeomFromText)或者反序列化(ST_AsGML)几何图形(geometry)的空间…...

ESP32-Web-Server编程- 通过文本框向 Web 提交数据

ESP32-Web-Server编程- 通过文本框向 Web 提交数据 概述 前述章节我们通过简单 HTML、AJAX、Websocket、SSE 在网页上显示数据,通过网页上的按钮控制 ESP32 的行为。从本节开始,我们将进一步了解通过网页与 ESP32 进行交互的方法。 实现更复杂的交互功…...

NAT网络地址转换

目录 什么是nat nat 实验如何使用SNAT 和 DNAT 实验环境 内网连接外网 1.给网关服务器添加网卡(两张网卡) 2.查看新添加的网卡名 编辑网卡配置 3.开启路由转发 4.打开内网服务器 5.切换到外网服务器(192.168.17.30&#xff0…...

PyTorch模型训练过程内存泄漏问题解决

近日,在模型训练过程中,发现过一段时间后进程会被kill,观察发现是由于内存泄漏问题造成的。通过逐行代码注释,发现问题在于数据集中的此行代码: info self.data_list[index]这里,self.data_list是dataset…...

【matlab程序】matlab利用工具包nctool读取grib2、nc、opendaf、hdf5、hdf4等格式数据

【matlab程序】matlab利用工具包nctool读取grib2、nc、opendaf、hdf5、hdf4等格式数据 引用: B. Schlining, R. Signell, A. Crosby, nctoolbox (2009), Github repository, https://github.com/nctoolbox/nctoolbox Brief summary: nctoolbox is a Matlab toolbox…...

pytorch训练模板

来源:http://worthpen.top/#/home/blog?blogpot-blog36.md 引言 本项目实现了基于PyTorch Lightning的神经网络训练和测试管道。项目除了实现PyTorch Lightning的工作流外,还实现了通过任务池在训练过程中添加任务、k折交叉验证、将训练结果保存在.cv…...

代码随想录二刷 |字符串 |反转字符串

代码随想录二刷 |字符串 |反转字符串 题目描述解题思路 & 代码实现 题目描述 344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须…...

Rust语言入门教程(九) - 结构体

格式及语法 在其他很多编程语言中,有类(Class)的存在,在Rust中,我们没有类(Class)的概念,我们使用结构体(Struct)。 与一个结构体相关的有以下几个部分: 数据字段方法关联函数 声明一个结构体及其字段的格式如下&am…...

如何使用Qchan搭建更好保护个人隐私的本地图床并在公网可访问

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景,在大量开发人员的努力下,已经开发出大…...

AI伪原创软件-AI伪原创工具下载

在当今数字化时代,创作者们在追求独特创意的同时,也面临着时间和灵感的双重挑战。AI伪原创技术应运而生,为创作者提供了一种快捷而便利的解决方案。本文将专心分享两款备受瞩目的AI伪原创工具,147SEO伪原创、百度文心一言伪原创&a…...

【python脚本】获取OneNET数据写入本地文件

#!/usr/bin/env python # -*- coding: utf-8 -*- # pip install prettytable import time import urllib.request as req import json import os# 设备ID、Key # ESP-12F deviceId "1047311396" APIKey "z0Yq8d3P16l2SbEwuZcXZuCidM"# 上传函数 def OneN…...

5 存储器映射和寄存器

文章目录 5.3 芯片内核5.3.1 ICache5.3.2 DCache5.3.3 FlexRAM 5.4 存储器映射5.4.1 存储器功能划分5.4.1.1 存储器 Block0 内部区域功能划分5.4.1.2 储存器 Block1 内部区域功能划分5.4.1.3 储存器 Block2 内部区域功能划分 5.5 寄存器映射5.5.1 GPIO1的输出数据寄存器 5.3 芯…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 ​…...

免费数学几何作图web平台

光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...