API em Node.js para encontrar receitas a partir de ingredientes.
Este projeto foi construído com as seguintes dependências:
Para obter uma cópia do projeto, clone este repositório executando o comando abaixo:
git clone https://github.com/ehomrich/recipes-api
cd recipes-api/
Insira sua chave de acesso à API do Giphy na variável GIPHY_API_KEY
em config/.env.example
e renomeie o arquivo para .env
(para maiores informações, consulte Configuração).
Em seguida, você pode instalar os pacotes localmente e executar o projeto ou construir e executar um container do Docker.
Instale as dependências com o gerenciador de pacotes de sua preferência e execute a aplicação com os comandos abaixo:
# yarn
yarn install
yarn start
# npm
npm install
npm start
Faça uma requisição à localhost:3000
e você deverá receber como resposta:
{
"message": "Hello world!"
}
Para fazer uso da API, consulte a referência.
Certifique-se de ter o Docker e o Docker Compose instalados em sua máquina.
Para auxiliar na utilização do Docker, o projeto disponibiliza os arquivos Dockerfile
e docker-compose.yml
na raiz do projeto.
Para construir a imagem do serviço, execute o comando:
docker-compose -f docker-compose.yml build
Para executar o projeto, utilize o comando:
docker-compose -f docker-compose.yml up
O projeto depende de três variáveis armazenadas em um arquivo de ambiente (.env
), no formato VAR=valor
.
As variáveis são:
GIPHY_API
: URL da API de buscas do Giphy. Obrigatória.
GIPHY_API_KEY
: chave de acesso à API do Giphy. Obrigatória.
Chaves podem ser solicitadas seguindo a documentação disponível em: https://developers.giphy.com/docs/
RECIPE_PUPPY_API
: URL da API pública do Recipe Puppy. Obrigatória.
Padrão: http://www.recipepuppy.com/api/
Um arquivo de modelo é disponibilizado em config/.env.example
. Basta criar uma cópia na mesma pasta, editar e renomear.
Se alguma das variáveis não for preenchida, será lançado um erro
Improperly configured
.
A API do projeto possui apenas um endpoint:
Este endpoint espera um parâmetro i
, contendo uma lista de ingredientes, respeitando a seguinte chamada:
http://{HOST}/recipes/?i={ingredient_1},{ingredient_2},{ingredient_3}
O parâmetro
i
deve obrigatoriamente possuir de 1 a 3 ingredientes.
A partir dos ingredientes informados, é realiza uma consulta à API do Recipe Puppy, e consultas à API do Giphy baseadas no título de cada receita obtida.
Exemplo:
http://localhost:3000/recipes/?i=onions,garlic
A resposta desta requisição será semelhante à seguinte:
{
"keywords":[
"onions",
"garlic"
],
"recipes":[
{
"title":"Roasted Garlic Grilling Sauce",
"ingredients":[
"garlic",
"hot sauce",
"onions"
],
"link":"http://www.kraftfoods.com/kf/recipes/roasted-garlic-grilling-sauce-56344.aspx",
"gif":"https://media1.giphy.com/media/Q4PcMC8apFXBm/giphy.gif"
},
{
"title":"Steamed Mussels I",
"ingredients":[
"garlic",
"mussels",
"onions"
],
"link":"http://allrecipes.com/Recipe/Steamed-Mussels-I/Detail.aspx",
"gif":"https://media1.giphy.com/media/iix3nosdByWLm/giphy.gif"
},
...
]
}
A API do Recipe Puppy retorna, por padrão, 10 receitas por página.
Parâmetros i
de entrada que não possuam de 1 a 3 ingredientes receberão como resposta o seguinte erro:
{
"status": 400,
"error": "Invalid parameter",
"message": "Incorrectly formatted request or missing required parameters"
}
Problemas relacionados à indisponibilidade das APIs do Recipe Puppy e do Giphy, bem como falhas de autenticação e de processamento destes serviços gerarão respostas no formato acima.