2.9 KiB
2.9 KiB
cards
Веб-сервер на C++20 с использованием Boost.Beast и PostgreSQL. Отдаёт случайные записи из базы данных по REST API.
Требования
- Компилятор с поддержкой C++20 (GCC 10+, Clang 10+)
- CMake >= 3.14
- PostgreSQL (runtime) + libpq + libpqxx >= 7.0
- Boost (system)
- nlohmann_json 3.x
Установка зависимостей (Debian/Ubuntu):
sudo apt-get install libboost-all-dev libpq-dev libpqxx-dev nlohmann-json3-dev cmake build-essential
Сборка
./configure.sh
Или вручную:
mkdir -p build && cd build
cmake ..
make -j"$(nproc)"
cd ..
Бинарник: build/bin/cards
Конфигурация
По умолчанию читает config.json из рабочей директории. Можно указать путь к другому файлу:
./build/bin/cards /path/to/config.json
Поля config.json
server
| Поле | Тип | Значение по умолчанию |
|---|---|---|
| address | string | "0.0.0.0" |
| port | int | 8080 |
| threads | int | 4 |
database
| Поле | Тип | Значение по умолчанию |
|---|---|---|
| host | string | "localhost" |
| port | int | 5432 |
| dbname | string | "testdb" |
| user | string | "postgres" |
| password | string | (пусто) |
Переменные окружения
Переопределяют соответствующие поля config.json:
DB_HOSTDB_PORTDB_NAMEDB_USERDB_PASSWORD
Пример:
DB_PASSWORD=secret ./build/bin/cards
API
| Метод | Путь | Описание |
|---|---|---|
| GET | / |
Случайная запись из таблицы random_data |
| GET | /health |
Проверка состояния сервера |
Пример ответа GET /
{
"id": 3,
"name": "Gamma",
"value": 300,
"description": "Third test record",
"created_at": "2025-01-01 12:00:00",
"timestamp": 1735732800000000000
}
Пример ответа GET /health
{
"status": "ok",
"timestamp": 1735732800000000000
}
База данных
При первом запуске автоматически создаётся таблица random_data и заполняется десятью тестовыми записями.
Схема таблицы:
CREATE TABLE random_data (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
value INTEGER NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Сборка deb-пакета
cd build
cmake ..
cpack
Результат: cards-1.0.0-Linux.deb
Завершение работы
Для остановки сервера отправьте сигнал SIGINT (Ctrl+C) или SIGTERM.