Skip to content

GuigoAmadio/cppBackend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 C++ Backend Puro - Zero Frameworks

Backend HTTP 100% C++ puro sem frameworks externos. Tudo implementado do zero para aprendizado máximo!

🎯 Filosofia do Projeto

Este projeto implementa um backend HTTP completo em C++ SEM usar frameworks prontos. Você vai aprender:

  • Socket Programming - Como TCP/IP funciona na prática
  • HTTP Protocol - Parsing manual de requests/responses
  • JSON - Parser e serializer do zero
  • Threading - Thread pools e concorrência
  • Memory Management - RAII, smart pointers, zero leaks
  • DDD - Domain-Driven Design em C++ puro
  • Database - SQL direto com libpq (PostgreSQL)

📁 Estrutura do Projeto

cppBackend/
├── src/
│   ├── core/                    # Fundações do sistema
│   │   ├── http/                # HTTP Server do zero
│   │   │   ├── Server.hpp       # TCP Server
│   │   │   ├── Request.hpp      # HTTP Request parser
│   │   │   ├── Response.hpp     # HTTP Response builder
│   │   │   └── Router.hpp       # URL routing
│   │   │
│   │   ├── json/                # JSON parser do zero
│   │   │   ├── Json.hpp         # JSON parser/serializer
│   │   │   └── JsonValue.hpp    # JSON value types
│   │   │
│   │   ├── database/            # Database layer
│   │   │   ├── Connection.hpp   # DB connection pool
│   │   │   └── QueryBuilder.hpp # SQL query builder
│   │   │
│   │   ├── threading/           # Concorrência
│   │   │   ├── ThreadPool.hpp   # Thread pool
│   │   │   └── Queue.hpp        # Thread-safe queue
│   │   │
│   │   └── utils/               # Utilitários
│   │       ├── String.hpp       # String helpers
│   │       ├── Logger.hpp       # Logging
│   │       └── Crypto.hpp       # Hash, encryption
│   │
│   ├── domains/                 # Business logic (DDD)
│   │   ├── identity/            # Domain: Identity
│   │   │   ├── entities/        # User entity
│   │   │   ├── value_objects/   # Email, Password, etc
│   │   │   ├── repositories/    # Data access
│   │   │   ├── use_cases/       # Business operations
│   │   │   └── controllers/     # HTTP endpoints
│   │   │
│   │   └── commerce/            # Domain: Commerce
│   │       ├── entities/        # Product, Order
│   │       └── ...
│   │
│   ├── infrastructure/          # Implementações técnicas
│   │   ├── database/            # PostgreSQL implementation
│   │   ├── cache/               # Redis/Memory cache
│   │   └── security/            # JWT, bcrypt
│   │
│   └── main/
│       └── main.cpp             # Entry point
│
├── include/                     # Headers públicos
├── tests/                       # Unit tests
├── build/                       # Build output
├── lib/                         # Bibliotecas externas
├── config/                      # Configurações
└── docs/                        # Documentação

🔧 Dependências Mínimas

Usamos APENAS bibliotecas de baixo nível (não frameworks):

# Obrigatórias
- libpq (PostgreSQL client C)
- pthread (POSIX threads)

# Opcionais (para produção)
- OpenSSL (HTTPS, crypto)
- zlib (compression)

🏗️ Como Funciona

1. HTTP Server (do zero)

// Implementamos um servidor TCP que:
1. Escuta em uma porta (ex: 8080)
2. Aceita conexões (accept())
3. Lê dados do socket (recv())
4. Parseia HTTP request (manual!)
5. Roteia para handler correto
6. Executa business logic
7. Serializa resposta
8. Envia via socket (send())
9. Fecha conexão

2. HTTP Protocol Parsing

// Request HTTP é texto plano:
"GET /users/123 HTTP/1.1\r\n"
"Host: localhost:8080\r\n"
"Content-Type: application/json\r\n"
"\r\n"
"{ \"name\": \"John\" }"

// Você vai implementar parser que extrai:
- Method (GET, POST, etc)
- Path (/users/123)
- Headers (Host, Content-Type, etc)
- Body (JSON payload)

3. JSON Parser

// JSON é texto estruturado:
"{ \"name\": \"John\", \"age\": 30 }"

// Seu parser vai:
1. Tokenizar (lexer)
2. Construir árvore (parser)
3. Validar sintaxe
4. Criar objeto C++ navegável

4. Thread Pool

// Para alta concorrência:
1. Cria N threads na inicialização
2. Cada request vai para fila
3. Threads ociosos pegam da fila
4. Processam e devolvem resposta
5. Voltam para idle state

5. DDD (Domain-Driven Design)

// Business logic isolada:
Domain Entity -> Use Case -> Repository -> DB

// Exemplo:
User user = User::create(email, password);  // Entity
userService.register(user);                  // Use Case
userRepo.save(user);                         // Repository

🚀 Compilação e Execução

Pré-requisitos

# Windows (usando MSYS2)
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-cmake
pacman -S mingw-w64-x86_64-postgresql

# Linux (Ubuntu/Debian)
sudo apt install build-essential cmake libpq-dev

# macOS
brew install cmake postgresql

Build

mkdir build
cd build
cmake ..
make -j$(nproc)

Run

./cppBackend

# Server starting at http://localhost:8080

📚 Learning Path

Recomendo implementar nesta ordem:

Fase 1: Core (Semana 1-2)

  1. ✅ Estrutura de diretórios
  2. ⏭️ HTTP Server básico (accept, recv, send)
  3. ⏭️ HTTP Request parser
  4. ⏭️ HTTP Response builder
  5. ⏭️ Router (URL matching)

Fase 2: JSON (Semana 2-3)

  1. ⏭️ JSON lexer (tokenização)
  2. ⏭️ JSON parser (AST)
  3. ⏭️ JSON serializer
  4. ⏭️ JSON Value types

Fase 3: Threading (Semana 3-4)

  1. ⏭️ Thread-safe queue
  2. ⏭️ Thread pool
  3. ⏭️ Connection handling

Fase 4: Business (Semana 4-6)

  1. ⏭️ Domain entities (User, Product)
  2. ⏭️ Value objects (Email, Password)
  3. ⏭️ Use cases
  4. ⏭️ Controllers

Fase 5: Database (Semana 6-8)

  1. ⏭️ PostgreSQL integration (libpq)
  2. ⏭️ Connection pooling
  3. ⏭️ Repositories
  4. ⏭️ Transactions

Fase 6: Production (Semana 8+)

  1. ⏭️ HTTPS (OpenSSL)
  2. ⏭️ Authentication (JWT)
  3. ⏭️ Logging
  4. ⏭️ Error handling
  5. ⏭️ Performance tuning

🎓 Conceitos que Você Vai Aprender

Low-Level

  • System calls (socket, bind, listen, accept)
  • File descriptors
  • Buffers e memory management
  • Endianness (byte order)
  • TCP/IP stack

Concurrency

  • Threads vs processes
  • Mutexes e locks
  • Race conditions
  • Deadlocks
  • Thread-safe data structures

Networking

  • TCP sockets
  • HTTP protocol
  • Keep-alive connections
  • Request pipelining

Memory

  • Stack vs heap
  • RAII pattern
  • Smart pointers
  • Memory pools
  • Zero-copy optimizations

🔥 Performance Goals

Após otimizações, esperamos:

Métrica Target
Latência p50 < 200µs
Latência p99 < 2ms
Throughput > 50K req/s
Memory < 100MB
CPU 1 core @ 50%

📖 Recursos Úteis

Livros

  • "TCP/IP Sockets in C" - Michael J. Donahoo
  • "C++ Concurrency in Action" - Anthony Williams
  • "Effective Modern C++" - Scott Meyers

Referências

🐛 Debugging

# Verificar sockets abertos
netstat -tulnp | grep 8080

# Memory leaks
valgrind --leak-check=full ./cppBackend

# Profiling
perf record ./cppBackend
perf report

# GDB
gdb ./cppBackend
(gdb) break main
(gdb) run

⚠️ Avisos Importantes

  1. Este é um projeto EDUCACIONAL - Não use em produção sem auditar
  2. Segurança - Implemente validação, sanitização, rate limiting
  3. Error Handling - Trate TODOS os erros (não assuma sucesso)
  4. Memory - Use smart pointers, evite raw pointers
  5. Testing - Escreva testes para tudo

🎯 Próximos Passos

  1. ✅ Estrutura criada
  2. ⏭️ Implementar HTTP Server básico
  3. ⏭️ Testar com curl
  4. ⏭️ Adicionar JSON parsing
  5. ⏭️ Implementar primeiro endpoint (GET /health)

Dificuldade: 🔥🔥🔥🔥🔥 (Expert)
Tempo Estimado: 2-3 meses para versão completa
Recompensa: Conhecimento profundo de como sistemas funcionam!

Vamos começar! 🚀

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published