Olá, pessoal!
Hoje vim compartilhar com vocês um código que fiz para fazer N chamadas para um determinado end-point.
Para testar fiz uma POC para validar o código e testar o desempenho.
Explicando o cenário
Preciso lidar com duas etapas principais:
- Fazer uma chamada para uma API que retorna uma lista de items.
- Com a lista retornada no passo anterior, chamar um segundo end-point passando um ID (retornado no passo anterior) para chamar o segundo end-point que busca mais detalhes.
Para fazer esse teste, estou utilizando a API aberta do site The Cat API.
- Primeiro eu chamo o end-point onde eu recebo uma lista de raças de gatos
- Depois chamo o segundo end-point onde eu uso para buscar os detalhes da raça dos gatos (Ex.: origem da raça, nível de energia, se são amigáveis, etc).
Então vamos para o código:
// Função para buscar uma lista de raças de gatos
async function getCats() {
const URL =
"https://api.thecatapi.com/v1/images/search?has_breeds=1&order=rand&limit=10";
const headers = new Headers({
"Content-Type": "application/json",
});
const requestOptions = {
method: "GET",
headers: headers,
redirect: "follow",
};
try {
const response = await fetch(URL, requestOptions);
return await response.json();
} catch (err) {
console.error(`Aconteceu um erro não esperado. Detalhes: ${err}`);
}
}
// Função para buscar os detalhes de cada raça de gato
async function getCatDetails(cats) {
const headers = new Headers({
"Content-Type": "application/json",
});
const requestOptions = {
method: "GET",
headers: headers,
redirect: "follow",
};
// Monta a lista de URLs para obter os detalhes de cada gato
const urls = cats.map((cat) => `https://api.thecatapi.com/v1/images/${cat.id}`);
// Faz as chamadas assíncronas usando Promise.all
try {
const catDetails = await Promise.all(
urls.map(async (url) => {
const response = await fetch(url, requestOptions);
return await response.json();
})
);
return catDetails;
} catch (err) {
console.error(`Aconteceu um erro não esperado. Detalhes: ${err}`);
}
}
// Função principal para executar o processo
(async () => {
// Obtém uma lista aleatória de 10 raças de gatos
const cats = await getCats();
if (cats.length === 0) {
console.error("Não foi possível obter a lista de gatos.");
return;
}
// Busca os detalhes de cada raça de gato
const catDetails = await getCatDetails(cats);
console.log(catDetails);
})();
Fiz um código bem simples e adicionei alguns comentários para facilitar o entendimento.
É isso pessoal, espero que o código sirva para ajudar alguém. Se vocês tiverem alguma outra forma mais performática de fazer essas chamadas, por favor, deixe nos comentários.
Obrigado e até mais.