Erros e solução de problemas

A API Isochrones retorna erros usando o formato JSON padrão do Google Cloud google.rpc.Status:

{
  "error": {
    "code": 400,
    "message": "Violation in GenerateIsochroneRequest.travel_duration: travel_duration must be at least 1 second and not exceed 3600 seconds (60 minutes) for DRIVE or TWO_WHEELER mode or 7200 seconds (120 minutes) for other modes",
    "status": "INVALID_ARGUMENT"
  }
}

Use o campo status (ou HTTP code) para processar erros de maneira programática. O texto message é destinado a desenvolvedores e pode mudar. Por isso, não o analise.

Ao trabalhar com a API Isochrones, você pode encontrar os seguintes códigos de status de erro comuns:

  • 400 INVALID_ARGUMENT: a solicitação contém parâmetros inválidos ou sintaxe incorreta:
    • Limites de duração: verifique se travelDuration é pelo menos "1s", termina com "s" (como "1800s") e não excede o limite do modo: 3600s (60 minutos) para DRIVE e TWO_WHEELER ou 7200s (120 minutos) para WALK e BICYCLE. Zero ("0s"), valores negativos e valores inferiores a 1 segundo (como "0.5s") são rejeitados.
    • Preferência de tráfego: verifique se routingPreference não está definido como TRAFFIC_AWARE quando travelMode é WALK ou BICYCLE. O tráfego em tempo real só é compatível com DRIVE e TWO_WHEELER.
    • Tipos enumerados obrigatórios: verifique se travelMode e travelDirection (FROM ou TO) estão especificados e não estão definidos como *_UNSPECIFIED.
    • Coordenadas de origem (location): defina latitude (em [-90, 90]) e longitude (em [-180, 180]). Um campo omitido é tratado como 0 sem um erro: omitir ambos resulta em (0, 0), que é rejeitado; omitir apenas latitude coloca a origem no equador; e omitir apenas longitude a coloca no meridiano principal.
    • Formato do ID de lugar (place): verifique se place é um ID de lugar ou um nome de recurso places/{place_id} (por exemplo, "places/ChIJIQBpAG2ahYAR_6128GcTUEo"), sem segmentos de caminho extras, e se refere a um ID de lugar válido.
    • Máscara de campo (X-Goog-FieldMask): se fornecido, o cabeçalho precisa fazer referência a caminhos de resposta válidos, como isochrone, isochrone.geoJson ou *.
    • Chave de API inválida (API_KEY_INVALID): uma chave de API malformada ou não reconhecida em X-Goog-Api-Key ou ?key= retorna 400 INVALID_ARGUMENT com o motivo API_KEY_INVALID.
  • 403 PERMISSION_DENIED: falha na autenticação ou autorização:
    • Nenhuma credencial de autenticação (token X-Goog-Api-Key, ?key= ou Authorization: Bearer) foi fornecida na solicitação.
    • A API Isochrones (isochrones.googleapis.com) não está ativada no seu projeto na nuvem do Google Cloud ou o faturamento não está ativado.
    • Sua chave de API tem restrições de destino de API, endereço IP ou referenciador HTTP que bloqueiam solicitações para isochrones.googleapis.com.
  • 404 NOT_FOUND: não foi possível resolver ou ajustar a origem à rede de vias:
    • Não foi possível resolver o place para um local. Verifique se o ID de lugar é válido e atual.
    • O centroide de origem location ou place está mais distante de um segmento de via compatível com o modo do que a distância máxima de ajuste (cerca de 200 metros ou menos para WALK e BICYCLE). Mova a coordenada para mais perto de uma via pública ou transmita coordenadas de entrada de via em vez de um ID de lugar de um grande parque ou ponto de referência.
    • A coordenada está em uma área sem dados de vias (como o oceano aberto).
  • 429 RESOURCE_EXHAUSTED: seu projeto excedeu o limite de cota por minuto (padrão de 300 solicitações por minuto):

    {
      "error": {
        "code": 429,
        "message": "Quota exceeded for quota metric 'Requests' and limit 'Requests per minute' of service 'isochrones.googleapis.com'.",
        "status": "RESOURCE_EXHAUSTED"
      }
    }
    

    Limite as taxas de solicitação do cliente e tente novamente as respostas 429 usando a espera exponencial com instabilidade aleatória.

  • 503 UNAVAILABLE: o serviço está temporariamente indisponível ou sobrecarregado. Tente fazer a solicitação outra vez usando a espera exponencial.

  • 500 INTERNAL: ocorreu um erro interno do servidor, como um tempo limite de back-end. Tente fazer a solicitação outra vez usando a espera exponencial.