Api desenvolvida para obtenção de receitas e seus gifs.
Para o desenvolvimento foram utilizadas as seguintes tecnologias:
- É possível executar o projeto localmente ou utilizando o docker. Para execução local, são necessários os seguintes passos:
- Baixe o projeto em sua máquina;
- Navegue até a pasta api-recipes;
- Caso deseje utilizar o gerenciador de pacotes npm, deve-se executar os comandos abaixo:
$ npm install -g typescript
$ npm install
$ npm run build
$ npm run start
- Caso deseje utilizar o gerenciador de pacotes yarn, deve-se executar os comandos abaixo:
$ yarn global add typescript
$ yarn install
$ yarn build
$ yarn start
- Feito isso a api já estará pronta para receber as requisições.
- Para execução utilizando o docker, são necessários os seguintes passos:
- Baixe o projeto em sua máquina;
- Navegue até a pasta api-recipes;
- Execute os seguintes comandos:
$ docker-compose up --build
Para as requisições podemos utilizar aplicações que realizam requisições, tais quais: Postmann, Insomnia, etc.
A url de requisição possuí a seguinte estrutura: http://localhost:8081/recipes?i={ingredient_1},{ingredient_2},{ingredient_3}
- A api somente aceita a quantidade de ingredientes maior que zero ou menor que quatro. Qualquer quantidade que não respeite essa regra será devolvido como 400 - Bad Request
- A api somente aceita nome de ingredientes em inglês.
- Caso não seja encontrado nenhuma receita com os ingredientes informados, será considerado como 204 - No Content.
Para a utilização da api giphy é necessário que seja utilizado uma api key que é obtida através do cadastro nesse link e criado um app, após isto é fornecido uma chave para que seja utilizado na api.
Para adicionar essa chave à api, basta ir na pasta api-recipes, abrir o arquivo .env e então substituir a informação put_key_here pela chave obtida no processo anterior (caso seja execução local) e também adicionar essa mesma chave no arquivo docker-compose.yml no enviroment GIPHY_API_KEY (caso seja execução via docker).
Observação 1: Dentro deste arquivo .env também é possível alterar a porta de execução da api (importante lembrar de também alterar a porta utilizada na execução do Dockerfile). Observação 2: Caso seja execução local e se houver desejo que seja cacheado o retorno dos repositories, é necessário modificar no arquivo .env o REDIS_ENABLE para true (padrão false).
A execução da api se da pelos seguintes passos:
- Recebe a requisição em seu único endpoint.
- Verifica se foram enviados os ingredientes.
- Se não foi enviado os ingredientes é devolvido o erro 400 - Bad Request.
- Se foi enviado, a api irá quebrar os ingredientes em um array de string que representa a property da resposta denominada "keywords".
- Com os ingredientes, consulta a api Recipe Puppy para obter as informações das receitas. Caso não encontre, devolve o erro 204 - No Content.
- Depois de obter as receitas, extrai as informações da resposta da api (title, ingredients, link) e devolve um objeto já com estas propriedades.
- Após isto, o sistema gera uma promise para cada receita devolvida nos passos anteriores e então executa de forma paralessa com o PromiseAll todas as requisições para buscar os gifs para a resposta.
- Com as respostas recebidas, ele adiciona o link do gif em uma propriedade gif no objeto das receitas previamente criadas e devolve para o usário junto da propriedade "keywords", conforme solicitação do desafio.