Catalog · How the catalog works
PKeyDB
Lightweight network key-value database with REST API, disk storage, INI configuration, and simple token-based authorization. Not production ready
- ★ 2 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
PKeyDB
English
PKeyDB is a lightweight network key-value database with REST API, authorization, disk storage, INI-based configuration, stdout/stderr logging, and support for multiple databases with passwords and limits.
⚠️ Warning: This project is under active development and NOT ready for production use!
Features
- REST API (CRUD, authorization)
- Disk storage (index + data file)
- INI configuration
- Logging to stdout/stderr with timestamp
- Simple token system (
X-Auth-Tokenheader) - Multiple databases with limits
Quick start
- Build:
fpc main.pas - Run:
./main pkeydb.ini - Test API:
./test_server.sh
Example request
curl -X POST http://localhost:8080/auth -H 'Content-Type: application/json' -d '{"dbname":"db1","password":"mypassword"}'
curl -X POST http://localhost:8080/db/db1/set -H 'X-Auth-Token: <token>' -H 'Content-Type: application/json' -d '{"key":"foo","value":"bar"}'
curl -X GET http://localhost:8080/db/db1/get?key=foo -H 'X-Auth-Token: <token>'Project structure
main.pas— entry point, server startupserver.pas— HTTP server, REST APIconfig.pas— INI parsertest_server.pas— integration teststest_server.sh— shell script for API testingdocs/— documentation (API, roadmap)
Documentation
- docs/api.md — REST API description, request examples
- docs/roadmap.md — architecture and roadmap
pkeydb.ini.example— example config with comments
Status
- [x] Server and API skeleton
- [x] Configuration and logging
- [x] Integration tests and shell script
- [ ] Real file storage (index + mmap)
- [x] Secure authorization and token management
- [ ] Real-world load testing
- [ ] Production-ready documentation and examples
License
BSD 2-Clause. See LICENSE.
PKeyDB (на русском)
PKeyDB — легковесная сетевая СУБД (ключ-значение) с REST API, авторизацией, хранением данных на диске, конфигурируемостью через INI-файл, логированием в stdout/stderr, поддержкой нескольких БД с паролями и лимитами.
⚠️ Внимание: проект находится в активной разработке и не готов для использования в продакшене!
Возможности
- REST API (CRUD-операции, авторизация)
- Хранение данных на диске (индекс + файл данных)
- Конфигурирование через INI-файл
- Логирование в stdout/stderr с меткой времени
- Простая система токенов (заголовок
X-Auth-Token) - Поддержка нескольких баз с лимитами
Быстрый старт
-
Склонируйте репозиторий и зависимости.
-
Соберите проект через
make. -
Скопируйте пример конфига:
cp pkeydb.ini.example pkeydb.iniи отредактируйте под свои нужды.
ВАЖНО: Ваш рабочий pkeydb.ini не коммитится в репозиторий. Для примера используйте pkeydb.ini.example (он всегда актуален и содержит комментарии по всем параметрам).
Пример запроса
curl -X POST http://localhost:8080/auth -H 'Content-Type: application/json' -d '{"dbname":"db1","password":"mypassword"}'
curl -X POST http://localhost:8080/db/db1/set -H 'X-Auth-Token: <token>' -H 'Content-Type: application/json' -d '{"key":"foo","value":"bar"}'
curl -X GET http://localhost:8080/db/db1/get?key=foo -H 'X-Auth-Token: <token>'Структура проекта
main.pas— точка входа, запуск сервераserver.pas— HTTP сервер, обработка REST APIconfig.pas— парсер INI-файлаtest_server.pas— интеграционные тестыtest_server.sh— shell-скрипт для тестирования APIdocs/— документация (API, roadmap)
Документация
- docs/api.md — описание REST API, примеры запросов
- docs/roadmap.md — архитектура и план разработки
pkeydb.ini.example— пример конфига с комментариями
Статус
- [x] Каркас сервера и API
- [x] Конфигурирование и логирование
- [x] Интеграционные тесты и shell-скрипт
- [ ] Реальное файловое хранилище (индекс + mmap)
- [x] Безопасная авторизация и управление токенами
- [ ] Тестирование на реальной нагрузке
- [ ] Документация и примеры для production
Проект развивается!
Любые вопросы и предложения — через issues или pull requests.
Troubleshooting
- Не удаётся авторизоваться:
- Проверьте, что в конфиге указан SHA256-хэш пароля, а не plain-текст.
- Проверьте, что хэш в нижнем регистре, без пробелов.
- Проверьте, что сервер перезапущен после изменения конфига.

