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. Увидимся в следующем видео!