Найти в Дзене
Цифровая Переплавка

⚙️ Pennybase: как создать простой и эффективный Backend-as-a-Service менее чем в 1000 строках кода на Go

Каждый разработчик хотя бы раз мечтал о том, чтобы быстро и безболезненно запустить небольшой проект, не тратя часы на настройку бэкенда. Firebase, Supabase и Pocketbase — отличные решения, но они могут быть слишком тяжёлыми, если вам нужна простота и минимализм. Именно здесь на сцену выходит Pennybase — новый проект, реализованный на языке Go всего за тысячу строк кода, который предлагает полноценный Backend-as-a-Service (BaaS), доступный буквально каждому. 🚀 Почему Pennybase — это круто? Преимущества Pennybase в первую очередь заключаются в минимализме и отсутствии внешних зависимостей. Всё реализовано стандартными библиотеками Go, а значит, никакой дополнительной конфигурации и разрастания зависимостей. Это подход, который можно назвать «бедным, но честным Firebase»: 🎯 Как это работает изнутри? Главная идея Pennybase — использование CSV-файлов в качестве основного хранилища данных. Для ускорения работы используется встроенный в память индекс с ссылками на последние версии записей.
На монете-пенни стоит крошечный сервер-«башня», из которого «струится» бинарный код. Рядом — ноутбук, символизирующий разработку на Go. Иллюстрация подчёркивает идею Pennybase: минималистичный, но полноценный бекэнд-сервис, умещающийся «на копейку».
На монете-пенни стоит крошечный сервер-«башня», из которого «струится» бинарный код. Рядом — ноутбук, символизирующий разработку на Go. Иллюстрация подчёркивает идею Pennybase: минималистичный, но полноценный бекэнд-сервис, умещающийся «на копейку».

Каждый разработчик хотя бы раз мечтал о том, чтобы быстро и безболезненно запустить небольшой проект, не тратя часы на настройку бэкенда. Firebase, Supabase и Pocketbase — отличные решения, но они могут быть слишком тяжёлыми, если вам нужна простота и минимализм. Именно здесь на сцену выходит Pennybase — новый проект, реализованный на языке Go всего за тысячу строк кода, который предлагает полноценный Backend-as-a-Service (BaaS), доступный буквально каждому.

🚀 Почему Pennybase — это круто?

Преимущества Pennybase в первую очередь заключаются в минимализме и отсутствии внешних зависимостей. Всё реализовано стандартными библиотеками Go, а значит, никакой дополнительной конфигурации и разрастания зависимостей. Это подход, который можно назвать «бедным, но честным Firebase»:

  • 🗄️ Хранение данных в CSV: Все данные хранятся в обычных CSV-файлах, при этом каждая новая запись просто добавляется в конец файла. Pennybase поддерживает версионность записей, поэтому вы всегда можете откатиться назад или отслеживать изменения.
  • 🔑 Авторизация и контроль доступа: Реализована базовая авторизация через session cookies или HTTP Basic Auth, а для управления правами используется простая и понятная ролевая модель (RBAC). Вы можете легко определить, кто и что может делать в системе, редактируя специальный CSV-файл с правами доступа.
  • 🔄 Реалтайм-обновления: Система поддерживает Server-Sent Events (SSE), то есть позволяет клиентам получать обновления данных в режиме реального времени.
  • 📋 Валидация данных: Pennybase строго следит за корректностью данных через схему, описанную в отдельном CSV-файле. Поддерживаются текстовые поля, числа и списки.
  • 📐 HTML-шаблоны и статические файлы: Реализована возможность отдавать клиентам статические файлы и шаблоны HTML, что делает Pennybase ещё и небольшим веб-сервером для простых проектов.

🎯 Как это работает изнутри?

Главная идея Pennybase — использование CSV-файлов в качестве основного хранилища данных. Для ускорения работы используется встроенный в память индекс с ссылками на последние версии записей.

Весь механизм работы выглядит так:

  • 📍 Первая колонка CSV-файла всегда хранит уникальный идентификатор записи.
  • 🔢 Вторая колонка — номер версии записи.
  • 📑 Последующие колонки содержат поля, описанные заранее в схеме.

Например, схема ресурсов хранится в файле _schemas.csv и выглядит примерно так:

s12,1,todo,_id,text,,,^.+$
s13,1,todo,_v,number,1,,
s14,1,todo,description,text,0,0,".+"
s15,1,todo,completed,number,0,1,""

Эта схема определяет поля для ресурса «todo» с текстовым описанием задачи и её состоянием выполнения.

🔧 Как реализована авторизация и безопасность?

Для управления пользователями используется отдельный файл _users.csv. Пароли хранятся в виде SHA-256-хэшей с использованием соли и кодировкой Base32. Например:

admin,1,salt,5V5R4SO4ZIFMXRZUL2EQMT2CJSREI7EMTK7AH2ND3T7BXIDLMNVQ====,"admin"
alice,1,salt,PXHQWNPTZCBORTO5ASIJYVVAINQLQKJSOAQ4UXIAKTR55BU4HGRQ====,

Таким образом, вам не нужно подключать базы данных и сложные системы хранения.

Контроль доступа реализован через _permissions.csv. Каждый ресурс имеет свои правила доступа, которые явно описываются в файле. Например, задачи (todo) могут читать и создавать все авторизованные пользователи, но изменять и удалять их могут только владельцы и администраторы:

p1,1,todo,read,,*,"Все авторизованные пользователи"
p3,1,todo,update,owner,"admin,editor","Только владелец или администраторы"

📡 REST API и реалтайм

Pennybase реализует REST API с базовыми методами CRUD:

  • 📥 POST /api/{resource} — создать новую запись.
  • 📤 PUT /api/{resource}/{id} — обновить запись.
  • 🗑️ DELETE /api/{resource}/{id} — удалить запись.
  • 📄 GET /api/{resource} — получить список записей.
  • 📄 GET /api/{resource}/{id} — получить конкретную запись.
  • ⚡ GET /api/events/{resource} — подписка на обновления ресурса в режиме реального времени.

⚙️ Расширяемость и хуки

Одна из важных особенностей — возможность подключать собственные хуки, чтобы выполнять дополнительные действия или валидацию данных при каждом запросе. Например, можно автоматически добавлять автора записи и дату её создания:

server.Hook = func(trigger, resource string, user pennybase.Resource, res pennybase.Resource) error {
if trigger == "create" && resource == "messages" {
res["author"] = user["_id"]
res["created_at"] = time.Now().UTC().Format(time.RFC3339)
}
return nil
}

🎨 Для кого это решение?

Pennybase идеально подходит:

  • 🚀 Для быстрого прототипирования.
  • 🎓 Для небольших учебных проектов.
  • 🧑‍💻 Для хакатонов и быстрых MVP.
  • 🌐 Для проектов, которым не нужна громоздкая инфраструктура.

На мой взгляд, главная ценность Pennybase — это минимализм и понятность. Разработчики часто переусложняют свои решения, а иногда достаточно лишь простого и надёжного инструмента, который не требует сложной инфраструктуры и десятков зависимостей.

🔥 Личное мнение автора

Pennybase — это напоминание о том, что хорошее решение может быть простым. Меня особенно привлекает идея использовать легко читаемые CSV-файлы вместо сложных баз данных, что упрощает понимание и отладку. Конечно, это не заменит Firebase в крупных приложениях, но в мире MVP и быстрой разработки такой инструмент бесценен.

💡 Легко представить, как Pennybase станет полезным инструментом в арсенале многих начинающих разработчиков и стартапов, экономящих ресурсы и ценящих простоту.

🔗 Ссылки на оригинальную новость: