PostgREST:無需后端 快速構建RESTful API服務

在現代 Web 開發中,API 已成為連接前后端的核心橋梁,傳統的做法是通過后端框架來構建API接口,然后由前后端人員進行聯調。

PostgREST是基于無服務器的一種實現方案,允許開發者將PostgreSQL數據庫直接暴露為RESTful API,而無需編寫任何后端代碼,從而可以專注于核心功能的開發。

基本介紹

PostgREST可以理解為自帶JWT解析的postgres后端API,最主要提供了兩方面的功能:

  1. PostgREST 可以自動將 PostgreSQL 的表、視圖、函數等映射為 RESTful 接口,無需手動編寫任何 CRUD 代碼,在簡單的數據庫使用場景下可省略后端
  2. 內置身份驗證,自動將請求頭的token解析出來,用于角色權限管理

簡單測試

安裝

前提:安裝了PostgreSQL數據庫

# Macos
brew install postgrest# Arch Linux
pacman -S postgrest# Docker
docker pull postgrest/postgrest

數據庫設置

首先登陸數據庫,接著創建一個視圖:

create schema api;

創建一張測試表:

create table api.todos (id int primary key generated by default as identity,done boolean not null default false,task text not null,due timestamptz
);insert into api.todos (task) values('finish tutorial 0'), ('pat self on back');

創建匿名角色,并且賦予查詢api.todos的權限:

create role web_anon nologin;grant usage on schema api to web_anon;
grant select on api.todos to web_anon;

創建用于登陸數據庫的角色:

create role authenticator noinherit login password 'mysecretpassword';
grant web_anon to authenticator;

創建配置文件

db-uri = "postgres://authenticator:mysecretpassword@localhost:5432/postgres"
db-schemas = "api"
db-anon-role = "web_anon"

web_anon這個角色是之前在數據庫中就已經配置好的

啟動服務

postgrest tutorial.conf

測試響應

直接用curl發起請求:

curl http://localhost:3000/todos

返回:

[{"id": 1,"done": false,"task": "finish tutorial 0","due": null},{"id": 2,"done": false,"task": "pat self on back","due": null}
]

基本操作

查詢

直接在端口后面跟上需要查詢的表名,即可對該表進行查詢

curl "http://localhost:3000/people?age=gte.18&student=is.true"

同樣支持過濾條件,在PostgREST中需要以簡寫方式聲明。

部分簡寫如下:

AbbreviationIn PostgreSQLMeaning
eq=equals
gt>greater than
gte>=greater than or equal
lt<less than
lte<=less than or equal
neq<> or !=not equal

新增

插入單條數據:

curl "http://localhost:3000/table_name" \-X POST -H "Content-Type: application/json" \-d '{ "col1": "value1", "col2": "value2" }'

披量插入數據:

curl "http://localhost:3000/people" \-X POST -H "Content-Type: application/json" \-d @- << EOF[{ "name": "J Doe", "age": 62, "height": 70 },{ "name": "Janus", "age": 10, "height": 55 }]
EOF

更新

使用PATCH更新數據:

curl "http://localhost:3000/people?age=lt.13" \-X PATCH -H "Content-Type: application/json" \-d '{ "category": "child" }'

刪除

使用DELETE刪除數據:

curl "http://localhost:3000/user?active=is.false" -X DELETE

總結

PostgREST 提供了一種高效、簡潔的方式來構建 RESTful API,特別適合那些希望減少后端開發負擔、專注于核心功能開發的團隊。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79882.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79882.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79882.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL——九、鎖

分類 全局鎖表級鎖行級鎖 全局鎖 做全庫的邏輯備份 flush tables with read lock; unlock tables;在InnoDB引擎中&#xff0c;我們可以在備份時加上參數–single-transaction參數來完成不加鎖的一致性數據備份 mysqldump --single-transaction -uroot -p123456 itcast>…

基于 Kubernetes 部署容器平臺kubesphere

一 前言&#xff1a; k8s 大家都已經非常熟悉了&#xff0c;網上流傳著非常多的搭建部署文檔&#xff0c;有kubeadmin的有二進制的&#xff0c;還有基于第三方的部署工具的&#xff0c;反正是各種部署方法都有&#xff0c;k8s部署技術熱門可見一斑。但是不管哪種部署都需要了解…

RDD算子-行為算子

RDD 算子探秘&#xff1a;行為算子的深度解析與實戰應用? 在 Spark 的 RDD 編程模型中&#xff0c;轉換算子負責構建數據處理的邏輯流程&#xff0c;但真正觸發計算并產生最終結果的是行為算子&#xff08;Action Operators&#xff09;。與轉換算子的惰性求值特性不同&#…

Oracle — PL-SQL

介紹 Oracle PL/SQL是專為Oracle數據庫設計的過程化編程語言&#xff0c;深度融合SQL語句與結構化編程邏輯&#xff0c;旨在高效處理復雜數據操作與業務規則。其核心特征為“塊結構”&#xff0c;程序由聲明、執行、異常處理三部分組成&#xff0c;支持模塊化開發&#xff0c;顯…

高防ip支持哪些網絡協議

高防IP通常支持多種網絡協議&#xff0c;以提供全面的網絡安全防護。以下是一些主要支持的網絡協議及其相關說明&#xff1a; TCP協議&#xff08;傳輸控制協議&#xff09;&#xff1a; TCP協議是最常見的傳輸協議&#xff0c;廣泛應用于互聯網通信。高防IP通過對TCP協議的防…

Flutter基礎()

導航欄 appBar: AppBar() title: const Text(搜索) //標題 backgroundColor: Colors.blue //背景顏色 centerTitle: true //標題居中leading 屬性 作用&#xff1a; 放置在應用欄左側的控件&#xff0c;通常是一個圖標按鈕&#xff0c;用于導航或打開菜單。 AppBar(le…

ESP系列單片機選擇指南:結合實際場景的最優選擇方案

前言 在物聯網(IoT)快速發展的今天&#xff0c;ESP系列單片機憑借其優異的無線連接能力和豐富的功能特性&#xff0c;已成為智能家居、智慧農業、工業自動化等領域的首選方案。本文將深入分析各款ESP芯片的特點&#xff0c;結合典型應用場景&#xff0c;幫助開發者做出最優選擇…

搭建Caffeine+Redis多級緩存機制

本地緩存的簡單實現方案有HashMap&#xff0c;CucurrentHashMap&#xff0c;成熟的本地緩存方案有Guava 與 Caffeine &#xff0c;企業級應用推薦下面說下兩者的區別 1. 核心異同對比 特性Guava CacheCaffeine誕生背景Google Guava 庫的一部分&#xff08;2011年&#xff09;…

【Linux系統】第四節—詳解yum+vim

hello 我是云邊有個稻草人 Linux—本節課所屬專欄—歡迎訂閱—持續更新中~ 目錄 畫板—本節課知識點詳解 一、軟件包管理器 1.1 什么是軟件包 1.2 Linux軟件?態 1.3 yum具體操作 【查看軟件包】 【安裝軟件】 【卸載軟件】 【注意事項】 1.4 安裝源 二、vim 2.1 …

EasyRTC嵌入式音視頻通信SDK打造帶屏IPC全場景實時通信解決方案

一、方案概述? 在智能安防與物聯網快速發展的背景下&#xff0c;帶屏IPC&#xff08;網絡攝像機&#xff09;不僅承擔著視頻采集與監控的基礎功能&#xff0c;還逐漸向多樣化交互與智能化方向演進。EasyRTC作為一款強大的實時通信框架&#xff0c;具備低延遲、高穩定性、跨平…

Linux下的c/c++開發之操作Redis數據庫

C/C 操作 Redis 的常用庫 在 C/C 開發中操作 Redis 有多種方式&#xff0c;最主流的選擇是使用第三方客戶端庫。由于 Redis 官方本身是使用 C 編寫的&#xff0c;提供的 API 非常適合 C/C 調用。常見的 Redis C/C 客戶端庫包括&#xff1a; hiredis&#xff1a;官方推薦的輕量…

go 通過匯編學習atomic原子操作原理

文章目錄 概要一、原理1.1、案例1.2、關鍵匯編 二、LOCK匯編指令2.1、 LOCK2.2、 原理2.2.1、 緩存行2.2.2、 緩存一致性之MESI協議2.2.3、lock原理 三、x86緩存發展四、x86 DMA發展參考 概要 在并發操作下&#xff0c;對一個簡單的aa2的操作都會出錯&#xff0c;這是因為這樣…

mapreduce打包運行

maven打包 MapReduce是一個分布式運算程序的編程框架&#xff0c;是用戶開發“基于Hadoop的數據分析應用”的核心框架。 MapReduce核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分布式運算程序&#xff08;例如&#xff1a;jar包&#xff09;&#xff0…

小白成長之路-LInux系統文件與目錄管理(二)

提示&#xff1a;第二部分對第一部分收尾 文章目錄 常見的命令如下一、文件查看命令1. more命令2.less命令3.head命令4.tail命令5.nl命令&#xff08;了解&#xff09;6.創建目錄命令7.創建文件命令>: 覆蓋重定向>>: 追加重定向 8.touch命令9.echo命令10.文件或目錄復…

JVM之虛擬機運行

虛擬機運行快速復習 try-catch&#xff1a;catch-異常表棧展開&#xff0c;finally-代碼復制異常表兜底 類的生命周期&#xff1a;加載&#xff0c;連接&#xff08;驗證&#xff0c;準備&#xff0c;解析&#xff09;&#xff0c;初始化&#xff0c;使用&#xff0c;卸載 類…

AI數字人實現原理

隨著人工智能與數字技術的快速發展&#xff0c;AI數字人&#xff08;Digital Human&#xff09;作為新一代人機交互媒介&#xff0c;正在多個行業中快速落地。無論是在虛擬主播、在線客服、教育培訓&#xff0c;還是在數字代言、元宇宙中&#xff0c;AI數字人都扮演著越來越重要…

Android開發-數據庫SQLite

在Android應用開發中&#xff0c;當需要存儲結構化數據時&#xff0c;SQLite是一個非常強大的工具。SQLite是一款輕量級的關系型數據庫管理系統&#xff0c;它內嵌于Android系統中&#xff0c;支持SQL語法&#xff0c;并且不需要單獨的服務器進程或系統配置。本文將介紹如何在A…

android實現USB通訊

在 Android 上枚舉 USB 設備除了使用 UsbManager.getDeviceList() 方法外&#xff0c;還有以下幾種常見的方式&#xff1a; 1. 使用 USB 設備過濾器&#xff08;XML 配置&#xff09; 通過在 AndroidManifest.xml 中配置 USB 設備過濾器&#xff0c;可以讓系統自動檢測并通知…

FFmpeg視頻編碼的完整操作指南

步驟如下&#xff1a; 安裝和準備FFmpeg&#xff1a;確保包含所需編碼器&#xff08;如libx264&#xff09;。基本命令行編碼&#xff1a;使用ffmpeg命令進行轉碼&#xff0c;設置視頻編碼器、CRF、預設等。API編碼流程&#xff08;針對開發者&#xff09;&#xff1a; a. 注冊…

鴻蒙 UIAbility組件與UI的數據同步和窗口關閉

使用 EventHub 進行數據通信 Stage模型概念圖 根據 Stage 模型概念圖 UIAbility 先于 ArkUI Page 創建 所以&#xff0c;事件要先 .on 訂閱 再 emit 發布 假如現在有頁面 Page1 和他的 UIAbility // src/main/ets/page1ability/Page1Ability.ets onCreate(want: Want, laun…