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…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
