PostgreSQL神器之PostgREST

What is PostgREST

從字面上看 PostgREST 是 PostgreSQL+ RESTful的組合體柳恐,PostgreSQL是一個類似Mysql但比Mysql強大的多的關系性數據庫喘先。

PostgREST是haskell寫的闹瞧,以 postgres 數據庫為基礎绑雄,替你自動生成REST API。你只需要通過sql定義好數據庫的table等奥邮,postgrest就能生成REST API万牺。 PostgREST效率非常高,而且它連json的render 都在postgres中處理洽腺,性能反而還不錯脚粟。

有這樣的一張數據表結構

create table todos (
 id serial primary key,
 done boolean not null default false,
 task text not null,
 due timestamptz
);

insert into todos (task) values
 ('finish tutorial 0'), ('pat self on back');

運行PostgREST ,你就可以通過http訪問數據庫數據了

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

安裝

下載PostgREST打包好的releases版本就好

配置文件 db.conf

# db.conf

db-uri = "postgres://postgres:postgres@localhost:5432/eth"
db-schema = "public" # postgre default schema public
db-anon-role = "postgres" #用戶
server-host = "0.0.0.0"
server-port = 4000 # 端口

設置PostgreSQL訪問權限

pg_hba.conf中配置服務端允許的認證方式

#/etc/postgresql/9.x/main/pg_hba.conf
# TYPE  DATABASE  USER  CIDR-ADDRESS  METHOD

host all all 127.0.0.1/0 md5

重啟數據庫 sudo service postgresql restart

啟動PostgREST

postgrest db.conf 根據配置文件中設定的端口啟動http服務

請求數據

以下為真實數據

curl http://localhost:4000/blocks # 直接請求數據表 blocks

[
  {
    "id":1,
    "height":10,
    "timestamp":1516894509,
    "txs_num":500,
    "hash":"0x40b8e073a6196d330a35c4b41f8ec9e7a00aa4898d580ee360a703119517d986",
    "parent_hash":"0x53d898401c6c7900cc0b14da33c2d25b1d4a83db36e7faefc998f597682ea708",
    "uncle_hash":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
    "coinbase":"0x5a0b54d5dc17e0aadc383d2db43b0a0d3e029c4c",
    "difficulty":236596,
    "size":29216,
    "gas_used":7965081,
    "gas_limit":7988374,
    "nonce":61634,
    "reward":5193,
    "extra_data":"sparkpool-cn-node-2",
  }
]

查詢條件可以靈活組合蘸朋,生產力暴棚核无,更復雜的查詢請看 PostgREST的API文檔

http://localhost:4000/blocks?limit=10 #獲取前10條數據
http://localhost:4000/blocks?limit=10&offset=30 #分頁
http://localhost:4000/blocks?limit=10&order=height.desc #倒序
http://localhost:4000/blocks?limit=10&select=height #只獲取height字段
http://localhost:4000/blocks?limit=10&select=height,hash&id.gte.99999 # 獲取id>99999的數據

想法

以后出原型,可以這么做:

1 定義表數據結構
2 用postgREST 逆天神器生成RESTful API度液, 支持CURD
3 react 擼頁面與API交互

新工具 pREST

[更新于 2018-07-20]
pREST 跟PostgREST功能類似厕宗。PostgREST 用haskell寫的,pREST用go寫的堕担,文檔也更全面已慢。

pREST 例子
http://<url>/<db>/public/<tabel>?tokens=$notnull&balance=$gt.0&_page_size=20&_page=2

查詢tabel中 tokens不為空 balance>0的數據,也支持分頁霹购,太棒了佑惠。

[更新于 2020-05-15]

prest.toml 配置文件內容:

# migrations = "./migrations"

# debug = true
# enabling debug mode will disable JWT authorization

[http]
port = 9000
# Port 6000 is blocked on windows. You must change to 8080 or any unblocked port

[jwt]
default = false

[pg]
host = "127.0.0.1"
user = "postgres"
pass = "postgres"
port = 5432
database = "zqw"
## or used cloud factor
# URL = "postgresql://user:pass@localhost/mydatabase/?sslmode=disable"

[access]
restrict = true  # can access only the tables listed below

    [[access.tables]]
    name = "block"
    permissions = ["read"]
    fields="*"


參考:

http://postgrest.org/zh/latest/index.html
http://www.cnblogs.com/hiloves/archive/2011/08/20/2147043.html
https://github.com/prest/prest/
https://github.com/diogob/postgres-websockets
https://stackoverflow.com/a/24680845
https://github.com/dbohdan/automatic-api

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市齐疙,隨后出現的幾起案子膜楷,更是在濱河造成了極大的恐慌,老刑警劉巖贞奋,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赌厅,死亡現場離奇詭異,居然都是意外死亡轿塔,警方通過查閱死者的電腦和手機特愿,發(fā)現死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勾缭,“玉大人揍障,你說我怎么就攤上這事×┯桑” “怎么了毒嫡?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幻梯。 經常有香客問我兜畸,道長努释,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任膳叨,我火速辦了婚禮洽洁,結果婚禮上,老公的妹妹穿的比我還像新娘菲嘴。我一直安慰自己饿自,他們只是感情好,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布龄坪。 她就那樣靜靜地躺著昭雌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪健田。 梳的紋絲不亂的頭發(fā)上烛卧,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天,我揣著相機與錄音妓局,去河邊找鬼总放。 笑死,一個胖子當著我的面吹牛好爬,可吹牛的內容都是我干的局雄。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼存炮,長吁一口氣:“原來是場噩夢啊……” “哼炬搭!你這毒婦竟也來了?” 一聲冷哼從身側響起穆桂,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤宫盔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后享完,有當地人在樹林里發(fā)現了一具尸體灼芭,經...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年般又,在試婚紗的時候發(fā)現自己被綠了彼绷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡倒源,死狀恐怖苛预,靈堂內的尸體忽然破棺而出句狼,到底是詐尸還是另有隱情笋熬,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布腻菇,位于F島的核電站胳螟,受9級特大地震影響昔馋,放射性物質發(fā)生泄漏。R本人自食惡果不足惜糖耸,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一秘遏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘉竟,春花似錦邦危、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至边苹,卻和暖如春陵且,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背个束。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工慕购, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茬底。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓沪悲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桩警。 傳聞我的和親對象是個殘疾皇子可训,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內容