+4

What is PostgREST?

What is PostgREST?

Postgresql? trong số chúng ta có thể đã có nhiều người từng làm việc hoặc sử dụng hệ quản trị cơ sở dữ liệu này rồi, nhưng ở đây mình muốn nói tới một khái niệm khác: PostgREST?(mọi người đừng nhầm nhé 😃) PostgREST web server độc lập chuyển đổi trực tiếp cơ sở dữ liệu PostgreSQL của bạn thành một API RESTful.Các ràng buộc kết cấu và quyền trong cơ sở dữ liệu xác định các điểm cuối và hoạt động của API. Sử dụng PostgREST là việc thay thế cho lập trình CRUD thủ công.Tùy chỉnh API server gặp sự cố.Viết business logic thường lặp lại, bỏ qua cấu trúc cơ sở dữ liệu rắc rối.Ánh xạ Object-relational là một sự trừu tượng dẫn đến imperative code.Triết lý PostgREST thiết lập một tuyên bố chân lý duy nhất: "The data itself"

Get it Running

PostgREST phục vụ một API được tùy chỉnh dựa trên cấu trúc của cơ sở dữ liệu cơ bản.

Để tạo một API, chúng ta chỉ đơn giản là sẽ xây dựng một cơ sở dữ liệu.Tất cả các thiết bị đầu cuối và quyền truy cập đến từ các đối tượng cơ sở dữ liệu như tables, views, roles, và store procedures.Những hướng dẫn đây sẽ đề cập đến một số kịch bản phổ biến và cách mô hình chúng trong cơ sở dữ liệu. Vào cuối hướng dẫn này, bạn sẽ có một cơ sở dữ liệu làm việc ổn, server PostgREST và một API list người dùng đơn giản.

Step 1. Relax, we'll help

Để tiện cho việc tìm hiểu PostgREST bạn hoàn có thể join vào chatroom sau để thảo luận cũng như tìm kiếm sự giúp đỡ hoặc đưa ra những ý tưởng của bản thân trong Chatroom

Step 2. Install PostgreSQL

Bạn sẽ cần một bản copy mới nhất của cơ sở dữ liệu đang chạy trên hệ thống của bạn, hoặc là Docker instance chẳng hạn.Chúng ta cần PostgreSQL 9.3 trở lên, nhưng khuyên bạn nên sử dụng bản 9.5 đối với các tính năng bảo mật row-level mà chúng ta sẽ sử dụng trong hướng dẫn sắp tới. Nếu bạn đã quen thuộc với việc sử dụng PostgreSQL và cài đặt nó trên hệ thống, bạn có thể sử dụng bản cài đặt hiện có.Đối với hướng dẫn này, chúng ta sẽ mô tả cách sử dụng cơ sở dữ liệu trong Docker vì cấu hình cơ sở dữ liệu là quá phức tạp đối với một hướng dẫn đơn giản. Nếu Docker chưa được cài đặt, bạn có thể thao khảo rất nhiều bài viết về Docker.Tiếp theo, chúng ta hãy bắt đầu với cơ sở dữ liệu:

sudo docker run --name tutorial -p 5432:5432 \
                -e POSTGRES_PASSWORD=mysecretpassword \
                -d postgres

Thao tác này sẽ chạy Docker instance như một daemon và vạch ra cổng 5432 vào host system để nó trông giống như một máy chủ PostgreSQL thông thường cho phần còn lại của hệ thống.

Step 3. Install PostgREST

PostgREST làn một bản phân phối dưới dạng single binary, với các phiên bản được biên dịch cho các bản distributions chính của Linux / BSD / Windows.Truy cập list version để xem danh sách các bản tải xuống.Chúng ta hoàn toàn có thể cho họ biết nền tảng đang sử dụng để thêm nền tảng của họ trong phiên bản tiếp theo. Các tệp nhị phân được tạo sẵn được tải xuống là tệp nén .tar.xz (ngoại trừ Windows là tệp zip). Để extract nhị phân, sử dụng terminal để chạy:

# download from https://github.com/begriffs/postgrest/releases/latest

tar xfJ postgrest-<version>-<platform>.tar.xz

Kết quả sẽ là một tệp có tên là postgrest (hoặc postgrest.exe trên Windows).Tại thời điểm này hãy thử chạy nó với:

./postgrest

Nếu mọi thứ hoạt động bình thường, nó sẽ show ra phiên bản và thông tin về cấu hình.Bạn có thể tiếp tục run nhị phân từ nơi bạn tải về nó, hoặc sao chép nó vào một thư mục hệ thống như /usr/local/bin trên Linux để bạn có thể chạy nó từ bất kỳ thư mục nào. Lưu ý: PostgREST yêu cầu libpq, thư viện PostgreSQL C, được cài đặt trên hệ thống của bạn.Nếu không có thư viện, bạn sẽ nhận được một lỗi như sau: "error while loading shared libraries: libpq.so.5.".Dưới đây là cách khắc phục: Ubuntu or Debian

sudo apt-get install libpq-dev

Fedora, CentOS, or Red Hat

sudo yum install postgresql-libs

OS X

brew install postgresql

Windows Xem cách giải quyết trên stackoverflow

Step 4. Create Database for API

Kết nối với SQL console (psql) bên trong container.Để làm như vậy, chạy nó từ dòng lệnh của bạn:

sudo docker exec -it tutorial psql -U postgres

Bạn sẽ thấy psql command prompt:

psql (9.6.3)
Type "help" for help.

postgres=#

Điều đầu tiên chúng ta sẽ làm là tạo một schema được đặt tên cho các đối tượng cơ sở dữ liệu sẽ được hiển thị trong API.Chúng ta có thể chọn bất kỳ tên nào chúng ta thích, vậy còn "api" như thế nào.Thực hiện điều này và các câu lệnh SQL khác bên trong dấu nhắc lệnh psql bạn đã bắt đầu.

create schema api;

API của chúng ta sẽ có một endpoint, /todos đến từ một bảng.

create table api.todos (
  id serial primary key,
  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');

Tiếp theo tạo một role để sử dụng cho các anonymous web requests.Khi có yêu cầu, PostgREST sẽ chuyển sang vai trò này trong cơ sở dữ liệu để tạo truy vấn.

create role web_anon nologin;
grant web_anon to postgres;

grant usage on schema api to web_anon;
grant select on api.todos to web_anon;

web_anon có quyền truy cập mọi thứ trong api schema và đọc các hàng trong bảng todos. Và tiếp theo là quit psql, đây là lúc để start API!

\q

Step 5. Run PostgREST

PostgREST sử dụng một configuration file để cho biết cách kết nối với cơ sở dữ liệu.Tạo một file hướng dẫn .conf như sau:

db-uri = "postgres://postgres:mysecretpassword@localhost/postgres"
db-schema = "api"
db-anon-role = "web_anon"

Configuration file còn có các phần khác tuy nhiên đó là tất cả những gì chúng ta cần.Và bây giờ hãy start server và quẩy lên nào:

./postgrest tutorial.conf

Bạn sẽ thấy như sau:

Listening on port 3000
Attempting to connect to the database...
Connection successful

Mọi thứ đã sẵn sàng để phục vụ các web requests.Có rất nhiều công cụ khám phá API đồ họa đẹp mà bạn có thể sử dụng, nhưng cho hướng dẫn này, chúng ta sẽ sử dụng curl vì nó có thể sẽ được cài đặt trên hệ thống của bạn.Mở một terminal mới (để lại tab mà PostgREST đang chạy bên trong).Hãy thử tạo một HTTP request cho todos.

curl http://localhost:3000/todos

API replies:

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

Với current role permissions, các anonymous requests chỉ được quyền đọc vào bảng todos.Nếu chúng ta cố gắng add thêm một todo mới thì chúng ta không thể.

curl http://localhost:3000/todos -X POST \
     -H "Content-Type: application/json" \
     -d '{"task": "do bad thing"}'

Response là 401 Unauthorized:

{
  "hint": null,
  "details": null,
  "code": "42501",
  "message": "permission denied for relation todos"
}

Trên đây chúng ta đã có một API cơ bản trên cơ sở dữ liệu.Trong các hướng dẫn tiếp theo, chúng ta sẽ thấy làm thế nào để mở rộng ví dụ với các điều khiển truy cập người dùng phức tạp hơn, và nhiều bảng và truy vấn hơn. Thao khảo: https://postgrest.com/en/v4.1/intro.html#


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.