O silêncio não prova que nada aconteceu
Imagine que uma aplicação envia uma encomenda, o servidor a grava e a resposta se perde na rede. O cliente vê um erro e tenta novamente. Se cada tentativa criar uma encomenda, uma falha de comunicação transforma-se num problema de negócio. É por isso que «repetir até funcionar» não é uma estratégia suficiente.
Um timeout limita quanto tempo o chamador espera; não desfaz automaticamente aquilo que o serviço remoto já executou. A interface deve conseguir distinguir falha confirmada de resultado ainda desconhecido. Quando necessário, permita consultar o estado da operação antes de criar outra.
Dê identidade à operação
Uma chave de idempotência identifica a mesma intenção ao longo das tentativas. O servidor precisa de guardar e reconhecer essa chave, associando-a ao resultado. Gerar uma chave diferente em cada repetição perde o propósito. O tratamento de pedidos simultâneos também precisa de impedir que duas execuções sejam aceites como novas.
Isto não significa ignorar diferenças. Reutilizar a mesma chave com um valor ou destinatário diferente deve ser tratado explicitamente pela API. Defina ainda a duração de retenção da chave e o comportamento depois desse período. A garantia depende do contrato e da implementação, não do nome do cabeçalho.
Repetir menos pode recuperar melhor
Para falhas transitórias, use tentativas limitadas e intervalos crescentes. Uma variação aleatória, chamada jitter, evita que todos regressem exactamente ao mesmo tempo. Não aplique a mesma lógica a uma credencial inválida ou a dados rejeitados: esperar raramente corrige esses problemas. Respeite as orientações e limites do serviço chamado.
Observe também as camadas: se a aplicação, a biblioteca e o serviço intermédio repetem sem coordenação, um pedido pode multiplicar a carga. Escolha onde controlar as tentativas e acompanhe resultados desconhecidos. A mensagem ao utilizador deve explicar o próximo passo possível, sem prometer que a operação falhou quando ainda não sabe.
Teste a resposta que nunca chega
Num ambiente de testes, simule uma resposta perdida depois de gravar uma operação. Repita o pedido com a mesma chave e confirme que existe apenas um resultado. Depois teste duas tentativas simultâneas e uma chave reutilizada com dados diferentes. Documente o comportamento esperado antes de testar; sucesso é preservar a intenção do utilizador.
Fontes & leitura complementar
- AWS — Retry with backoff pattern ↗
- AWS Builders’ Library — Timeouts, retries, and backoff with jitter ↗
Fontes consultadas em 24 de Outubro de 2026. Os exemplos numéricos e cenários apresentados são ilustrativos.
Vamos pôr este conhecimento em prática?
Podemos trabalhar juntos no desafio da sua equipa ou no seu próximo projecto.
Falar com Calembe ↗