ข้ามไปยังเนื้อหา

Supabase คืออะไร

Supabase คือ Backend as a Service แบบ open-source ที่สร้างรอบ database Postgres จริงที่ไม่ได้ถูกดัดแปลง — คุณได้ auto-generated API, auth, storage และ realtime มาให้ฟรี แต่แกนกลางยังคงเป็น Postgres ธรรมดาที่ query ด้วย SQL ตรง ๆ ได้ตลอดเวลา

ถ้าคุณสร้าง backend เองตั้งแต่ศูนย์ สุดท้ายคุณจะต้องเขียน authentication service, query API แบบใดแบบหนึ่ง, realtime layer สำหรับ push update สด ๆ และ file storage service เอง — ทั้งหมดนี้วางอยู่บน database ที่คุณเลือก แนวคิดของ Supabase คือให้ทุกอย่างนี้มาสร้างเสร็จแล้ว เชื่อมต่อกันแล้ว และรันอยู่บน database ที่คุณเป็นเจ้าของเต็มตัวและ query ตรงได้เสมอ

จุดหลังนี้แหละคือความต่างสำคัญจาก Firebase Firestore ของ Firebase เป็น NoSQL document store แบบ proprietary ไม่มี schema ตายตัว data model และ query ของคุณถูกล็อกไว้กับ shape API เฉพาะของ Firebase ไม่มีทาง escape ไปใช้ SQL ได้เลย Supabase เดิมพันตรงกันข้าม database เป็น Postgres มาตรฐาน ดังนั้น

  • คุณต่อด้วย psql, Postgres driver ตัวไหนก็ได้ หรือ ORM ที่คุยกับ Postgres ได้
  • schema ของคุณคือ table แบบ relational, foreign key และ constraint — ไม่ใช่ document shape ที่ซ่อนอยู่
  • ถ้าวันหนึ่งอยากเลิกใช้ Supabase คุณ pg_dump database ออกมารันที่ไหนก็ได้ที่รัน Postgres
-- This is just Postgres. No proprietary query language, no vendor-specific data model.
select id, username, created_at
from public.profiles
where created_at > now() - interval '7 days'
order by created_at desc;

หนึ่ง Supabase project คือ Postgres database หนึ่งตัว บวก service ห่อรอบอีกชั้น แต่ละตัวจะมี module ของตัวเองในคอร์สนี้ ตอนนี้เก็บไว้แค่เป็นแผนที่ orientation ยังไม่ต้องลงลึก

  • Postgres database — ที่เก็บข้อมูลจริง SQL ธรรมดา feature relational เต็มรูปแบบ
  • Auto-generated API — REST/RPC API ผ่าน PostgREST และ GraphQL API ผ่าน pg_graphql สร้างขึ้นตรงจาก schema ของคุณ
  • Auth (GoTrue) — สมัครสมาชิก, sign-in, จัดการ session และ social/SSO provider
  • Storage — object store แบบ S3-compatible สำหรับไฟล์ มี access policy ของตัวเอง
  • Realtime — subscribe การเปลี่ยนแปลงใน database หรือใช้ broadcast/presence channel แบบ ephemeral ผ่าน WebSocket
  • Edge Functions — logic ฝั่ง server ที่เขียนเองด้วย TypeScript รันบน Deno ที่ edge

ทั้งหมดนี้ตั้งค่าได้จาก dashboard Supabase Studio (GUI บนเว็บ) หรือจาก Supabase CLI ซึ่งคุณจะได้ setup ในบทถัดไป

import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
process.env.SUPABASE_URL!,
process.env.SUPABASE_ANON_KEY!
);
// Under the hood this is a PostgREST request against the profiles table.
const { data, error } = await supabase
.from('profiles')
.select('id, username, created_at')
.order('created_at', { ascending: false });
flowchart TB
  pg[("Postgres database")]
  api["REST/RPC API (PostgREST) + GraphQL (pg_graphql)"]
  auth["Auth (GoTrue)"]
  storage["Storage"]
  realtime["Realtime"]
  functions["Edge Functions (Deno)"]
  api --> pg
  auth --> pg
  storage --> pg
  realtime --> pg
  functions --> pg
Postgres database หนึ่งตัว พร้อม service ห่อรอบ

ไม่มีอะไรตรงนี้ที่เป็นเวทมนตร์ที่คุณสร้างเองไม่ได้ — PostgREST, GoTrue และตัวอื่น ๆ ล้วนเป็น open-source project ที่ self-host แยกเองได้ สิ่งที่ Supabase ประหยัดให้จริง ๆ คืองาน integration หนึ่ง project, credential ชุดเดียว, dashboard เดียว และ service ที่รู้วิธีคุยกันเองและคุยกับ Postgres instance เดียวกันอยู่แล้ว คุณยังคงต้องเขียน schema, SQL และ access rule เอง — Supabase แค่เอา plumbing รอบ ๆ ออกไปให้

Supabase สร้างขึ้นบนอะไรเป็นแกนหลัก
Supabase ต่างจาก Firebase ในแง่ data model ยังไง
ข้อไหน NOT ใช่ service หลักที่มากับ Supabase project
ตั้งค่าและจัดการ service ต่าง ๆ ใน Supabase project ได้จากที่ไหน