百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

快速将数据库SQL转换为RESTful API

off999 2025-04-09 19:00 25 浏览 0 评论

企业内部经常会开发一些小型系统或需要将现有的系统开发Restful API供内部系统集成,这类系统的特点是:几乎都是CRUD操作,业务简单,使用人数少,生命周期短。有没有一种工具,我们只需要关注数据库设计,使用它快速自动生成Restful API供前端或第三方系统调用?

本文将为大家介绍一个工具Hasura,它能够帮助你通过实时GraphQL API即时访问你的数据,因此你可以更快地构建和发布现代应用程序和API。Hasura连接到你的数据库、REST 服务器、GraphQL服务器和第三方API,为你的所有数据源提供统一的实时GraphQL API。

什么是Hasura

开源的SQL转API的项目不少,例如SQLer和Directus是Github Star数量较高的项目。Directus提供了用于管理SQL数据库内容的实时API和应用仪表板;SQLer是一个小型便携式服务器,使你可以使用SQL查询编写API,以便在任何人点击它时执行,它还使你能够定义验证规则,以便你可以验证请求正文/查询参数,以及使用简单的数据转换JavaScript语法。SQLer使用Nginx风格的配置语言(HCL)和JavaScript引擎来自定义表达式。

相比SQLer、Directus,Hasura提供了更为灵活、易用、强大的功能,同时它提供了Web Console,更便于管理API。Hasura提供以下功能:

  • 强大的查询:内置过滤、分页、模式搜索、批量插入、更新、删除;
  • 添加现有的数据库:将其指向现有数据库以立即获得即用型GraphQL API;
  • 实时查询:使用订阅将任何GraphQL查询转换为实时查询;
  • 操作扩展:编写REST API以使用自定义业务逻辑扩展Hasura的架构。
  • 触发webhooks或无服务器功能:在Postgres插入/更新/删除事件;
  • 预定触发器:使用cron配置或一次性事件在特定时间点执行自定义业务逻辑;
  • 细粒度访问控制:与身份验证系统集成的动态访问控制;
  • 管理UI:提供一个易用的Web管理UI;
  • 多数据库支持:PostgreSQL、SQL Server、Big Query、MySQL等;

Hasura与GraphQL

GraphQL是一种数据语言,此语言的开发目的是便于应用程序从服务器上提取数据。它具有可指定的自记录风格。在GraphQL操作中,客户端指定数据从服务器返回时的结构如何。这样客户端就可以只查询它需要的数据,以它需要的格式进行查询。

GraphQL的实现分为Client和Server,Server实现了GraphQL协议,支持GraphQL查询,Client是一个GraphQL请求客户端,就像jQuery Ajax和Restful后端API的关系一样。GraphQL 有三项顶级操作:

  • 查询 - 只读提取;
  • 更改 - 写入,然后提取;
  • 订阅 - 用于接收数据的长期活动连接;

GraphQL使应用程序开发人员可以轻松地从他们的API中精确查询他们想要的数据。例如,假设我们正在构建一个送餐应用程序。以下是Postgres上的表结构可能的样子:

对于显示当前用户订单的“订单状态”的应用程序,GraphQL查询将获取最新的订单状态和交付订单的位置,此查询参数作为字符串发送到网络服务器,该服务器对其进行解析、应用授权规则并适当调用数据库等内容以获取应用程序的数据。它以请求的确切格式将此数据作为JSON返回。

实时查询是能够订阅特定查询的最新结果。随着底层数据的变化,服务器应该将最新的结果推送给客户端。这与GraphQL完美契合,因为GraphQL客户端支持订阅来处理混乱的WebSocket连接。如果GraphQL服务器支持,将查询转换为实时查询非常简单。

Hasura本质上是一个GraphQL引擎,它也提供将GraphQL查询转换为Resrful API的功能。它拥有良好的并发实时订阅性能,并且支持垂直和/或水平扩展:

Hasura GraphQL引擎订阅实际上是实时查询,即订阅将返回正在进行的查询的最新结果,而不是导致结果的单个事件。Hasura通过将多个相似的订阅组合成一个SQL查询并从数据库中获取单个响应来优化订阅,而不是为每个订阅进行单独的SQL查询。

快速开始

下面我们开始使用Docker + Hasura + PostgreSQL演示一个CRUD的例子,具体看看Hasura能够提供的功能。首先我们使用Docker启动PostgreSQL数据库和Hasura Engine,并开启Console:

# PostgreSQL
docker run --name local-postgres \
  -e POSTGRES_PASSWORD=your_password \  
  -e PGDATA=/var/lib/postgresql/data/pgdata \
  -p 5432:5432 -d postgres:12
# Hasura
docker run -d -p 8080:8080 \
  -e HASURA_GRAPHQL_DATABASE_URL=postgres://username:password@hostname:port/dbname \
  -e HASURA_GRAPHQL_ENABLE_CONSOLE=true \
  hasura/graphql-engine:latest

笔者使用Mac Book运行本案例,使用的docker.for.mac.localhost连接数据库,这是Docker内置的变量,代表本地hostname。如果你在实验过程中遇到PostgreSQL连接的问题,在Docker应用中连接Docker数据库可以通过inspect命令查看数据库在Docker中的端口和IP。

启动之后访问localhost:8080就可以看到Hasura的Console界面。这里我们直接使用这台PostgreSQL数据库,不再连接另外的Database。

安装PostgreSQL命令行客户端:

brew install libpq
brew link --force libpq
psql postgres://postgres:[your password]@localhost:5432/postgres

在PostgreSQL中创建一个Schema和两张表,一张是用户表,另一张是薪水表:

create schema if not exists example;
set search_path to 'example';
create sequence users_id_seq start 1000 increment 1;
create table users (
  id integer primary key default nextval('users_id_seq'),
  name varchar(40) NOT NULL,
  gender integer NOT NULL,
  cell_phone varchar(40) not null
);

create sequence payroll_id_seq start 1000 increment 1;
create table payroll (
  id integer primary key default nextval('payroll_id_seq'),
  user_id integer not null,
  pay_day date not null,
  salary money not null
);

在Console中添加这两张表:

插入一条用户数据:

mutation MyMutation($object: example_users_insert_input!) {
  insert_example_users_one(object: $object) {
    cell_phone
    gender
    name
  }
}
// 参数
{
  "object": {
    "cell_phone": "18200008888",
    "gender": 1,
    "name": "Lisa"
  }
}

查询数据库发现数据已经插入:

postgres=# select * from users;
  id  | name | gender | cell_phone  
------+------+--------+-------------
 1001 | Lisa |      1 | 18200008888
(1 row)

点击上图中的REST按钮将插入操作转换为Restful接口:

接着创建用户查询接口,在API Query窗口中添加User查询,生成的查询语句如下:

query MyQuery {
  example_users {
    cell_phone
    gender
    id
    name
  }
}

你同样可以点击“Analye”按钮查看Hasura生成的SQL语句:

点击REST按钮创建Restful API,至此我们创建了2个API:

通过浏览器访问API,效果如下:

删除、修改与订阅功能下文就不再演示了,你可以根据官方文档解锁Hasura更多的功能。通过本文的案例,相信你可以初步了解Hasura提供的能力,它是一个Graphql引擎,并能提供Restful接口,同时它能定时执行你定义的SQL,并在数据操作前允许你回调自定义接口以扩展功能。

通过向大家介绍Hasura为大家解决工作中的问题提供一个工具储备,相信能对你有所帮助。如果你在工作中也用到了Hasura,欢迎留言讨论。

参考资料

https://github.com/hasura/graphql-engine

https://hasura.io/docs/latest/graphql/core/index.html

相关推荐

最新电脑主机配置清单(2021电脑主机主流配置)

1.CPU全志a31s80元主板建议联想乐pad160元显示屏7寸分辨率建议在800*480以上约110元电源接口约0.2元wifi模块约20元蓝牙模块约20元硬盘建议金...

windows7系统界面(win7界面什么样)

关于这个问题,要将Win1系统调成Win7界面,您可以尝试以下几个步骤:1.下载并安装一个Win7主题:在网上搜索并下载一个Win7主题,例如“Windows7ThemeforWin10”,...

把文件隐藏了怎么显示出来(文件隐藏起来了怎么找)

需要显示出来因为有些文件被系统默认设置为隐藏状态,为了查看或编辑这些文件,需要将它们显示出来。如果你使用Windows操作系统,可以在文件资源管理器中点击“查看”选项卡,然后勾选“隐藏项目”复选框,隐...

mercury路由器wifi密码(mercury路由器wifi密码忘了怎么办)

水星路由器宽带密码查看的方法:一、首先登陆原来路由器管理界面,输入路由器账号密码登陆。二、进入路由器管理界面后,点击进入“备份和载入配置”,然后点击“备份配置文件”,然后将备份的配置文件存放在电脑桌...

microsoft word产品密钥(微软word产品密钥)

产品密钥是由一些字符组成的代码,用于激活对应产品。产品密钥是产品授权的证明,它是根据一定的算法(如椭圆算法)等产生的随机数。当用户输入密钥产品会根据其输入的密钥判断是否满足相应的算法,通过这样来判断,...

笔记本显卡推荐(笔记本显卡推荐性价比高)

1、微星R7850TF2GD5/OC:这款微星显卡是用GCN架构设计的图形核心,里面有1024个sp单元,执行、输出能力都非常的强悍,能完美地将DX11.1特效呈现出来。它还能够支持驳接各种大型...

hp系统重装win10(hp怎么重装系统win10)

答具体解决方法如下准备工作:  1、下载u启动u盘启动盘制作工具  2、下载win10系统镜像并存入u盘启动盘中  3、硬盘模式更改为ahci模式  安装win10系统操作步骤:  1、首先,我们提...

惠普笔记本电脑售后服务(惠普笔记本电脑售后服务维修点)

惠普笔记本电脑的售后服务包括全国联保、上门维修、24小时服务热线等多种服务。消费者可以通过官网或客户服务热线轻松预约维修服务,享受专业、高效的技术支持。同时,惠普还提供质保服务和延保服务,保障消费者的...

住房公积金管理中心官网(广州住房公积金管理中心官网)

按照《住房公积金管理条例》有关规定,住房公积金管理中心性质属于事业单位,隶属事业单位编制。使用手机查询住房公积金的方法。微信查询法1、打开微信,点击进入“我”的页面,在这个页面找到钱包;2、点击进入...

远程控制系统(路灯远程控制系统)

      汽车远程控制系统是一种通过移动终端或其他设备远程控制汽车的系统,可以实现远程锁车/解锁、远程启动车辆、远程启动空调、...

惠普1136打印机驱动(惠普1136打印机驱动用的是1130吗)

原因:1、可能是安装驱动步骤错了,下载驱动的步骤一定要按步骤检查安装。2、可能是驱动程序兼容性问题,或驱动程序损坏,建议使用驱动管理软件安装,这样简单,而且是最新的,兼容性、稳定性好。3、可能是打印机...

office2013标准版产品密钥(microsoft office2013产品密钥在哪里能找到)

win7/win8/win10系统下VisualStudio2013各个版本的密钥:VisualStudioUltimate2013KEY:BWG7X-J98B3-W34RT-33B3R-...

win7旗舰版电脑非常卡怎么办

针对Windows7旗舰版卡顿的情况,可以尝试以下几种方法来解决:1.升级硬件:如果你的电脑配置较低,可以考虑升级一下硬件,例如更换内存条、加装固态硬盘等。2.清理磁盘:清理电脑中不必要的文件、...

随身wifi怎么用的使用教程(随身wifi怎么用的使用教程图解)

1、将随身wifi插入电脑端,按照提示操作2、首次安装驱动后,随身wifi会随机生成10位默认密码,每台电脑是不相同的。为方便连接,也可手动设置为相同的密码。3、随身WiFi客户端支持3种手机连接方式...

gho文件制作u盘启动盘(ghost文件制作启动盘)

有些优盘制作工具只会制作启动盘,里面是没有包括映像文件的,需要你自己下载。后拷贝gho文件到GHO目录里。你可以检查一下优盘里的内容,尤其是GHO文件夹,没有的话,自己拷贝需要的进入就行了。(1)制作...

取消回复欢迎 发表评论: