rinha-de-back-end-C-Crébitos-2024
Repositorio da api rest da rinha de back end C em 2024
Essa Versão não possui nenhuma otmização bizarra de perfórmace
e esta seguindo todos os critérios de funcionamento da OUI
Contatos
Caso queiram entrar em contanto com a gente
Nosso Site
Nosso linkedin
Whats do Cara que escreveu essa api:
+55 11 98333 1701
Email do cara que escreveu essa api:
mateusmoutinho01@gmail.com
Rodando a aplicação
para rodar essa aplicação ,você obrigatoriamente precisa estar em um linux
seja alguma distro ou wsl, e também precisa ter um compilador C instalado
sendo gcc/g++ ou clang
caso não tenha basta rodar:
sudo apt install gcc
Principal
Para rodar em modo principal basta rodar:
gcc src/main.c && ./a.out
Debug
Caso queira rodar em modo debug, basta rodar:
gcc src/main.c -DDEBUG && ./a.out
Em modo debug os arquivos dos clientes terão nomes e chaves sem abreviatura, e a aplicação irá rodar em single process
Arquitetura
Esse é o modelo arquitetural simples de funcionamento da aplicação
baseado em armazenamento de arquivos
Esse modelo arquitetural esta sendo baseado no modo debug de execução
já que em modo prod os nomes são todos abreviados
Estrutura de diretorio Inicial
Essa é a estrutura de diretorio inicial , que é criada na main
antes da aplicação iniciar
Estrutura de diretorios Rodando
Essa é estrutura de diretorios enquanto a aplicação esta rodando
Configurando
em src/constantes/aplicacao.h, você pode encontrar todas
as constantes que controlam o app, como total da fila, total de requests
simultaneos , etc.
#define PORTA_PADRAO 9999
#define INCONSISTENCIA 422
#define NAO_ENCONTRADO 404
#define MAXIMO_BODY 200
#define RETORNO_OK 200
#define MAXIMO_TRANSACOES 10
#ifdef DEBUG
#define IDENTAR true
#else
#define IDENTAR false
#endif
#define MAXIMO_FILA 100000
#define MAXIMO_REQUEST 5
#define TIMEOUT_FUNCAO 60
#define TIMEOUT_CLIENTE 60
Testes
Teste de vazamento de memória
Para testar vazamentos de memória, você precisa ter o valgrind instalado na sua máquina,instale com(debian baseds):
sudo apt-get install valgrind
e rode com :(para finalizar basta bater em /end)
gcc src/main.c -DDEBUG && valgrind ./a.out
Teste de Sanitização
Também é possível testar sanitização de acesso não autorizado de memória com:
gcc src/main.c -DDEBUG -fsanitize=address && ./a.out
Teste de Observabilidade
Também é possível observar as entradas e saidas de todas as requisições, nesse modo toda requisição será salva na pasta requisicoes contendo o request, a respostas, e o meta (contendo dados como inicio, fim , e tempo de bloqueamento do cliente)
gcc src/main.c -DOBSERVAR && ./a.out
Armazenamento
dependencias:
Para fazer essa api usei uma série de tecnologias OUI
CWebStudio
Framework web usado para construir fazer as requisições http
Repositório
DoTheWorld
Biblioteca de armazenamento transacional usada para armazenar os arquivos
dos clientes,controlar os bloqueamentos de cada cliente
Repositório
CXpathJson
Usada para escrever/ler todos os jsons do projeto, tanto os dos arquivos dos clientes, quanto as entradas e saidas da api
Repositório
Universal Garbage
Usada para controlar memória impedindo buffer overflows e segment faults
Repositório
cJSON
Usada para fazer a interoperabilidade entre o CWebStudio e o CxpathJson
já que ambos usam o cJSON por baixo
Repositório
CTextEngine
Usada para o Processamento de strings
Repositório