【PostgREST 基本教程(一)】 PostgREST快速搭建

摘要:
PostgREST基本教程PostgREST是一个稳定的web服务,可以直接向PostgreSQL数据库提供RESTful API。数据库结构和约束决定了API的端点和操作。使用PostgREST可以取代手动CRUD开发。定制API服务经常遇到许多问题。PostgREST的核心思想是基于数据的。PostgREST技术优势声明式编程依赖PostgreSQL自动实现条件查询和访问控制。本文揭示了分层数据库和嵌套http路由之间惊人的相似性。使用PostgREST,我们尝试使用灵活的过滤和嵌入,而不是嵌套路由。
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以上)

PostgREST 0.4.1.0

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

免责声明:文章转载自《【PostgREST 基本教程(一)】 PostgREST快速搭建》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MD5算法的c++实现tmpfs详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转载)数据库表分割技术浅析(水平分割/垂直分割/库表散列)

一、数据库表分割技术   数据库表分割技术包含以下内容: 水平分割 垂直分割 库表散列 1.1、水平分割   什么是水平分割?打个比较形象的比喻,在食堂吃饭的时候,只有一个窗口,排队打饭的队伍太长了,都排成S型了,这时容易让排队的人产生焦虑情绪,容易产生混 乱,这时一个管理者站出来,增加多个打饭窗口,把那条长长的队伍拦腰截断成几队。更形象一点的理解,你...

mysql8.0只能本地连接解决方法

最近,在安装好新版本的mysql后,使用java程序连接出现几个问题,首先是数据库连接url的问题,新的连接url需要加上时区这个参数,例如: jdbc:mysql://127.0.0.1:3306/localmysql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/...

Oracle11g备份与恢复

第一部分:手工备份与恢复   备份的意义:保证数据安全,避免因为各种故障而丢失数据     两个时间:平均故障间隔时间(MTBF)平均恢复时间(MTTR) 一、备份恢复概述   数据库故障类型     1.用户进程故障 user process failure  :pmon自动处理     2.实例故障 instance failure : smon自动处...

scrapy爬虫成长日记之将抓取内容写入mysql数据库

前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的。这很显然不满足我们日常的实际应用,接下来看下如何将抓取的内容保存在常见的mysql数据库中吧。 说明:所有的操作都是在“scrapy爬虫成长日记之创建工程-抽取数据-保存为j...

Django根据数据库表反向生成models

一.反向生成model执行以下命令: python  manage.py  inspectdb 二.将model导入到相应的App的model.py文件里执行以下命令: python manage.py inspectdb > App/models.py  ...

利用JDBC连接Oracle数据库(转)

http://blog.csdn.net/wahaha1_/article/details/8512438 JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术。 一、JDBC基础知识 JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问...