Skip to content

LiamNoceda/NetServer-Get-Post

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

High-Performance C++ REST API Server Using Crow Framework

Спецификация и документация легковесного, высокопроизводительного REST API сервера на языке C++. Проект разработан с использованием асинхронного веб-фреймворка Crow и демонстрирует механизмы сериализации/десериализации JSON, обеспечения отказоустойчивости веб-узла при некорректных входных потоках данных, а также организацию многопоточной обработки конкурентных HTTP-запросов.

Архитектурные особенности и оптимизация

  • Многопоточность (Thread Pool): Активация метода .multithreaded() изолирует обработку входящих соединений в пуле рабочих потоков, распределяя нагрузку по ядрам процессора на системном уровне.
  • Разделение сущностей чтения/записи (rvalue vs wvalue):
    • crow::json::rvalue применяется исключительно для синтаксического анализа и валидации входящего буфера (req.body) в режиме read-only.
    • crow::json::wvalue используется для динамической сборки результирующего JSON-дерева в динамической памяти. По умолчанию контейнер использует std::unordered_map (сложность поиска и вставки O(1)).
  • Предотвращение утечек и отказов (Fail-Safe Handling): Валидация буфера через перегруженный оператор if (!request_data) пресекает вызовы методов обращения к памяти (.has(), .s(), .i()) на неинициализированном или поврежденном абстрактном синтаксическом девелопере (AST), предотвращая падение рабочего потока (Segment Fault / Unhandled Exception).

Спецификация API-эндпоинтов

1. Endpoint: GET /get_json

Генерация и структурирование комплексного JSON-ответа на стороне сервера.

  • HTTP-метод: GET
  • Content-Type: application/json (выставляется фреймворком автоматически при возврате типа wvalue)
  • Структура ответа (HTTP 200 OK):
{
  "success": true,
  "status_code": 200,
  "message": "Data successfully downloaded",
  "rating": 4.8,
  "tags": ["c++", "crow", "backend"],
  "author": {
    "name": "Ivan",
    "role": "Developer"
  }
}

2. Endpoint: POST /post_json

Прием сериализованного JSON-объекта, строгая типизация, инкремент данных и возврат модифицированного объекта.

  • HTTP-метод: POST
  • Заголовки запроса: Content-Type: application/json
  • Спецификация Payload (Входные данные):
{
  "username": "string",
  "age": "integer"
}
  • Структура успешного ответа (HTTP 200 OK):
{
  "username": "Alex",
  "age": 25,
  "status": "processed",
  "next_year_age": 26
}

Обработка исключений и кодов ответа (Error Handling)

  • HTTP 400 Bad Request — Переданный payload не соответствует синтаксису JSON (Парсер вернул некорректный rvalue).
    • Body: Error: Invalid JSON payload
  • HTTP 400 Bad Request — В структуре AST отсутствуют обязательные ключи "username" или "age".
    • Body: Error: Username or age fields are missing

Сборка и деплоймент проекта

Системные требования

  • Компилятор с полной поддержкой стандарта ISO C++17 или выше (g++-9+, clang-10+, MSVC 2019+).
  • Утилита автоматизации сборки CMake версии 3.15 или выше.
  • Зависимости: Заголовочные файлы библиотеки Crow и реализации сетевого уровня Asio (или Boost.Asio).

Пошаговое руководство по компиляции

  1. Инициализация репозитория:
git clone <ссылка_на_ваш_репозиторий>
cd project-directory
  1. Конфигурация дерева сборки посредством CMake и запуск компиляции:
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release
  1. Запуск исполняемого бинарного файла:
./server

По умолчанию сетевой интерфейс инициализируется на порту 18080 для всех доступных адресов (0.0.0.0).


Верификация подсистем (Интеграционные тесты)

Ниже представлены низкоуровневые тестовые сценарии с использованием утилиты curl для проверки сетевой доступности и логики валидации.

Сценарий №1: Запрос статического JSON-дерева

curl -i http://localhost:18080/get_json

Сценарий №2: Передача валидного объекта (Позитивный тест)

curl -i -X POST http://localhost:18080/post_json \
     -H "Content-Type: application/json" \
     -d '{"username": "Alex", "age": 25}'

Сценарий №3: Передача поврежденного payload (Негативный тест)

curl -i -X POST http://localhost:18080/post_json \
     -H "Content-Type: application/json" \
     -d '{"broken_json'

About

High-performance, multithreaded C++17 REST API server built with the Crow framework. Features robust JSON serialization/deserialization, strong input data validation, fail-safe error handling, and integrated integration testing.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors