【Supabase 教學】#01 什麼是 Supabase?從 PostgreSQL 到 BaaS

測驗:什麼是 Supabase?從 PostgreSQL 到 BaaS

共 5 題,點選答案後會立即顯示結果

1. BaaS(Backend as a Service)的主要目的是什麼?

  • A. 取代前端開發工作
  • B. 把後端服務打包好,讓開發者專注前端
  • C. 提供免費的雲端運算資源
  • D. 自動產生前端使用者介面

2. Supabase 使用哪種資料庫?

  • A. MongoDB
  • B. Firestore
  • C. PostgreSQL
  • D. MySQL

3. 比較 Supabase 和 Firebase,下列哪個敘述是正確的?

  • A. Firebase 是開源的,Supabase 不是
  • B. Supabase 使用 NoSQL 資料庫
  • C. Firebase 原生支援 SQL JOIN 查詢
  • D. Supabase 是開源的,可以自架

4. 在 Supabase Dashboard 中,哪個功能最適合用來視覺化管理資料表?

  • A. Table Editor
  • B. SQL Editor
  • C. API Docs
  • D. Edge Functions

5. Supabase 的 Realtime 功能適合用於什麼情境?

  • A. 批次匯入大量歷史資料
  • B. 聊天室、協作工具、即時儀表板
  • C. 定期備份資料庫
  • D. 壓縮圖片檔案

一句話說明

Supabase 是開源的 Firebase 替代方案,讓你用 PostgreSQL 快速建後端。


這篇文章要解決什麼問題?

你想做一個有會員系統、能存資料、能上傳檔案的應用程式。傳統做法是:

  1. 架一台伺服器
  2. 裝資料庫
  3. 寫 API
  4. 做登入系統
  5. 設定檔案儲存

這些事情加起來可能比你的核心功能還要花時間。

BaaS(Backend as a Service)就是解決這個問題的——把後端服務打包好給你用,你只要專注寫前端。


Supabase 是什麼?

Supabase = PostgreSQL 資料庫 + 自動 API + 登入系統 + 檔案儲存 + 即時同步

翻譯成白話:

你需要的功能 Supabase 提供的
存資料 PostgreSQL 資料庫
讀寫 API 自動產生的 REST / GraphQL API
會員登入 Auth(支援 Email、Google、GitHub 等)
上傳檔案 Storage
即時更新 Realtime(資料變動自動推播)
自訂邏輯 Edge Functions(TypeScript 函式)

Supabase vs Firebase:一張表看懂差異

如果你聽過 Firebase,這張表幫你快速理解 Supabase 的定位:

比較項目 Supabase Firebase
資料庫類型 SQL(PostgreSQL) NoSQL(Firestore)
開源 (可自架) 否(只能用 Google 雲端)
資料關聯 原生支援 JOIN 需要手動處理
收費方式 按儲存空間計費 按讀寫次數計費
遷移難度 低(標準 PostgreSQL) 高(專有格式)
適合場景 結構化資料、複雜查詢 快速原型、即時同步

什麼時候選 Supabase?

  • 你的資料有關聯性(例如:使用者有多筆訂單)
  • 你想用 SQL 查詢
  • 你不想被特定廠商綁住
  • 你可能需要自架(self-host)

什麼時候選 Firebase?

  • 你需要快速做原型
  • 資料結構簡單、常變動
  • 你已經在 Google 生態系裡

Supabase 核心功能速覽

1. Database:PostgreSQL 資料庫

-- 建立一個 todos 資料表
create table todos (
  id serial primary key,
  task text not null,
  is_done boolean default false,
  created_at timestamp default now()
);
Code language: JavaScript (javascript)

這段在幹嘛:建一個待辦事項表,有自動編號的 id、任務內容、完成狀態、建立時間。

Supabase 會自動幫這個表產生 REST API,你不用再寫後端程式。


2. Auth:登入系統

// 用 Email 註冊
const { data, error } = await supabase.auth.signUp({
  email: '[email protected]',
  password: 'password123'
})
Code language: JavaScript (javascript)

這段在幹嘛:呼叫 Supabase 的註冊 API,傳入 email 和密碼,自動處理帳號建立。

支援的登入方式:

  • Email / 密碼
  • Magic Link(免密碼,寄連結登入)
  • OAuth(Google、GitHub、Discord 等)
  • 手機簡訊

3. Storage:檔案儲存

// 上傳檔案到 avatars bucket
const { data, error } = await supabase.storage
  .from('avatars')
  .upload('user1/profile.png', file)
Code language: JavaScript (javascript)

這段在幹嘛:把檔案上傳到名為 avatars 的儲存桶,路徑是 user1/profile.png


4. Edge Functions:自訂邏輯

// supabase/functions/hello/index.ts
Deno.serve(async (req) => {
  const { name } = await req.json()
  return new Response(
    JSON.stringify({ message: `Hello ${name}!` }),
    { headers: { 'Content-Type': 'application/json' } }
  )
})
Code language: JavaScript (javascript)

這段在幹嘛:建立一個 API 端點,接收 JSON 裡的 name,回傳打招呼訊息。

Edge Functions 用 Deno(TypeScript)執行,適合放自訂邏輯。


5. Realtime:即時同步

// 監聽 todos 表的變動
const subscription = supabase
  .channel('todos-changes')
  .on('postgres_changes',
    { event: '*', schema: 'public', table: 'todos' },
    (payload) => {
      console.log('資料變動:', payload)
    }
  )
  .subscribe()
Code language: JavaScript (javascript)

這段在幹嘛:訂閱 todos 表的所有變動(新增、修改、刪除),有變動時自動收到通知。

適合做聊天室、協作工具、即時儀表板。


建立第一個 Supabase 專案

步驟 1:註冊帳號

前往 supabase.com,用 GitHub 或 Email 註冊。

步驟 2:建立新專案

  1. 點擊「New Project」
  2. 選擇組織(Organization)
  3. 填寫專案名稱
  4. 設定資料庫密碼(重要!記下來)
  5. 選擇地區(建議選離使用者近的)

等待約 2 分鐘,專案就建好了。

步驟 3:取得連線資訊

在專案設定(Settings > API)可以找到:

項目 用途
Project URL 你的專案網址,呼叫 API 用
anon key 公開金鑰,前端用
service_role key 私密金鑰,後端用(不要外洩!)

Supabase Dashboard 導覽

建好專案後,Dashboard 左側選單是這樣的:

選單項目 功能說明
Table Editor 視覺化管理資料表,類似 Excel
SQL Editor 直接寫 SQL 執行
Database 資料庫設定、備份、連線池
Authentication 管理使用者、設定登入方式
Storage 管理檔案儲存桶
Edge Functions 管理和部署 TypeScript 函式
Realtime 即時同步設定
API Docs 自動產生的 API 文件

Vibe Coder 重點

Table Editor 是你最常用的——可以直接在網頁上新增資料表、欄位、資料,不用寫 SQL。

SQL Editor 有 AI 輔助功能,可以用自然語言產生 SQL。


本系列文章預覽

這是 Supabase 系列的第一篇,後續文章會帶你:

篇數 主題 你會學到
#02 資料庫操作 CRUD、RLS 權限控制
#03 身份驗證 登入註冊、OAuth、保護路由
#04 儲存與即時 檔案上傳、即時同步實作
#05 實戰整合 完整專案範例

Vibe Coder 檢查點

開始使用 Supabase 時,確認這些事:

  • [ ] 有沒有記下資料庫密碼?(忘記只能重設)
  • [ ] anon key 和 service_role key 分清楚了嗎?
  • [ ] 知道自己的專案 URL 在哪裡找嗎?
  • [ ] 資料需要關聯性嗎?(需要就選 Supabase)

延伸:知道就好

這些進階功能,遇到再查:

  • Row Level Security(RLS):資料庫層級的權限控制,下一篇會教
  • Database Webhooks:資料變動時自動呼叫外部 API
  • Postgres Extensions:擴充功能,例如全文搜尋、向量搜尋
  • Branching:類似 Git,建立資料庫分支做測試

小結

概念 一句話理解
BaaS 後端打包成服務,你不用自己架
Supabase 開源的 Firebase 替代方案,用 PostgreSQL
為什麼選 Supabase 資料有關聯、想用 SQL、不想被綁住
Dashboard 視覺化管理工具,Table Editor 最常用

下一篇我們會實際操作資料庫——建表、寫資料、設定權限。


參考資源

進階測驗:什麼是 Supabase?從 PostgreSQL 到 BaaS

測驗目標:驗證你是否能在實際情境中應用所學。
共 5 題,包含情境題與錯誤診斷題。

1. 選擇適合的後端服務 情境題

你正在開發一個電商網站,需要處理使用者、商品、訂單之間的關聯資料。你希望能使用 SQL 查詢來取得「某使用者的所有訂單及訂單內的商品」。你也希望未來如果需要,可以將服務搬到自己的伺服器上。

這種情況下,你應該選擇哪個後端服務?

  • A. Firebase,因為它的即時同步功能更成熟
  • B. Supabase,因為它使用 PostgreSQL 且可以自架
  • C. 兩者都可以,差別不大
  • D. Firebase,因為它的 NoSQL 更適合電商

2. 選擇正確的金鑰 情境題

你正在開發一個 React 前端應用程式,需要連接到 Supabase。在專案設定的 API 頁面中,你看到了 anon keyservice_role key 兩個金鑰。

你應該在前端程式碼中使用哪個金鑰?

  • A. anon key,因為它是公開金鑰,設計給前端使用
  • B. service_role key,因為它權限較大,功能較完整
  • C. 兩個都可以,看個人習慣
  • D. 不需要金鑰,Supabase 會自動驗證

3. 實作即時協作功能 情境題

你正在開發一個線上協作白板應用程式,需要讓多個使用者同時編輯,並即時看到其他人的修改。

你應該使用 Supabase 的哪個功能來實現這個需求?

  • A. Edge Functions,用來處理即時邏輯
  • B. Storage,用來儲存白板內容
  • C. Realtime,訂閱資料表變動並自動推播
  • D. Auth,確保只有登入使用者能編輯

4. 診斷檔案上傳問題 錯誤診斷

小明想要上傳使用者頭像到 Supabase Storage,寫了以下程式碼:
const { data, error } = await supabase.storage .from(‘user-avatars’) .upload(‘profile.png’, file)

上傳失敗,錯誤訊息顯示「Bucket not found」。最可能的原因是什麼?

  • A. 檔案格式不支援 PNG
  • B. 名為「user-avatars」的儲存桶尚未在 Supabase Dashboard 建立
  • C. 檔案路徑應該包含使用者 ID
  • D. 需要先呼叫 auth.signIn() 登入

5. 診斷 API 金鑰外洩風險 錯誤診斷

小華在開發後端 API 時,為了方便測試,把程式碼推到公開的 GitHub 儲存庫:
// server.js const supabase = createClient( ‘https://xxx.supabase.co’, ‘eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…’ // service_role key )

這段程式碼有什麼安全問題?

  • A. 沒有問題,這是正常的後端程式碼
  • B. 應該使用 anon key 而不是 service_role key
  • C. service_role key 是私密金鑰,不應該外洩到公開儲存庫
  • D. Project URL 不應該寫死在程式碼中

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *