RESTful API를 이용하여 PostgreSQL 연계
PostgreSQL
- The PostgreSQL Global Development Group에서 개발하는 오픈 소스 ORDBMS. 1996년에 첫 출시되었다. 처음에는 BSD 라이선스였으나 언제부터인가 MIT 라이선스 비스무리한 독자적 라이선스[1]를 따르기 시작했다. 발음은 '포스트그레스큐엘'이라고 한다[나무위키 : https://namu.wiki/w/PostgreSQL]
REST API
- Rest 기반으로 컴퓨터 프로그램간의 상호 작용을 가능하게 하고 정보를 교환하게 구현한 어플리케이션
PostgreSQL과 REST API 구현
- 좀더 쉽게 REST API를 구현하기 위해 오픈소스를 참고
1. PostgREST(18000 star), https://github.com/PostgREST
2. pREST(3008 star), https://github.com/prest
prest
pREST (PostgreSQL REST), low-code, simplify and accelerate development, ⚡ instant, realtime, high-performance on any Postgres application, existing or new - prest
github.com
PostgREST
PostgREST has 3 repositories available. Follow their code on GitHub.
github.com
준비 사항
- ubuntu
- docker
- postgresql docker image
PostgreSQL 및 PostgREST 설치
# PostgreSQL 설치
sudo docker run --name tutorial -p 5433:5432 \
-e POSTGRES_PASSWORD=mysecretpassword \
-d postgres
# postgREST 다운로드 및 설치
# download from https://github.com/PostgREST/postgrest/releases/latest
wget https://github.com/PostgREST/postgrest/releases/download/v9.0.0/postgrest-v9.0.0-linux-static-x64.tar.xz
tar xJf postgrest-v9.0.0-linux-static-x64.tar.xz
./postgrest
API용 데이터 베이스 생성
-- psql (9.6.3)
-- Type "help" for help.
-- 명령 프롬프트 생성
-- postgres=#
-- 스키마 생성
create schema api;
-- todo 테이블 생성
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');
-- 익명 웹 요청 사용 역할 생성
create role web_anon nologin;
grant usage on schema api to web_anon;
grant select on api.todos to web_anon;
-- postgres 대신 데이터베이스 연결을 위한 전용 역할 생성
create role authenticator noinherit login password 'mysecretpassword';
grant web_anon to authenticator;
-- 종료
-- \q
PostgREST 실행
# 환경 설정 파일 생성
touch tutorial.conf
vi tutorial.conf
# 파일 안에는 접속 정보
db-uri = "postgres://authenticator:mysecretpassword@localhost:5433/postgres"
db-schema = "api"
db-anon-role = "web_anon"
# 실행
./postgrest tutorial.conf
테스트
# get 요청 테스트
curl http://localhost:3000/todos
# post 요청 테스트
# 권한 없음이 나와야 정상임
curl http://localhost:3000/todos -X POST \
-H "Content-Type: application/json" \
-d '{"task": "do bad thing"}'