Superbase: Найкращий Друг Розробника, Якого Ви Заслужили (Або, як Створити Backend за Кілька Хвилин)
Привіт, колеги-гіки! Ваш улюблений друг з тех-спільноти, Кейсі Байт, знову з вами, щоб розібрати щось дійсно круте. Сьогодні ми заглибимося у світ Superbase – революцію в розробці, яка може змінити ваше уявлення про бекенди. Якщо ви втомилися від Firebase і прагнете чогось більш гнучкого, потужного та, звісно, з підтримкою SQL, то готуйтеся закохатися. 💖
Superbase: Firebase на Стероїдах?
По суті, Superbase – це Backend-as-a-Service (BaaS), тобто бекенд як послуга. Забудьте про складні налаштування серверів, боротьбу з базами даних та всі ті headaches, що з ними пов’язані. Superbase дозволяє створювати повноцінні бекенди практично одним кліком. Головні фішки:
- PostgreSQL: Якщо ви шанувальник надійності та потужності PostgreSQL (а хто ж не), то у вас буде чим порадіти. Superbase побудований саме на цій базі даних, даючи вам всі її переваги.
- Авторизація: Вбудована система автентифікації – легко та без зайвого клопоту. Підтримка різних провайдерів (Google, GitHub, LinkedIn та інших) вже “з коробки”.
- Зберігання: Все просто та зрозуміло, як у S3, лише з дружнім інтерфейсом.
- Функції Edge (Dino): Хочете запустити якийсь динамічний код на бекенді? Без проблем!
- Реальний час: Підписка на події в базі даних – і ваші дані оновлюються миттєво.
- Генерація коду: Маєте таблицю? Хочете взаємодіяти з нею через SDK? Superbase генерує код для вас (для фронтенду також!).
- Вебхуки: Створюйте інтеграції та реакції на події в базі даних.
З чого почати: Ваш Шлях до Супер-Беку
- Реєстрація: Go to superbase.com та створіть безкоштовний акаунт.
- Створення проекту: Натисніть “Start your project” та виберіть ім’я для вашого проекту.
- Пароль для бази даних: Згенеруйте сильний пароль та збережіть його. Це дуже важливо!
- Регіон: Виберіть регіон, де буде розташований ваш бекенд (наприклад, North Virginia).
- План: Почніть з безкоштовного плану (до 500 МБ бази даних та 1 ГБ пам’яті). Для більших потреб є платні плани, але безкоштовного плану буде достатньо для експериментів та невеликих проектів.
Розбираємось з інтерфейсом та основними функціми
Після створення проекту ви потрапляєте в дашборд, де є:
- Table Editor: Створюємо таблиці.
- SQL Editor: Пишемо SQL-запити (якщо ви гуру SQL).
- Database: Тут все, що стосується бази: таблиці, тригери, функції, розширення.
- Authentication: Управління користувачами, налаштування входів і виходів.
- Storage: Файлове сховище, як у S3.
- Edge Functions: серверне виконання коду.
- Reports: Аналітика вашого бекенду.
- Logs: Логи всіх дій.
- API Docs: Документація з кодом для SDK (дуже зручно!).
- Project Settings: Налаштування проекту, API ключі, тощо.
Створюємо таблиці: Ваш перший крок
- Перейдіть в Table Editor та натисніть “Create a new table”.
- Дайте назву таблиці (наприклад,
users
, ім’я має бути у snake_case). - У розділі “Enable row level security” (RLS) ставимо галочку.
- Вказуємо модель даних (колонки та їх типи):
id
(uuid, primary key)created_at
(timestamp, default – now())email
(text, unique, not null)
- Натискаємо “Save”.
RLS: Захищаємо ваші дані (Row Level Security)
RLS дозволяє контролювати доступ до даних на рівні рядків. Це означає, що ви можете вказати, які дані бачитиме кожен користувач.
- У Table Editor перейдіть до вашої таблиці (наприклад,
users
). - Відкрийте “Authentication” в меню.
- Натисніть “Policies”.
- Виберіть потрібну операцію (SELECT, INSERT, UPDATE, DELETE).
- Виберіть потрібну роль (анонімний користувач, аутентифікований користувач, тощо).
- Напишіть SQL-вираз для фільтрації рядків.
Оdd.id == user_id
(наприклад, якщо хочете, щоб користувач бачив тільки свої дані).
Важливо: якщо ви не налаштуєте RLS, ваші дані можуть бути відкриті!
Щоб надати доступ до інформації для всіх, можна використати таку політику:
CREATE POLICY "Enable select for everyone" ON "public"."users" FOR SELECT USING (true);
Завжди пам’ятайте, що безпека – це важливо! 🔐
Авторизація: Додаємо вхід у ваше рішення
Superbase пропонує вбудовану систему автентифікації.
- У розділі “Authentication” ви знайдете:
- Список користувачів.
- Кнопку “Invite”, щоб запросити нових користувачів.
- Можливість налаштувати автентифікацію за допомогою різних провайдерів (Google, GitHub, тощо) – досить просто, вам потрібно лише зареєструвати додаток у провайдері та отримати ключі.
- Використовуйте SDK Superbase у своєму фронтенд-додатку (є документація для JavaScript, React, Vue, Flutter та інших фреймворків).
- Для входу використовуйте методи
auth.signInWithPassword()
абоauth.signInWithOAuth()
. - Завжди пам’ятайте про обробку помилок.
Обробка забутого паролю
- Створіть сторінку для відновлення паролю у вашому фронтенді.
- Використовуйте функцію
auth.resetPasswordForEmail()
з SDK Superbase. - Налаштуйте шаблон електронного листа для відновлення паролю у розділі “Authentication -> Email Templates -> Reset password”.
- Вкажіть у шаблоні, перехід на сторінку для відновлення – ваша сторінка
profile/update
. - Налаштуйте детальну
profile/update
сторінку для зміни паролю. - Використовуйте функцію
auth.updateUser()
з SDK Superbase.
Шаблони електронних листів: Зробіть їх красивими
У розділі “Authentication -> Email Templates” ви можете налаштувати шаблони для:
- Підтвердження реєстрації.
- Запрошення користувачів.
- Входу через magic link.
- Зміни адреси електронної пошти.
- Відновлення паролю.
Ви можете додати свій HTML та CSS до шаблонів.
Важлива деталь: Налаштування Site URL
Цей момент вимагає вашої уваги. Superbase використовує Site URL для надсилання підтверджень електронною поштою, відновлення паролів та інших важливих посилань.
- Перейдіть до “URL configuration” в розділі “Authentication”.
- Вкажіть URL вашого сайту, наприклад,
example.com
. - У разі проблем з посиланнями, перевірте перенаправлення.
- Змініть під час переходу до production-версії вашого проєкту.
CRUD: Читання, створення, оновлення та видалення даних
- У розділі “API Docs” для вашої таблиці (Orders) ви знайдете приклади коду для взаємодії з даними.
- Використовуйте
supabase.from('orders').select('*')
для вибірки даних. - Використовуйте
supabase.from('orders').insert({...})
для додавання даних. - Використовуйте
supabase.from('orders').update({...}).eq('id', '...')
для оновлення. - Використовуйте
supabase.from('orders').delete().eq('id', '...')
для видалення. - Завжди перевіряйте роботу Row Level Security перед використанням.
Пагінація, фільтрація та сортування
Superbase допоможе вам легко працювати з великими об’ємами даних.
- Пагінація: Використовуйте метод
.range(start, end)
для отримання певного діапазону рядків. - Фільтрація: Використовуйте методи
.eq()
,.gt()
,.lt()
,.like()
,.in()
та інші для фільтрації даних. - Сортування: Використовуйте метод
.order()
для сортування за певним стовпцем.
Зв’язки між таблицями (Relations)
- У Table Editor перейдіть до таблиці, у якій хочете створити зв’язок (наприклад, Orders).
- Натисніть на іконку редагування стовпця, що відповідає на ID.
- Виберіть “Add foreign key to another table”.
- Виберіть зв’язуючу таблицю (наприклад, Clients) та стовпець, з яким потрібно зв’язати (наприклад, ID).
- Збережіть зміни.
- В API Docs ви знайдете приклад для вибірки даних з врахуванням зв’язків.
Тригери та Функції: Автомація та логіка на Backend
Superbase дозволяє використовувати функції PostgreSQL та тригери для:
- Автоматичної обробки даних при вставці, оновленні чи видаленні рядків.
- Забезпечення цілісності даних.
- Реалізації бізнес-логіки на бекенді.
- Функції: Створіть функції у SQL Editor або Database → Functions.
- Тригери: (Database → Triggers)
- Вкажіть таблицю, подію (INSERT, UPDATE, DELETE) та функцію, яку потрібно викликати.
- Налаштуйте,
for each row
, абоfor each statement
.
Спільна робота Тригерів і Функцій (приклад)
Реалізуйте функцію для збільшення кількості переглядів (views) вашого ордеру. Для цього:
-
Створіть функцію
increment_views(order_id uuid)
:sql
CREATE OR REPLACE FUNCTION public.increment_views(order_id uuid)
RETURNS VOID AS $$
BEGIN
UPDATE public.orders SET views = views + 1 WHERE id = order_id;
END;
$$ LANGUAGE plpgsql;
-
Створіть тригер
increment_views_trigger
на таблиціorders
післяUPDATE
.
sql
CREATE OR REPLACE TRIGGER increment_views_trigger
AFTER UPDATE ON public.orders
FOR EACH ROW
WHEN (OLD.is_active IS DISTINCT FROM NEW.is_active)
EXECUTE FUNCTION public.increment_views(NEW.id);
Схеми (Schemas): Організація вашої бази
Схеми допомагають:
- Організувати об’єкти бази даних (таблиці, функції, тощо).
- Управляти дозволами.
- Уникати конфліктів імен.
- Спростити роботу зі складними структурами даних.
- Використовуйте SQL-запрос
CREATE SCHEMA <имя_схеми>
. - Створюйте таблиці в потрібній схемі:
CREATE TABLE <имя_схеми>.<имя_таблиці>
.
Зберігання файлів (Storage)
- У розділі “Storage” створіть “bucket” (наприклад, “avatars”).
- Налаштуйте доступ (публічний чи приватний) за потреби.
- Використовуйте SDK Superbase для завантаження та керування файлами.
javascript
const { data, error } = await supabase
.storage
.from('avatars')
.upload('public/avater.png', file)
- Переконайтеся, що ви працюєте з правильними правилами row level security для управління доступом.
Логи: Знаємо, що відбувається!
У розділі “Logs” ви знайдете:
- Логи усіх подій в вашому проєкті.
- Можливість фільтрувати за типами подій та часом.
- Інструменти для налагодження та аналізу.
Розширення (Extensions): Розширюємо можливості
Superbase підтримує розширення PostgreSQL.
- Перейдіть до “Database” → “Extensions”.
- Ввімкніть потрібні розширення (наприклад, PGNet для роботи з HTTP запитами).
Приклад з HTTP-запитами (PGNet)
-
Ввімкніть розширення
http
. -
Напишіть функцію для отримання даних з API:
sql
CREATE OR REPLACE FUNCTION public.get_api_data(url TEXT)
RETURNS JSON AS $$
BEGIN
RETURN http_get(url);
END;
$$ LANGUAGE plpgsql;
Реальний час (Realtime): Дані – миттєво!
- Перейдіть до таблиці, для якої хочете налаштувати Realtime.
- Увімкніть “Enable real-time”.
- Налаштуйте Row Level Security для безпечного доступу.
- Використовуйте
supabase.channel('any').on('postgres_changes', ...)
іchannel.subscribe()
в JS-коді для підписки на зміни.
Edge Functions: Ваш Сервер на Краю Мережі
- У розділі “Edge Functions” натисніть “Create a new function”.
- Виберіть ім’я та налаштування.
- Напишіть код вашої “функції” (Deno, Typescript).
typescript
import { serve } from "https://deno.land/std@0.186.0/http/server.ts";
serve(async (req) => {
const { name } = await req.json();
return new Response(
JSON.stringify({ message: `Hello, ${name}!` }),
{ headers: { "Content-Type": "application/json" } },
);
})
- Використовуйте команду
supabase functions deploy <ім'я_функції>
.
Вебхуки: З’єднуємо Все
У розділі “Database” → “Webhooks”, ви зможете створити HTTP запити або виклики Edge Functions.
- Вкажіть подію (INSERT, UPDATE, DELETE).
- Виберіть метод (HTTP request або Edge function).
- Налаштуйте параметри.
- Використовуйте вебхуки для інтеграції з сторонніми сервісами чи вашою інфраструктурою.
Self-Hosting: Все під Вашим Контролем
Superbase також можна розгорнути локально за допомогою Docker (вкомандуйте Docker та встановіть brew).
brew install supabase/tap/supabase
supabase login
supabase init
supabase start
І на завершення…
Superbase – це не просто бекенд, а чудовий інструмент для будь-кого, хто хоче зосередитися на створенні крутих продуктів замість налаштування інфраструктури. Він потужний, гнучкий та має дружній інтерфейс.
Зверніть увагу на документацію. Найкраща документація: superbase.com/docs
Ready to rock? 💪