Supabase: Firebase Open Source Alternatif Database | Ilmu Komputer

Supabase: Firebase Open Source Alternatif Database | Ilmu Komputer

Supabase telah menjadi alternatif open-source paling populer untuk Firebase. Dengan basis PostgreSQL yang powerful, Supabase menawarkan database, autentikasi, storage, dan edge functions dalam satu platform.

Apa itu Supabase?

Supabase adalah platform backend-as-a-service (BaaS) open-source yang menggunakan PostgreSQL sebagai database utamanya. Didirikan pada 2020, Supabase kini digunakan oleh lebih dari 1 juta developer di seluruh dunia.

Perbandingan Supabase vs Firebase

  • Database — Supabase: PostgreSQL (relasional) vs Firebase: Firestore (NoSQL)
  • Open Source — Supabase: ✅ ya vs Firebase: ❌ proprietary
  • Self-hosted — Supabase: ✅ bisa di-host sendiri vs Firebase: ❌ cloud only
  • SQL — Supabase: ✅ SQL full power vs Firebase: ❌ limited queries
  • Realtime — Supabase: ✅ via WebSocket vs Firebase: ✅ via WebSocket

Setup Supabase

# Install CLI
npm install -g supabase
supabase init
supabase start  # local development

Contoh Query

import { createClient } from '@supabase/supabase-js'

const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY)

// SELECT
const { data: users } = await supabase
    .from('users')
    .select('*')
    .eq('status', 'aktif')
    .order('created_at', { ascending: false })

// INSERT
const { data, error } = await supabase
    .from('artikel')
    .insert({ judul: 'Belajar Supabase', views: 0 })

// REALTIME
const subscription = supabase
    .channel('public:artikel')
    .on('postgres_changes', 
        { event: 'INSERT', schema: 'public' },
        (payload) => console.log('Artikel baru:', payload)
    )
    .subscribe()

Row Level Security (RLS)

-- Aktifkan RLS
ALTER TABLE artikel ENABLE ROW LEVEL SECURITY;

-- Policy: user hanya bisa lihat artikel sendiri
CREATE POLICY "user_artikel" ON artikel
FOR SELECT USING (auth.uid() = user_id);

-- Policy: siapa pun bisa lihat artikel publik
CREATE POLICY "publik_artikel" ON artikel
FOR SELECT USING (status = 'publik');
Iklan

Iklan
Iklan

Iklan
Iklan

Iklan
Iklan