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
Caso queiram entrar em contanto com a gente
Whats do Cara que escreveu essa api:
+55 11 98333 1701
Email do cara que escreveu essa api:
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
Para rodar em modo principal basta rodar:
gcc src/main.c && ./a.out
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
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
Essa é a estrutura de diretorio inicial , que é criada na main antes da aplicação iniciar
Essa é estrutura de diretorios enquanto a aplicação esta rodando
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
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
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
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
Para fazer essa api usei uma série de tecnologias OUI
Framework web usado para construir fazer as requisições http
Biblioteca de armazenamento transacional usada para armazenar os arquivos dos clientes,controlar os bloqueamentos de cada cliente
Usada para escrever/ler todos os jsons do projeto, tanto os dos arquivos dos clientes, quanto as entradas e saidas da api
Usada para controlar memória impedindo buffer overflows e segment faults
Usada para fazer a interoperabilidade entre o CWebStudio e o CxpathJson já que ambos usam o cJSON por baixo
Usada para o Processamento de strings