# 一個 PostgreSQL 搞定 CRUD - PostgREST 各位 backend engineer 對於 CRUD 的粗活肯定都是非常的熟悉,雖然只是一件非常簡單的事情,但每次要做起來卻還是令人十分痛苦。 如果我們今天要以 Java Spring Boot + PostgreSQL 來寫一個最最陽春的會員系統,並且上線給大家都可以使用,就會需要以下的粗活。 - Init Sprint Boot Project - Init PostgreSQL Server - Create "user" Table - Use Sprint Data JPA Write CRUD.... - Deploy Spring Boot Application 光想到我就已經想要放棄了 ## 可不可以簡單一點  沒錯,光是看到這張圖,我想聰明的大家已經想到我想要幹什麼了,光是從字面上看,就知道這是一個融合了 PostgreSQL + RESTful API 的偉大產物。 如果...如果你可以只把 PostgreSQL 架起來,把表寫好,接著就有現成的 CRUD REST API 可以使用,豈不妙哉!對於一個 Side Project 來說正是一個神器。 ## 但我連 PostgreSQL Server 都沒有 這邊介紹另一個服務 [supabase](https://github.com/supabase/supabase/blob/master/i18n/README.zh-tw.md) >Supabase 是 Firebase 的開放原始碼替代方案。我們以企業等級的開放原始碼工具,打造 Firebase 的功能。 提供你一個非常親切的免費方案去使用 PostgreSQL,而且裡面就有 PostgREST 可以使用  ## 那,我們就上囉! 一開始免不了,就是設定專案名稱,還有資料庫的密碼,選擇一下 Region。  建立好之後會需要等待一段時間,會看到有一個 `Setting up project`  這邊我們來新建一張 table  既然是一個會員登入系統,那就來張 user table 吧!  接著到我們的 setting page 找到下面這三樣資訊 1. URL 2. anon (which is safe to be used in a browser context.) 3. service_role (which should only be used on a server. This key can bypass Row Level Security. NEVER use this key in a browser)  切換到左下角第二個選項 API Docs,我們就可以在 `Tables and Views` 這邊看到 `user` table,右手邊就是對應 JavaScript 或者是 curl 的操作指令。  ## 拋棄那些浪費生命的簡單 CRUD Web Application 吧 這是我們一般想要新增一個使用者,會使用到的 SQL,寫起來也是很煩,還要開 API Endpoint 出去給前端串接。 ```sql insert into "user" (name) values ('timm'); ``` 不過在 PostgREST 的幫助之下,我們 table 建立好的時候,這些簡單的 CRUD 都已經準備好,我們根本不需要自己去寫那些 Entity, Repository, Controller,更別說還得要部署上去雲端了。 下方範例都**請記得替換 {service_role}** 透過 API 新增一位使用者的資料 ```bash curl --location --request POST 'https://pebbcfmmpazuuuoeujxq.supabase.co/rest/v1/user' \ --header 'apikey: {service_role}' \ --header 'Authorization: Bearer {service_role}' \ --header 'Content-Type: application/json' \ --header 'Prefer: return=representation' \ --data-raw '{ "name": "timm"}' ``` response ```json [ { "id": 1, "name": "timm", "created_at": "2022-11-24T14:22:43.167883+00:00" } ] ``` 透過 API 取得全部使用者的資料 ```bash curl --location --request GET 'https://pebbcfmmpazuuuoeujxq.supabase.co/rest/v1/user?select=*' \ --header 'apikey: {service_role}' \ --header 'Authorization: Bearer {service_role}' ``` response ```json [ { "id": 1, "name": "timm", "created_at": "2022-11-24T14:22:43.167883+00:00" } ] ``` 看到這邊,其實只是 PostgREST 的一角,如果你有個 Side Project 只是需要非常簡單的 CRUD ,不妨可以考慮透過這樣的方式去跟資料庫做互動吧!
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up