PostgREST удаляет 80% кода вашего бэкенда

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00Что, если бы ваша база данных Postgres сама была API и вам не пришлось бы писать бэкенд-код вообще?
00:00:05Каждый раз, создавая API, вы пишете один и тот же код снова и снова. Роуты, контроллеры, валидация, аутентификация — всё это лишь для связи с вашей
00:00:14базой данных. Затем вы меняете один столбец, и всё ломается. Никакого кастомного бэкенд-кода. Никаких контроллеров. Никакого слоя ORM.
00:00:21Это то, что делает PostgREST. Это движок, стоящий за Supabase. Он справляется с серьезным продакшн-трафиком, и всего за несколько минут
00:00:29я покажу вам, как именно.
00:00:31Если вы создаете API, этот инструмент бьет по самым раздражающим болевым точкам во всем стеке.
00:00:40Дублирование логики. Вы определяете данные в базе данных.
00:00:44Затем вы определяете правила доступа, бэкенд-код и валидацию где-то в другом месте.
00:00:49Потом мы делаем то же самое для обработки ответов в третьем месте. Одна система, множество слоев, множество шансов на ошибку.
00:00:56PostgREST разрубает этот узел. У него более 26 000 звезд на GitHub, и Supabase использует его в промышленных масштабах.
00:01:03Он превращает вашу схему в готовый к работе REST API за считанные минуты. Здесь нет ORM, нет контроллеров.
00:01:10Безопасность живет в базе данных, что означает меньше дублирования, меньше поддержки и гораздо меньше времени на скучную рутину.
00:01:19Позвольте мне показать. Если вам нравятся инструменты, ускоряющие рабочий процесс, обязательно подпишитесь.
00:01:24У нас постоянно выходят новые видео.
00:01:26Итак, давайте приступим к сборке. Вот наша установка: три контейнера.
00:01:32И это всё: Postgres, PostgREST и Swagger UI для документации.
00:01:38Вот файл Docker Compose. Здесь нет ничего сложного. Просто три сервиса, связанных друг с другом.
00:01:45Я запускаю всё проверенной командой Docker Compose. Всё заработает, и на этом настройка закончена.
00:01:51Никакой установки зависимостей. Никакой настройки сервера. Теперь давайте взглянем на базу данных.
00:01:55Я запущу эту команду Docker, и вот она: простейшая таблица задач (todos). ID, заголовок, статус выполнения, дата создания — база.
00:02:04На самом деле это всё, что здесь происходит. Но именно в этот момент всё становится по-настоящему полезным.
00:02:09Безопасность на уровне строк (RLS). Мы определяем права доступа прямо в SQL внутри базы данных.
00:02:17Никакой логики авторизации, живущей где-то отдельно в системе. Вот наша политика.
00:02:22Я установил полный доступ для анонимов через "true" с проверкой "true". Пока разрешено всё. А теперь смотрите.
00:02:29Я отправляю GET-запрос к задачам через curl, и готово: чистый JSON прямо из Postgres.
00:02:35Никакого кода API. Развивая это, я применю фильтрацию — она работает мгновенно.
00:02:41Сортировка — и вуаля. Теперь добавим новую строку: отправляем POST-запрос с JSON в теле, и дело сделано.
00:02:50Данные уже в базе. Здесь нет никакого слоя ORM, пытающегося синхронизироваться.
00:02:56А вот часть, которая действительно впечатляет людей: документация Open API и автогенерируемый Swagger UI.
00:03:04Я открываю его, и мы получаем полноценный интерактивный API. Можно изучать всё, тестировать эндпоинты, смотреть схемы.
00:03:11Итак, с нуля у вас есть полный CRUD, фильтрация, сортировка и пагинация. У вас есть базовая аутентификация через RLS и документация меньше чем за минуту.
00:03:21Так почему люди вообще это используют? Потому что традиционная бэкенд-разработка облагается своего рода "налогом".
00:03:26И большая часть этого налога — не работа над продуктом. По сути, мы заняты бесконечной поддержкой инфраструктуры.
00:03:33Вспомните обычный стек: Express, Prisma, контроллеры, сервисы, валидация в одном месте.
00:03:40Затем аутентификация в другом. Логика базы данных — совсем в третьем.
00:03:45Теперь сравните это с PostgREST. Ваша схема определяет API. Ваша безопасность — это RLS.
00:03:52Связи уже существуют в базе. Вместо создания слоя трансляции вокруг ваших данных, мы просто правильно открываем сами данные.
00:04:02Это принципиально иной подход. Сравните с кастомным бэкендом: вам нужно писать всё самому.
00:04:07Да, это дает гибкость. Безусловно. Но это также дает огромное количество кода, который нужно поддерживать.
00:04:13С PostgREST всё проще. REST плюс Postgres. Безопасность в базе, а не размазана по посредникам (middleware) или обработчикам роутов.
00:04:23Затраты на поддержку остаются низкими, так как API следует за вашей схемой. Вот за что это любят.
00:04:28Справедливости ради, именно здесь начинаются проблемы, ведь когда что-то кажется таким изящным, люди начинают думать, что это решение всех бед.
00:04:34Это не панацея, верно? Всё еще есть вещи, за которыми нужно следить.
00:04:38Будут компромиссы, и вам стоит знать о подводных камнях, прежде чем вы начнете это использовать.
00:04:43Что здесь подкупает — это очевидно. Скорость разработки. Путь от идеи до рабочего API проходится очень быстро.
00:04:51И это отлично масштабируется. Supabase — живое тому подтверждение.
00:04:55Они используют это. Но среди минусов: интенсивное использование RLS увеличивает нагрузку на базу данных.
00:05:02Так что нужно тщательно продумывать дизайн. Сложная логика может вынудить вас писать много SQL-функций или представлений (views).
00:05:10Кто-то это обожает, а кто-то возненавидит. Стоит ли вам это пробовать?
00:05:15Да, для подходящих проектов. Если вы строите прототипы, MVP или любой проект, завязанный на Postgres, то почему бы и нет?
00:05:23Вы будете двигаться быстрее, писать меньше кода и получите более надежную безопасность по умолчанию, перенося правила в базу.
00:05:32Если у вашего приложения очень сложная логика, вам всё же может понадобиться тонкий слой бэкенда сверху — для граничных случаев.
00:05:40Но даже тогда Postgres может выполнять основную тяжелую работу. Главный вывод таков: PostgREST позволяет запускаться быстрее, защищать лучше и тратить меньше сил на поддержку.
00:05:50Ваша база данных становится реальным источником данных, а API логически вытекает из неё, вместо того чтобы быть отдельной системой.
00:05:58Если вам нравятся такие инструменты и советы по кодингу, подпишитесь на канал Better Stack. Увидимся в следующем видео!

Key Takeaway

PostgREST сокращает объем бэкенд-кода на 80%, заменяя традиционные слои Express и Prisma прямой трансляцией схемы PostgreSQL в REST API с авторизацией на уровне строк.

Highlights

PostgREST устраняет необходимость в написании контроллеров, роутов и слоев ORM, превращая схему PostgreSQL в готовый REST API.

Инструмент имеет более 26 000 звезд на GitHub и является основным движком платформы Supabase для обработки промышленного трафика.

Безопасность данных реализуется через механизм Row Level Security (RLS) непосредственно внутри базы данных вместо стороннего ПО.

Установка системы состоит из трех Docker-контейнеров: Postgres, PostgREST и Swagger UI для автоматической документации.

PostgREST автоматически генерирует интерактивную документацию OpenAPI, позволяя тестировать эндпоинты сразу после запуска.

Использование RLS переносит нагрузку на базу данных, что требует тщательного проектирования архитектуры при масштабировании.

Timeline

Устранение избыточности в бэкенд-разработке

  • Традиционное создание API требует многократного дублирования логики в роутах, контроллерах и валидаторах.
  • PostgREST исключает слой ORM и синхронизацию данных между кодом и базой.
  • Безопасность интегрируется в саму схему данных для минимизации ошибок и затрат на поддержку.

Разработка стандартных API сопровождается постоянным написанием однотипного связующего кода. Изменение одного столбца в базе данных часто приводит к поломкам во всей цепочке от ORM до контроллеров. PostgREST решает эту проблему путем прямого превращения структуры таблиц в функциональный интерфейс.

Техническая реализация и быстрая настройка

  • Инфраструктура разворачивается через Docker Compose с использованием трех базовых сервисов.
  • Авторизация настраивается через SQL-политики доступа Row Level Security (RLS).
  • Система поддерживает CRUD, фильтрацию, сортировку и пагинацию из коробки без написания кода.

Процесс запуска не требует установки зависимостей или настройки веб-сервера. После создания простой таблицы задач через SQL, GET и POST запросы начинают работать мгновенно через curl. Вся логика прав доступа, например разрешение анонимного доступа, прописывается одной командой SQL внутри базы.

Сравнение с традиционным стеком и ограничения

  • Обычный стек разработки (Express, Prisma) накладывает инфраструктурный налог в виде поддержки лишних слоев кода.
  • PostgREST обеспечивает высокую скорость разработки прототипов и MVP за счет использования базы как единственного источника истины.
  • Масштабируемость технологии подтверждена опытом использования в Supabase.

В стандартных приложениях логика размыта между сервисами валидации, аутентификации и базой данных. PostgREST централизует это в PostgreSQL, где связи между данными уже существуют. Это избавляет разработчика от создания слоев трансляции, позволяя данным определять API.

Риски и рекомендации по использованию

  • Интенсивное использование политик RLS создает дополнительную вычислительную нагрузку на процессор базы данных.
  • Сложная бизнес-логика может привести к накоплению большого количества SQL-функций и представлений.
  • Для специфических пограничных случаев может потребоваться дополнительный тонкий слой бэкенда.

Инструмент не является универсальным решением для всех задач, так как перенос логики в SQL может быть неудобен для некоторых команд. Приложение с экстремально сложной логикой потребует гибридного подхода. Однако для большинства проектов переход к модели, где база данных является активным участником API, повышает надежность и скорость работы.

Community Posts

View all posts