Guias

Repita uma consulta que falhou do jeito certo

Uma nova tentativa automática é a atitude certa para alguns erros e um desperdício de requisição para outros. Errar nisso sobrecarrega um endpoint já com dificuldades ou faz você desistir de uma consulta que teria funcionado um segundo depois.

Erros que vale a pena tentar de novo

Uma resposta 503 significa que o serviço está temporariamente indisponível, que é exatamente o tipo de condição transitória para a qual uma nova tentativa curta e com atraso foi feita. Um tempo limite de rede do seu lado, em que você nunca recebeu resposta, entra na mesma categoria, já que a requisição pode ou não ter sido processada.

HTTP/1.1 503 Service Unavailable

{
  "status": "error",
  "error": {"code": "service_unavailable", "message": "Temporarily unavailable, try again shortly"}
}

Erros que não vale a pena tentar de novo

Um 400 significa que a própria requisição estava malformada, como um parâmetro obrigatório ausente ou coordenadas fora do intervalo. Um 401 significa que a autenticação falhou. Tentar de novo em qualquer um desses casos sem corrigir o problema de fundo só gera o mesmo erro outra vez, e cada tentativa ainda conta como requisição na maioria dos casos, então um loop de novas tentativas contra uma requisição inválida pode consumir a sua cota por nada.

Aumentando o intervalo entre as tentativas

Um atraso curto e fixo serve para uma única consulta interativa, mas uma tarefa em lote que repete muitos itens com falha deve aumentar o intervalo progressivamente, dobrando a espera entre as tentativas até um teto razoável, para que uma breve indisponibilidade não se transforme em uma enxurrada de novas tentativas no momento em que o serviço voltar.

O 429 é um caso à parte

Um 429 não é bem uma falha a ser repetida, e sim um sinal para pausar. Leia o cabeçalho X-Quota-Reset e espere até esse momento, em vez de tentar de novo com um atraso curto e fixo, já que tentar antes da reinicialização só vai gerar o mesmo 429 repetidamente.

Tendo em mente o custo das requisições

Cada nova tentativa que chega ao servidor, bem-sucedida ou não, é uma requisição. Uma estratégia de novas tentativas que respeita a diferença entre erros transitórios e permanentes mantém a sua cota diária e o seu crédito pré-pago gastos em trabalho real, e não em falhas repetidas.

Distinguir "tente de novo" de "corrija isto primeiro" é a maior parte do que uma boa estratégia de novas tentativas exige. A página de erros lista todos os códigos de erro que a API retorna e o que aciona cada um.