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.pswp.cn/web/73626.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73626.shtml
英文地址,請注明出處:http://en.pswp.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;…