PostgREST实现DBaaS(数据库即服务)

目录

配置使用

验证

token使用


上文部署高可用PostgreSQL14集群后,本文介绍PostgREST,以及如何基于PostgREST实现数据库即服务,PostgREST可以在 PostgreSQL 数据库上通过解析数据库结构(如表、视图、存储过程、权限等)自动生成 RESTful API,并直接转换为标准的 HTTP 接口,相当于消除了简单场景下的后端代码和服务,与之前绍过的MagicAPI这种基于SpringBoot的快速api生成工具(magicApi)相比,magicAPI因为复杂度高反而意义不大了(至少在pg数据库中,其他数据库不一定有PostgREST这种工具)。

软件架构逃不开合久必分分久必合的趋势,现在硬件这么能打,玩明白数据库高级服务就可以不用搞那些复杂的后端,等业务足够复杂再去上微服务等分布式架构才是合理的;

配置使用

直接参照官方文档操作PostgREST,复用上文的环境,在100.3.254.211这个主节点上下载二进制文件 PostgREST,创建配置文件,并做成服务启动:

# json解析工具
[root@node2 postgrest]# yum install -y jq
# 配置postgrest
[root@node2 postgrest]# mkdir -p /opt/postgrest
[root@node2 postgrest]# chown postgres:postgres /opt/postgrest/ -R
[root@node2 postgrest]# cd /opt/postgrest
[root@node2 postgrest]# chmod +x postgrest
[root@node2 postgrest]# cat tutorial.conf 
db-uri = "postgres://authenticator:admin123@localhost:5432/postgres"
db-schemas = "api"
db-anon-role = "web_anon"# 配置成服务
[root@node2 postgrest]# cat /etc/systemd/system/postgrest.service
[Unit]
Description=PostgREST API Server
After=network.target[Service]
Type=simple
User=postgres
Group=postgres
ExecStart=/opt/postgrest/postgrest /opt/postgrest/tutorial.conf
Restart=always
RestartSec=5
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin[Install]
WantedBy=multi-user.target# 启动
[root@node2 postgrest]# systemctl daemon-reload 
[root@node2 postgrest]# systemctl restart postgrest.service 
[root@node2 postgrest]# systemctl status postgrest.service 

在postgresql中创建用户和权限:

postgres=# create schema api;
postgres=# create table api.todos (
postgres(#   id int primary key generated by default as identity,
postgres(#   done boolean not null default false,
postgres(#   task text not null,
postgres(#   due timestamptz
postgres(# );
postgres=# insert into api.todos (task) values ('finish tutorial 0'), ('pat self on back');
postgres=# create role web_anon nologin;
postgres=# grant usage on schema api to web_anon;
postgres=# grant select on api.todos to web_anon;
postgres=# create role authenticator noinherit login password 'admin123';
postgres=# grant web_anon to authenticator;

验证

这就ok啦可以使用curl来测试API接口了,3000是postgrest提供的服务端口,web_anon用户能查到api这个schema下的todos表,并提供查询服务;

[root@node2 ~]# curl http://localhost:3000/todos |jq
[{"id": 1,"done": false,"task": "finish tutorial 0","due": null},{"id": 2,"done": false,"task": "pat self on back","due": null}
]

token使用

postgrest还提供基于jwt的认证机制,官方文档写的很清晰,在jwt.io中拿到手动生成的token,并带入curl请求中:

export LC_CTYPE=C
echo "jwt-secret = \"$(< /dev/urandom tr -dc A-Za-z0-9 | head -c32)\"" >> tutorial.conf[root@node2 postgrest]# cat tutorial.conf 
db-uri = "postgres://authenticator:admin123@localhost:5432/postgres"
db-schemas = "api"
db-anon-role = "web_anon"
jwt-secret = "chthyFjIdcLxEgKGHh780q5ly3yPebW1"# 配置文件中增加了jwt-secret重启服务
[root@node2 postgrest]# systemctl restart postgrest

复制这个jwt-token放入环境变量并重启postgrest服务:

[root@node2 postgrest]# export TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoidG9kb191c2VyIn0.rIRseKU6UQv7GA_sY6tBYsOt4-0nK0zCmP_y1jsIxA0"[root@node2 postgrest]# curl http://localhost:3000/todos -X POST      -H "Authorization: Bearer $TOKEN"        -H "Content-Type: application/json"      -d '{"task": "learn how to auth"}'[root@node2 postgrest]# curl http://localhost:3000/todos |jq
[{"id": 1,"done": false,"task": "finish tutorial 0","due": null},{"id": 2,"done": false,"task": "pat self on back","due": null},{"id": 3,"done": false,"task": "learn how to auth","due": null}
]

以上简单测试实现PostgreSQL的数据库即服务的配置,部署数据库就能提供api,还支持试图、函数等高级使用,而且这个开源工具还比较活跃,是个很好的选项,后续高级功能待研究;

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

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

相关文章

基于yolov11的铁路轨道铁轨缺陷检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的铁路轨道铁轨缺陷检测系统是一种高效、准确的自动化检测技术&#xff0c;专门用于识别和检测铁轨上的各种缺陷。该系统利用YOLOv11这一先进的深度学习模型&#xff0c;实现了对Corrugation&#xff08;波纹磨耗&#xff09;、Spalling&#xff08;剥…

WPF TemplateBinding与TemplatedParent区别

在 WPF 中&#xff0c;TemplateBinding 和 TemplatedParent 是两种与控件模板&#xff08;ControlTemplate&#xff09;相关的绑定机制&#xff0c;它们都可以用来在控件模板中访问控件的属性。尽管它们的功能有些相似&#xff0c;但它们的行为和使用场景有一些重要的区别。 1.…

华为hcie证书考什么,怎么备考?

新盟教育 | 华为HALP授权培训合作伙伴 在ICT领域&#xff0c;华为HCIE证书是含金量极高的专业认证&#xff0c;它是对个人技术能力和专业素养的高度认可。对于渴望在网络、云计算、大数据等前沿领域深入发展的从业者而言&#xff0c;华为HCIE证书是一块强有力的职业敲门砖。 …

【Git 暂存操作指南2】

Git 暂存操作指南 在日常的 Git 使用场景中&#xff0c;我们常常会遇到各种复杂的情况&#xff0c;需要巧妙运用 Git 的功能来实现高效开发与代码管理。接下来&#xff0c;我们将深入探讨一个具体的开发实例&#xff0c;以及如何通过暂存功能完美解决其中的问题。 一、开发场…

华为hcia——Datacom实验指南——配置IPv4静态路由,默认路由和浮动静态路由

什么是IPv4 IPv4静态路由&#xff0c;是手动配置的&#xff0c;不会随着网络拓扑的变化而变化&#xff0c;所配置的路由信息也不会在网络中传播&#xff0c;所以它主要运用在小型网络或者作为动态路由的补充。 IPv4的配置 配置的命令很简单 IP route-static &#xff08;目…

Linux一步部署主DNS服务器

​ #!/bin/bash #部署DHCP服务 #userli 20250319if [ "$USER" ! "root" ]then echo"错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;"exit 0fi#防火墙与高级权限 systemctl stop firewalld && systemctl disable firewalld…

给AI装“记忆U盘“:LangChain记忆持久化入门指南

&#x1f9e0; 什么是记忆持久化&#xff1f; 想象AI对话就像和朋友聊天&#xff1a; ​普通模式&#xff1a;每次重启都忘记之前聊过什么​持久化模式&#xff1a;给AI配了个"记忆U盘"&#xff0c;聊天记录永不丢失 核心组件三件套 #mermaid-svg-ORm8cbBXsaRy2sZ…

JumpServer:一款企业级开源堡垒机

在数字化运维时代&#xff0c;如何高效、安全地管控企业内部资产&#xff1f;JumpServer 作为一款完全开源的堡垒机&#xff0c;凭借其强大的 4A&#xff08;身份认证、授权控制、账号管理、安全审计&#xff09;能力与灵活的架构设计&#xff0c;实现事前授权、事中监察、事后…

LangChain + PostgreSQL 实现向量数据库与 RAG 搜索

1. 环境准备 安装必要的库 pip install langchain psycopg2-binary pgvector langchain-openai安装并配置 PostgreSQL 安装 PostgreSQL 确保 PostgreSQL 已正确安装并运行。你可以根据操作系统的不同参考官方文档进行安装。 创建数据库 创建一个新的数据库&#xff08;例如 …

STM32硬件IIC与OLED使用

OLED屏幕介绍 OLED即有机发光管(Organic Light-Emitting Diode,OLED)。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低功耗、极高反应速度、可用于绕曲性面板、使用温度范围广、构造及制程简单等有点&#xff0c;被认为是下一代的平面显示屏新兴应用技术 OLED显示…

idea自动生成注释

idea 自动生成注释 1 创建类时&#xff0c;自动生成注释 模板代码如下 /** * program: ${PROJECT_NAME} * * description: ${description} * * author: yun * * create: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE} **/ 2 在方法上使用快捷键生成注释 先新建一个…

doris:恢复

前提条件​ 确保您拥有管理员权限以执行恢复操作。确保您有一个有效的备份快照可供恢复&#xff0c;请参考备份。 1. 获取快照的备份时间戳​ 以下 SQL 语句可用于查看名为example_repo的 Repository 中的现有备份。 mysql> SHOW SNAPSHOT ON example_repo; -----------…

可视化图解算法:删除有序(排序)链表中重复的元素-II

1. 题目 描述 给出一个升序排序的链表&#xff0c;删除链表中的所有重复出现的元素&#xff0c;只保留原链表中只出现一次的元素。 例如&#xff1a; 给出的链表为1→2→3→3→4→4→5, 返回1→2→5. 给出的链表为1→1→1→2→3 返回2→3. 数据范围&#xff1a;链表长度 0≤…

【leetcode刷题日记】lc.53-最大子数组和

目录 1.题目 2.代码 1.题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-…

树莓派超全系列文档--(7)RaspberryOS播放音频和视频

播放音频和视频 播放音频和视频VLC 媒体播放器vlc GUIvlc CLI使用 cvlc 在没有图形用户界面的情况下播放媒体 在 Raspberry Pi OS Lite 上播放音频和视频指定音频输出设备指定视频输出设备同时指定音频和视频输出设备提高数据流播放性能 文章来源&#xff1a; http://raspberr…

算法250327题目

1114: 4006 AB问题 题目描述 给定两个整数A和B&#xff0c;其表示形式是&#xff1a;从个位开始&#xff0c;每三位数用逗号,隔开。 现在请计算AB的结果&#xff0c;并以正常形式输出。 输入 输入包含多组数据&#xff0c;每组数据占一行&#xff0c;由两个整数A和B组成&am…

Wireshark学习

Wireshark简介 抓包前 1.打开wireshark得到下面的界面 2.选择菜单栏上捕获-> 选项&#xff0c;勾选WLAN网卡&#xff08;这里需要根据各自电脑网卡使用情况选择&#xff0c;简单的办法可以看使用的IP对应的网卡&#xff09;。点击开始。启动抓包。 3.wireshark启动后&am…

[OS_4] 数学视角 | 多状态 | 模型检查器 | 程序验证(math)

程序 状态机 gdb 单步执行 状态迁移 状态里有什么&#xff1f;gdb 可以打印有一些特殊的状态迁移 硬件 状态机 指令执行 状态迁移 从 CPU Reset 开始执行 FirmwareFirmware 加载操作系统 (程序) 操作系统 状态机 (毫无疑问) 程序是一种真正意义上的 “数学严格” 的…

互联网的“神经中枢”域名根服务器是如何演变的?

互联网如同一条隐形的纽带&#xff0c;将全球数十亿人的生活和工作紧密相连。而在这庞大的网络体系中&#xff0c;域名根服务器则是支撑其平稳运行的“神经中枢”。那么域名根服务器是如何演变的呢&#xff1f; 一、域名根服务器互联网的“地址簿” 想象一下&#xff0c;当你…

【sylar-webserver】6 IO协程调度模块

文章目录 设计知识点 设计 IO协程调度模块&#xff0c;整个项目里最重要的模块~ 和 协程调度模块 相比&#xff0c;增加了 IO 事件的 触发条件。 所以需要重新封装 Event 事件&#xff0c; 通过 epoll_wait 监测触发事件&#xff08;重新实现了idle&#xff09;&#xff0c;…