Tempo de leitura: 4 minutos

Quando dependemos de APIs externas, é essencial ter estratégias de fallback para garantir que seu site continue funcionando mesmo quando serviços de terceiros falham. Implementar esses mecanismos de contingência é fundamental para manter a experiência do usuário.

As APIs externas podem falhar por diversos motivos: manutenção programada, problemas de rede, mudanças na estrutura de dados ou até mesmo o encerramento do serviço. Sem um plano B, seu site pode apresentar erros, telas em branco ou funcionalidades quebradas.

Por que implementar fallbacks para APIs externas é crucial

Imagine que seu site depende de uma API de previsão do tempo, pagamento ou mapas. Se essa API ficar indisponível, parte significativa da experiência do usuário pode ser comprometida. Implementar fallbacks não é apenas uma boa prática – é uma necessidade para sites robustos.

Segundo pesquisas da Akamai, um tempo de carregamento superior a 3 segundos pode aumentar a taxa de abandono em até 40%. APIs que não respondem contribuem diretamente para esse problema.

A implementação de fallbacks também está alinhada com os princípios de desenvolvimento web progressivo, onde a funcionalidade básica deve estar garantida mesmo em condições adversas.

Estratégias eficazes de fallback para APIs externas

Existem diversas abordagens que você pode implementar para lidar com a indisponibilidade de APIs externas:

  1. Cache local: Armazene as respostas mais recentes da API no localStorage, sessionStorage ou IndexedDB do navegador. Quando a API falhar, utilize os dados em cache.
  2. Cache no servidor: Mantenha cópias dos dados da API em seu servidor e atualize-os periodicamente. Se a API externa falhar, seu servidor fornecerá os dados em cache.
  3. Conteúdo estático de fallback: Prepare conteúdo estático predefinido para exibir quando a API estiver indisponível.
  4. Degradação graciosa: Desative apenas a funcionalidade específica que depende da API, mantendo o resto do site funcionando normalmente.
  5. APIs alternativas: Tenha integrações com serviços alternativos que ofereçam funcionalidades similares.

Implementando um sistema de cache para APIs externas

O cache é uma das estratégias mais eficazes para lidar com APIs indisponíveis. Veja como implementar um sistema básico de cache no frontend:

// Função para buscar dados com fallback de cache
async function fetchWithFallback(url, cacheTime = 3600000) {
// Tenta buscar do cache primeiro
const cachedData = localStorage.getItem(url);
const cachedTime = localStorage.getItem(`${url}_time`);

// Verifica se o cache existe e não está expirado
if (cachedData && cachedTime && (Date.now() – cachedTime < cacheTime)) {
return JSON.parse(cachedData);
}

try {
// Tenta buscar da API
const response = await fetch(url);
if (!response.ok) throw new Error('API indisponível');

const data = await response.json();

// Atualiza o cache
localStorage.setItem(url, JSON.stringify(data));
localStorage.setItem(`${url}_time`, Date.now());

return data;
} catch (error) {
console.error('Erro ao acessar API:', error);

// Retorna cache mesmo expirado, se existir
if (cachedData) {
return JSON.parse(cachedData);
}

// Retorna dados de fallback predefinidos
return getFallbackData(url);
}
}

// Função que retorna dados de fallback baseados na URL
function getFallbackData(url) {
// Implementação específica para cada endpoint
if (url.includes('weather')) {
return { temperature: 'Indisponível', conditions: 'Dados temporariamente indisponíveis' };
}
// Outros fallbacks…

return { error: 'Serviço temporariamente indisponível' };
}

Monitoramento e detecção de falhas em APIs

Para implementar fallbacks eficazes, é essencial detectar rapidamente quando uma API externa falha. Considere estas técnicas:

  • Timeouts adequados: Configure timeouts razoáveis para evitar que seu site fique “esperando” indefinidamente por uma resposta.
  • Circuit breakers: Implemente o padrão circuit breaker para evitar chamadas repetidas a APIs com falha.
  • Health checks: Verifique periodicamente a disponibilidade das APIs externas.
  • Logs e alertas: Mantenha registros de falhas e configure alertas para ser notificado quando APIs críticas estiverem indisponíveis.

“A resiliência não é apenas sobre recuperar-se de falhas, mas sobre projetar sistemas que continuem funcionando apesar das falhas. Quando trabalhamos com APIs externas, devemos sempre assumir que elas falharão em algum momento.” – Martin Fowler, especialista em arquitetura de software

Degradação graciosa de funcionalidades

A degradação graciosa é uma abordagem onde seu site continua funcionando, mesmo que com funcionalidades reduzidas, quando serviços externos falham. Isso é preferível a exibir erros ou telas em branco.

Por exemplo, se sua loja virtual usa uma API externa para recomendações personalizadas, você pode mostrar produtos populares ou em promoção quando essa API falhar, em vez de deixar a seção vazia ou exibir um erro.

Exemplo prático de degradação graciosa

// Componente que exibe recomendações de produtos
async function showProductRecommendations(userId) {
const recommendationsSection = document.getElementById(‘recommendations’);

try {
// Tenta obter recomendações personalizadas
const personalizedRecs = await fetchWithFallback(`/api/recommendations/${userId}`, 1800000);
displayProducts(recommendationsSection, personalizedRecs, ‘Recomendados para você’);
} catch (error) {
try {
// Fallback 1: Mostrar produtos populares
const popularProducts = await fetchWithFallback(‘/api/products/popular’, 3600000);
displayProducts(recommendationsSection, popularProducts, ‘Produtos populares’);
} catch (secondError) {
// Fallback 2: Mostrar produtos em promoção armazenados localmente
const promotions = getLocalPromotions();
if (promotions.length > 0) {
displayProducts(recommendationsSection, promotions, ‘Ofertas especiais’);
} else {
// Fallback 3: Ocultar a seção graciosamente
recommendationsSection.style.display = ‘none’;
}
}
}
}

Comunicando problemas aos usuários

Quando um fallback é ativado, é importante comunicar isso aos usuários de forma transparente, mas sem causar alarme desnecessário. Considere estas práticas:

  • Use mensagens claras e amigáveis que expliquem a situação
  • Ofereça alternativas quando possível
  • Evite termos técnicos como “API indisponível” ou “erro 503”
  • Forneça um mecanismo para o usuário tentar novamente

// Exemplo de comunicação amigável
function showApiUnavailableMessage(container, feature) {
container.innerHTML = `

Os dados de ${feature} estão temporariamente indisponíveis.
Estamos mostrando informações que podem não estar atualizadas.

`;
}

“A transparência na comunicação com os usuários é crucial quando sistemas falham. Uma mensagem clara e honesta pode transformar uma experiência potencialmente frustrante em uma demonstração de confiabilidade.” – Steve Krug, autor de “Don’t Make Me Think”

Testando seus fallbacks

Não espere que uma API externa falhe para descobrir se seus fallbacks funcionam. Teste-os proativamente:

  1. Testes simulados: Use ferramentas como Mock Service Worker para simular falhas de API
  2. Chaos engineering: Introduza falhas deliberadamente em ambientes controlados
  3. Testes de carga: Verifique como seu sistema se comporta sob alta demanda
  4. Testes de resiliência: Simule diferentes cenários de falha (timeout, erro 500, resposta malformada)

Ferramentas para testar fallbacks

Existem diversas ferramentas que podem ajudar a testar a resiliência do seu site:

  • Chaos Monkey: Ferramenta da Netflix para testar resiliência
  • Postman: Permite simular diferentes respostas de API
  • Nock: Biblioteca para mockar requisições HTTP em Node.js
  • DevTools do navegador: Use a aba Network para simular offline ou conexões lentas

Conclusão: Construindo sites resilientes

Implementar fallbacks para APIs externas não é apenas uma boa prática técnica, mas um componente essencial de uma experiência de usuário robusta. Ao planejar para falhas, você demonstra profissionalismo e cuidado com seus usuários.

Lembre-se de que a melhor abordagem geralmente combina várias estratégias: cache local, degradação graciosa, conteúdo alternativo e comunicação transparente. O objetivo não é apenas “ter um plano B”, mas criar uma experiência que permaneça útil e agradável mesmo quando serviços externos falham.

Ao implementar estas estratégias em seu site, você não apenas melhorará a experiência do usuário, mas também reduzirá a dependência de serviços externos, tornando seu projeto mais robusto e confiável a longo prazo.

Quais APIs externas seu site utiliza atualmente e que estratégias de fallback você já implementou para elas? Compartilhe sua experiência para que possamos discutir soluções específicas para o seu caso.

Avatar de Rafael P.

Perguntas Frequentes

O que são APIs externas e por que dependemos delas?

APIs externas são interfaces que permitem que diferentes sistemas se comuniquem entre si. Dependemos delas para acessar dados e serviços que não estão hospedados em nosso próprio servidor, como informações meteorológicas, dados de pagamento, ou serviços de autenticação.

Quais são algumas estratégias de fallback que posso implementar?

Algumas estratégias de fallback incluem o uso de caches para armazenar dados previamente recuperados, implementação de serviços alternativos para obter as mesmas informações, ou uma abordagem de degrade gracioso que oferece funcionalidade limitada quando a API está indisponível.

Como posso monitorar a disponibilidade das APIs que utilizo?

Você pode implementar ferramentas de monitoramento que verificam periodicamente a disponibilidade das APIs. Isso pode ser feito através de requisições programadas que registram o tempo de resposta e o status da API, permitindo que você tome ações quando uma falha é detectada.

O que significa ‘degrade gracioso’ e como aplicá-lo?

Degrade gracioso é uma abordagem onde o sistema continua a funcionar de forma limitada, mesmo quando partes dele falham. Você pode aplicar isso ao fornecer uma mensagem amigável ao usuário ou funcionalidades alternativas que não dependem da API externa.

Como posso testar a eficácia do meu plano de fallback?

Você pode testar seu plano de fallback simulando falhas nas APIs externas. Isso pode ser feito desativando a conexão com a API em um ambiente de teste ou usando ferramentas que simulam respostas de erro, permitindo que você veja como seu sistema se comporta e se o fallback é acionado corretamente.

O caminho até aqui

Início » Checklist » Integrações e APIs » Existe um fallback quando as APIs externas não estão disponíveis?

Compartilhe sua opinião e ajude na próxima atualização do artigo.

Somente membros podem interagir com o conteúdo.