GraphQL入门与开源的GraphQL引擎Hasura体验
背景
Hasura 是一个开源的 GraphQL 引擎,它可以帮助开发人员快速构建和部署现代应用程序的后端。它提供了一个自动化的 GraphQL API ,可以直接连接到现有的数据库,并提供实时数据推送和订阅功能。 Hasura 团队总部位于印度。
下载安装
脚本地址:https://raw.githubusercontent.com/hasura/graphql-engine/stable/install-manifests/docker-compose/docker-compose.yaml
[root@graphql ~]# cd /opt/hasura/# 下载docker-compose.yml的编排脚本
[root@graphql hasura]# curl https://raw.githubusercontent.com/hasura/graphql-engine/stable/install-manifests/docker-compose/docker-compose.yaml -o docker-compose.yml# 启动容器
[root@graphql hasura]# docker compose up -d
[+] Running 3/3✘ Container hasura-data-connector-agent-1 Error 0.1s ✔ Container hasura-postgres-1 Running 0.0s ✔ Container hasura-graphql-engine-1 Created 0.1s
dependency failed to start: container hasura-data-connector-agent-1 is unhealthy
遇到的问题:CPU does not support x86-64-v2
正常情况下,经过上述的安装之后就可以正常使用Hasura了,但是显然, docker compose 启动容器后显示了一条错误信息:
dependency failed to start: container hasura-data-connector-agent-1 is unhealthy
# 查看进程
[root@graphql hasura]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48055c1c2732 hasura/graphql-data-connector:v2.33.0 "/app/run-java.sh" 29 seconds ago Restarting (127) 13 seconds ago hasura-data-connector-agent-1
8e5e0f4d8cd5 postgres:15 "docker-entrypoint.s…" 13 hours ago Up 13 hours 5432/tcp hasura-postgres-1# 查看报错容器的日志信息
[root@graphql hasura]# docker logs 48055c1c2732
Fatal glibc error: CPU does not support x86-64-v2
Fatal glibc error: CPU does not support x86-64-v2
Fatal glibc error: CPU does not support x86-64-v2
-
原因分析
日志里说明了错误的原因,由于CPU架构问题。。 -
解决方法
那么,就换个不同的版本吧,但是从官方的发布日志里并没有找到需要的版本;换个思路,data-connector-agent似乎是新版本才加入的,核心的graphql-engine能用就行,就从网络博客中找到了以下docker-compose.yml的编排脚本:
version: '3.6'
services:postgres:image: postgres:15restart: alwaysvolumes:- db_data:/var/lib/postgresql/dataports:- "5432:5432"environment:POSTGRES_PASSWORD: postgrespasswordgraphql-engine:image: hasura/graphql-engine:v2.24.0ports:- "8080:8080"depends_on:- "postgres"restart: alwaysenvironment:## postgres database to store Hasura metadataHASURA_GRAPHQL_METADATA_DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres## this env var can be used to add the above postgres database to Hasura as a data source. this can be removed/updated based on your needsPG_DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres## enable the console served by serverHASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console## enable debugging mode. It is recommended to disable this in productionHASURA_GRAPHQL_DEV_MODE: "true"HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log## uncomment next line to run console offline (i.e load console assets from server instead of CDN)# HASURA_GRAPHQL_CONSOLE_ASSETS_DIR: /srv/console-assets## uncomment next line to set an admin secret# HASURA_GRAPHQL_ADMIN_SECRET: myadminsecretkey
volumes:db_data:
遇到的问题:不同版本的PostgreSQL数据目录不兼容
如果一开始用的是 PostgreSQL 15 ,而重新换新的 docker-compose.yml 的编排脚本(里面是 PostgreSQL 14.X )执行时,便会报出以下错误。
The data directory was initialized by PostgreSQL version 15, which is not compatible with this version 14.9 (Debian 14.9-1.pgdg120+1).
-
原因分析
docker compose会按名称重用卷(这样就不会丢失数据)。在更换PostgreSQL大版本时,必须将数据迁移到新卷,如果没有任何有用的数据,则删除旧的卷。 -
解决方法
先删除容器,再删除未被任何容器使用的本地卷
docker volume ls # 查看本地所有的卷
docker volume prune # 删除未被任何容器使用的本地卷
[root@graphql hasura]# docker volume ls
DRIVER VOLUME NAME
local hasura_db_data# 这条命令并没有删除卷,接着就用下一条语句直接删除
[root@graphql hasura]# docker volume prune
WARNING! This will remove anonymous local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B[root@graphql hasura]# docker volume rm hasura_db_data
hasura_db_data
/var/lib/docker/volumes# 再次尝试启动
[root@graphql hasura]# docker compose up -d# 启动成功
[root@graphql hasura]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5709437e2127 hasura/graphql-engine:v2.24.0 "/bin/sh -c '\"${HGE_…" About a minute ago Up About a minute (healthy) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp hasura-graphql-engine-1
a41ec5127932 postgres:15 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp hasura-postgres-1
连接数据源
安装启动成功后,可以打开浏览器访问控制台:http://your-host:8080/console。
可以直接使用 Hasura 自带的 PostgreSQL 作为数据源进行操作。

Hasura 本身就是基于 PostgreSQL 进行开发的,目前对其他的数据库也在做适配中,不过如果要连接 MySQL ,则需要使用其企业版。。

因此如果确实有连接 MySQL 的强需求,则可以尝试下国产版的 Hasura :飞布。

GraphQL基本操作
关于 GraphQL 可以结合以下两个网址极速入门~~
- GraphQL入门
- Countries GraphQL API

基本查询
query {countries{name,codephones}
}
嵌套查询
query {countries{name,codephone,languages{code,name,native,rtl}}
}
条件查询
{countries(filter : {code:{eq: "AU"} }) {namecodephonelanguages {codenamenativertl}}
}query getCountry {country(code: "CN"){name,codephones}
}
别名
{countries(filter : {code:{eq: "AU"} }) {namecodephonelan: languages {codenamenativertl}}
}
片段
{conflictOne: countries(filter: {code: {eq: "PS"}}) {...sameField}conflictTwo: countries(filter: {code: {eq: "IL"}}) {...sameField}
}fragment sameField on Country {codenamenativelan: languages {codenamenative}
}
操作名称query
query getCounty {countries(filter : {code:{eq: "CN"} }) {namecodephonelanguages {codenamenativertl}}
}
变量
query getCounty($code: String) {countries(filter: {code: {eq: $code}}) {namecodephonelanguages {codenamenativertl}}
}{"code": "AU"
}
默认变量
query getCounty($code: String = "CN") {countries(filter: {code: {eq: $code}}) {namecodephonelanguages {codenamenativertl}}
}
指令:include,skip
query getCounty($code: String, $withLanguages: Boolean!) {countries(filter: {code: {eq: $code}}) {namecodephonelanguages @include(if: $withLanguages){codenamenativertl}states @skip(if: $withLanguages){codename}}
}{"code": "CN","withLanguages": false
}
小总结
Hasura 是一个强大的工具,可以帮助开发人员快速构建现代应用程序的后端,并提供实时数据推送和安全性,其特性如下:
- 快速开发:
Hasura提供了一个简单易用的界面,可以快速定义和管理数据模型,并自动生成GraphQL API。这样可以大大减少开发时间和工作量。 - 实时数据推送:
Hasura支持实时数据推送和订阅功能,可以实时更新客户端应用程序的数据。这对于需要实时更新的应用程序非常有用,如聊天应用、实时博客等。 - 安全性:
Hasura提供了强大的身份验证和授权功能,可以轻松管理用户权限和访问控制。这样可以确保数据的安全性和保护用户隐私。 - 扩展性:
Hasura可以轻松扩展以处理高负载和大规模应用程序。它支持水平扩展和负载均衡,可以根据需要增加或减少资源。
当然,作为一款后端低代码平台,也推荐使用对标 Hasura 的国产替代产品:飞布:
飞布是可视化API开发平台,对标
hasura,灵活开放、多语言兼容、简单易学,能构建生产级WEB API,让前端变全栈,让后端不搬砖。
Reference
- Hasura官方文档
- Hasura安装脚本
- Countries GraphQL API 源码
- Countries 数据集
相关文章:
GraphQL入门与开源的GraphQL引擎Hasura体验
背景 Hasura 是一个开源的 GraphQL 引擎,它可以帮助开发人员快速构建和部署现代应用程序的后端。它提供了一个自动化的 GraphQL API ,可以直接连接到现有的数据库,并提供实时数据推送和订阅功能。 Hasura 团队总部位于印度。 下载安装 脚本…...
Javascript知识点详解:this关键字的指向问题
目录 this 关键字 涵义 实质 使用场合 使用注意点 避免多层 this 避免数组处理方法中的 this 避免回调函数中的 this 绑定 this 的方法 Function.prototype.call() Function.prototype.apply() Function.prototype.bind() 箭头函数中的 this this 关键字 涵义 t…...
数据库的备份和恢复
备份:完全备份,增量备份 完全备份:将整个数据库完整的进行备份 增量备份:在完全备份基础的之上,对后续新增的内容进行备份 备份的需求 1生产环境中,数据的安全性至关重要,任何数据都可能产生非…...
DS图—图非0面积/bfs【数据结构】
DS图—图非0面积 题目描述 编程计算由"1"围成的下列图形的面积。面积计算方法是统计"1"所围成的闭合曲线中"0"点的数目。如图所示,在10*10的二维数组中,"1"围住了15个点,因此面积为15。 提示&…...
Wnmp服务安装并结合内网穿透实现公网远程访问——“cpolar内网穿透”
文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包,安装完成后即可得到一个Nginx MyS…...
2023版Pycharm关闭一直显示closing project,正在关闭项目
点击 帮助 下的 查找操作 英文版为 Help 下的 Find Action 输入 Registry 禁用 ide.await.scope.completion 即可 PS:按 Ctrl F 输入可以快速检索...
Gradle笔记 二 Gradle的基础Groovy
学习Groovy的必要性 首先Gradle是由Groovy写成的,而且构建脚本的语法都遵循Groovy的语法,所以要学好Gradle的前提是要基本了解Groovy的语法。 Groovy 简介 在某种程度上,Groovy可以被视为Java的一种脚本化改良版,Groovy也是运行在JVM上&am…...
浅谈剩余电流动作继电器在电动伸缩门的应用
摘 要:随着时代的发展,越来越多的小区、厂区、园区和学校等场所的大门安装了电动伸缩门,几乎可以说随处可见。电动伸缩门是一种长期在户外使用的设备,工作电压为220 V(过去也有380 V),其电机是处…...
stable diffusion安装踩坑之clip安装、git报错
clip本地安装环境链接问题 本节主要记录一下在windows安装stable diffusion时,clip脚本安装不上,本地安装时如何链接到当前库的问题 首先,在脚本安装clip不成功时,脚本会输出一个commend指令,复制到浏览器就可以很快…...
colmap gpu服务器安装
1.官方安装说明 https://colmap.github.io/install.html 后边有编译支持gpu的步骤!!! 2.sudo apt-get install libgtest-dev 3.cmakelists.txt 250行 set(CMAKE_CUDA_ARCHITECTURES “native”) 4. sudo apt-get install libqt5core5a sud…...
linux内的循环
格式 while 【 条件判断 】 do 语句体 done 上图 第一次代码,输入语句在外面,结果输入完(非hello)程序不断循环,没办法,ctrlc给程序终止了,然后把用户输入的语句放到了循环体里面…...
强化学习(RL)的学习笔记
1. 前言 (1)PPO的优点 PPO(Proximal Policy Optimization)算法相比其他强化学习方法有几个显著优点: 稳定性和鲁棒性:PPO通过限制策略更新的幅度来避免训练过程中的大幅波动,这增加了算法的稳…...
2023世界传感器大会开幕,汉威科技多领域创新产品引瞩目
11月5日,2023世界传感器大会在郑州国际会展中心正式拉开帷幕。据悉,本次大会由河南省人民政府、中国科学技术协会主办,郑州市人民政府、河南省工业和信息化厅、河南省科学技术协会、中国仪器仪表学会承办。 大会由“一会一赛一展”组成&#…...
什么是机器学习中的正则化?
1. 引言 在机器学习领域中,相关模型可能会在训练过程中变得过拟合和欠拟合。为了防止这种情况的发生,我们在机器学习中使用正则化操作来适当地让模型拟合在我们的测试集上。一般来说,正则化操作通过降低过拟合和欠拟合的可能性来帮助大家获得…...
PostgreSQL JDBC连接详解(附DEMO)
PostgreSQL JDBC连接详解 PostgreSQL JDBC连接详解摘要引言1. JDBC基础1.1 JDBC简介1.2 JDBC驱动程序1.3 建立JDBC连接 2. 配置PostgreSQL JDBC连接2.1 PostgreSQL连接JDBC2.2 PostgreSQL连接JDBC是否成功2.3 PostgreSQL连接JDBC获取表信息注释等2.4 PostgreSQL连接JDBC根据表名…...
学习视频剪辑:巧妙运用中画、底画,制作画中画,提升视频效果
随着数字媒体的普及,视频剪辑已经成为一项重要的技能。在视频剪辑过程中,制作画中画可以显著提升视频效果、信息传达和吸引力。本文讲解云炫AI智剪如何巧妙运用中画、底画批量制作画中画来提升视频剪辑水平,提高剪辑效率。 操作1、先执行云…...
Android Studio代码无法自动补全
Android Studio代码自动无法补全问题解决 在写layout布局文件时,代码不提示,不自动补全,可以采用如下方法: 点击File—>Project Structure,之后如图所示,找到左侧Modules,修改SDK版本号&…...
从零开始搭建微服务
人狠话不多,直接开始少点屁话本着共同学习进步的目的和大家交流如有不对的地方望铁子们多多谅解 准备工具 开发工具 idea Java环境 jdk.18 Maven 3.8.6 仓库镜像阿里云 <mirror><id>alimaven</id><name>aliyun maven</name><url>https:…...
HF Hub 现已加入存储区域功能
我们在 企业版 Hub 服务 方案中推出了 存储区域(Storage Regions) 功能。https://hf.co/enterprise 通过此功能,用户能够自主决定其组织的模型和数据集的存储地点,这带来两大显著优势,接下来的内容会进行简要介绍&…...
linux下实现电脑开机后软件自启动
实现linux的软件自启动,需要四个文件 第一个【displayScreen.desktop】文件,.desktop文件就是一个用来运行程序的快捷方式,也叫启动器,常用来自启动用的文件,内容如下 [Desktop Entry] #要执行的脚本位置 Exec/home/yicaobao/te…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
