42-LabsNEWS

Cpia de NEWS LOWER THIRDS - Feito com PosterMyWall

Descrição


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.

Instalação


1º Passo: Pré-requisitos

É 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

2º Passo: Clonar o repósitorio e entrar no diretório:

$ git clone https://github.com/42sp/42labs-selection-process-v2-edubona8.git 42-labs
$ cd 42-labs

3º Passo: Criar os executaveis do programa:

É Preciso criar os executaveis da API e também do CLI, você pode fazer isso realizando os seguintes comandos:

$ make server
$ make cli

Como utilizar:

API

Para executar a API basta usar o seguinte comando:

$ ./API

Após isso ela vai estar pronta para receber requisições.

2022-02-26-22-08-57

CLI

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.

image

Requisições

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

2022-02-27-01-07-23




Como o projeto foi feito?


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.

image

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 :


image


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:

image


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


image


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.


image


Passando por todos esses pontos o projeto vai estar finalizado.


Bibliografia