PostgREST 基本教程
PostgREST是一個可以直接將你的PostgreSQL數據庫直接提供RESTful API 的穩定WEB服務。數據庫結構和約束決定API的端點和操作。
使用PostgREST可以替代手動的CRUD開發。自定義的API服務經常遇到很多問題。人工編寫業務邏輯經常會導致重復,忽略或者繞過數據庫數據結構。對象關系映射這種抽象會導致代碼慢。PostgREST的核心思想是:數據為本。
PostgREST技術優勢
聲明式編程
依托於PostgreSQL,自動實現條件查詢和訪問性控制。
無需抽象化
無需ORM,無需手動的CRUD開發。
關系模型
1970年,E. F. Codd在他的文章“大型共享數據庫數據關系模型”中批評了當時主導的數據庫層次模型。文章揭示了分層數據庫和嵌套http路由之間的驚人相似性。使用PostgREST,我們嘗試使用靈活的過濾和嵌入,而不是嵌套路由。
一鍵式開發
訪問性控制方面可以與Nignx配合
開源項目
完全開源
PostgREST快速搭建教程
基本環境
PostgreSQL 9.4(官方建議9.3以上,這里建議9.4以上)
Ubuntu 14.04.5 LTS
安裝PostgreSQL
PostgreSQL安裝需要更新PostgreSQL軟件版本
創建文件 /etc/apt/sources.list.d/pgdg.list
ubuntu 12.04
deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main
ubuntu 14.04
deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main
ubuntu 16.04
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
執行更新列表操作
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo apt-key add -
sudo apt-get update
安裝
sudo apt-get install postgresql-9.4 postgresql-contrib-9.4 postgresql-9.4-pgmp
切換postgresql內置管理員,創建testdb數據庫、testuser用戶
sudo su postgres
createuser testuser
createdb testdb
psql
安裝成功提示
psql (9.4.12)
Type "help" for help.
設置testuser密碼
將testdb 權限賦給testuser
ALTER USER testuser PASSWORD '****';
ALTER DATABASE testdb OWNER TO testuser;
GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;L
退出連接
\q
切換testuser連接testdb數據庫
psql -U testuser -d testdb -h 127.0.0.1 -p 5432
創建schema和數據表schema.infos
CREATE SCHEMA modules;
CREATE TABLE modules.infos( m_id SERIAL PRIMARY KEY , s_id INTEGER NOT NULL , m_info VARCHAR(80) NOT NULL , code INTEGER , remark VARCHAR(80) );
到此postgreSQL安裝完畢
安裝Postgrest
下載Postgrest 及安裝
sudo mkdir /opt/softwares
sudo mkdir /opt/modules
cd /opt/softwares/
sudo wget https://github.com/begriffs/postgrest/releases/download/v0.4.1.0/postgrest-0.4.1.0-ubuntu.tar.xz
sudo mkdir ../modules/postgrest
sudo tar -xvf postgrest-0.4.1.0-ubuntu.tar.xz -C ../modules/postgrest
sudo ../modules/postgrest/postgrest
執行之后看到提示
db-uri = "postgres://user:pass@localhost:5432/dbname"
db-schema = "public"
db-anon-role = "postgres"
db-pool = 10
表示配置成功,接下來配置配置文件
sudo mkdir /opt/modules/postgrest/conf
sudo vim /opt/modules/postgrest/conf/default.conf
配置文件內容為
# postgrest.conf
# The standard connection URI format, documented at
# https://www.postgresql.org/docs/current/static/libpq-connect.html#AEN45347
db-uri = "postgres://testuser:123@127.0.0.1:5432/testdb"
# The name of which database schema to expose to REST clients
db-schema = "modules"
# The database role to use when no client authentication is provided.
# Can (and probably should) differ from user in db-uri
db-anon-role = "testuser"
啟動postgrest用特定配置文件
sudo /opt/modules/postgrest/postgrest /opt/modules/postgrest/conf/default.conf
此時啟動,日志直接輸出,如果停止輸入則 進程停止。
調整后台運行及輸入到日志文件,日志文件應保存在當前用戶空間中
sudo nohup /opt/modules/postgrest/postgrest /opt/modules/postgrest/conf/default.conf>~/postgrest.log &
測試
Client/Postman請求
GET uri:3000 HTTP 1.1
結果如下
{
"swagger": "2.0",
"info":{
"version": "0.4.1.0",
"title": "PostgREST API",
"description": "This is a dynamic API generated by PostgREST"
},
"host": "0.0.0.0:3000",
"basePath": "/",
"schemes":[
"http"
],
"paths":{
"/":{
"get":{
"tags":["/"],
"produces":["application/openapi+json", "application/json"],
"responses":{"200":{"description": "OK" }}
}
},
"/infos":{"get":{"tags":["infos" ], "produces":["application/json", "application/vnd.pgrst.object+json",…}
},
"definitions":{
"infos":{
"properties":{"m_id":{"format": "integer", "type": "integer" }, "s_id":{"format": "integer",…},
"type": "object"
}
}
}
測試infos表
創建
POST uri/infos:3000 HTTP 1.1
BODY:
{
"s_id": 1,
"m_info": "test1",
"code": 1,
"remark": "remark1" }
Resposne:201 create
查詢
POST uri/infos:3000 HTTP 1.1
[
{
"m_id": 1,
"s_id": 1,
"m_info": "test1",
"code": 1,
"remark": "remark1" }
]
至此項目搭建測試完成。
參考:
PostgreSQL9.4官方Reference
PostgreSQL9.5.3中文文檔
PostgREST官方Reference