Neste projeto desenvolvi em C uma API que segue o modelo de arquitetura REST, ele é um portal de noticias que retorna informações sobre alguns tópicos (covid, finanças, tech, clima). Além disso construi uma aplicação (CLI) que consome e organiza os logs da API, nos mostrando a quantidade de requisições para cada rota e o metódo utilizado.
É necessario ter a biblioteca Libcurl, ela geralmente não vem instalada por padrão na maioria dos sistemas. No entanto, você pode obte-lá usando:
$ sudo apt-get install libcurl4-gnutls-dev
$ git clone https://github.com/42sp/42labs-selection-process-v2-edubona8.git 42-labs
$ cd 42-labs
É Preciso criar os executaveis da API e também do CLI, você pode fazer isso realizando os seguintes comandos:
$ make server
$ make cli
Para executar a API basta usar o seguinte comando:
$ ./API
Após isso ela vai estar pronta para receber requisições.
Para executar o CLI basta usar o seguinte comando:
$ ./CLI_
O resultado te trará uma tabela com as informações dos LOGS referentes as requisições da API.
Está API trabalha com cinco rotas diferentes sendo elas:
- / = retorna uma string informando os tópicos abordados na API
- /weather = retorna dados sobre o clima em SP
- /tech = retorna notícias sobre o universo tech
- /covid = retorna dados sobre o covid em SP
- /finance = retorna dados sobre as ações da B3
Você pode testa-las usando o seu browser ou softwares dedicados como o Postman ou o Insomnia.
É importante afirmar que o formato de retorno sempre vão ser em .JSON
Bom o primeiro passo deste projeto foi encontrar alguma forma construir um servidor que recebesse as requisições HTTP , existem diversas maneiras de isso ser feito no meu caso eu optei em usar a biblioteca "Mongoose". A maior vantagem e desvatagem do Mongoose é ser simples, por um lado o uso dele e extremamente intuitivo e tem uma documentação robusta mas no outro falta algumas ferramentas, usei o modelo "minimo servidor HTTP" como base para o meu projeto.
A partir disso comecei a explorar algumas funcionalidades do Mongoose, dentro da função fn (manipulador de eventos) fiz a implementação que toda vez que for recebido a mensagem a função compara à mesma a alguma rota já estabelecida e a partir disso retorna a mensagem em formato .JSON dependendo da rota escolhida. Após isso ele ainda escreve uma mensagem de log em um arquivo, o resultado ficou assim :
Para minha API tive que realizar requisições para outras API´s e armarnezar o conteudo dela, o mangoose não tem essa funcionalidade e em decorrencia disso tive que usar a Libcurl que é uma outra biblioteca de transferência de URL do lado do cliente nos permitindo realizar requições HTTP e armazenar o conteudo para ser utilizado na nossa própria API. Aqui está o resultado final da função:
O Mangoose também não dispõe de alguma ferramenta fácil de cadastro de log, então eu mesmo criei essa função onde nela consigo armazenar o método, horario e status da requisição em um arquivo
E com isso a API vai estar pronta para receber requisições e armazenar os logs. Agora a próxima tarefa é fazer uma aplicação que consome os dados do log e o organizam em uma tabela, e para fazer isso é necessário uso da get_next_line (função consegue ler toda uma linha de um arquivo) até o final do arquivo de log, e quando a função achar na linha o método da requisição e a rota correspondende (ex: ""GET /weather") conta +1 em um contador, assim conseguindo o valor da quantidade de requisições feitas para cada rota.
Passando por todos esses pontos o projeto vai estar finalizado.
- Documentação Mongoose = https://mongoose.ws/documentation/.
- Documentação Libcurl = https://curl.se/libcurl/.
- APIs for Beginners - How to use an API (Full Course / Tutorial) = https://www.youtube.com/watch?v=GZvSYJDk-us.
- What is a REST API? = https://www.youtube.com/watch?v=lsMQRaeKNDk.
- Introdução a APIs (Rods Cadete da 42 :p ) = https://www.youtube.com/watch?v=kEVUfzIRkFI.
- vnazioze | Vinicius e ldatilio | Lucas que me ajudaram demais no projeto.
- Documentação da API de finanças = https://hgbrasil.com/status/finance
- Documentação da API de dados sobre covid = https://covid19-brazil-api-docs.vercel.app/
- Documentação da API de notícias tech = https://newsapi.org/docs
- Documentação da API de tempo = https://hgbrasil.com/status/weather