Ошибки и устранение неполадок

Isochrones API возвращает ошибки в стандартном формате JSON google.rpc.Status Google Cloud:

{
  "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"
  }
}

Чтобы обрабатывать ошибки программно, используйте поле status (или HTTP code). Текст message предназначен для разработчиков и может меняться, поэтому не анализируйте его.

При работе с Isochrones API вы можете столкнуться со следующими распространенными кодами статуса ошибки:

  • 400 INVALID_ARGUMENT. Запрос содержит недопустимые параметры или синтаксические ошибки.
    • Ограничения по продолжительности. Убедитесь, что значение travelDuration не меньше "1s", заканчивается на "s" (например, "1800s") и не превышает ограничение для режима: 3600s (60 минут) для DRIVE и TWO_WHEELER или 7200s (120 минут) для WALK и BICYCLE. Нулевые ("0s"), отрицательные и дробные значения меньше одной секунды (например, "0.5s") не принимаются.
    • Предпочтительный трафик. Убедитесь, что для параметра routingPreference не задано значение TRAFFIC_AWARE, если для параметра travelMode задано значение WALK или BICYCLE. Информация о загруженности дорог поддерживается только для DRIVE и TWO_WHEELER.
    • Обязательные перечисления. Убедитесь, что указаны оба перечисления – travelMode и travelDirection (FROM или TO) – и для них не задано значение *_UNSPECIFIED.
    • Координаты пункта отправления (location). Задайте latitude (в [-90, 90]) и longitude (в [-180, 180]). Если поле не заполнено, оно обрабатывается как 0 без ошибки. Если не заполнены оба поля, возвращается значение (0, 0), которое отклоняется. Если не заполнено только поле latitude, пункт отправления помещается на экватор, а если только поле longitude – на нулевой меридиан.
    • Формат идентификатора места (place). Убедитесь, что place – это идентификатор места или название ресурса places/{place_id} (например, "places/ChIJIQBpAG2ahYAR_6128GcTUEo") без дополнительных сегментов пути и что он ссылается на действительный идентификатор места.
    • Маска поля (X-Goog-FieldMask). Если она указана, заголовок должен ссылаться на действительные пути ответа, такие как isochrone, isochrone.geoJson или *.
    • Недопустимый ключ API (API_KEY_INVALID). Неправильно сформированный или нераспознанный ключ API в X-Goog-Api-Key или ?key= возвращает 400 INVALID_ARGUMENT с причиной API_KEY_INVALID.
  • 403 PERMISSION_DENIED: ошибка аутентификации или авторизации.
    • В запросе не указаны учетные данные (токен X-Goog-Api-Key, ?key= или Authorization: Bearer).
    • Isochrones API (isochrones.googleapis.com) не включен в вашем облачном проекте Google Cloud или для него не включены платежи.
    • Ваш ключ API имеет ограничения по целевому API, IP-адресу или заголовку HTTP referer, которые блокируют запросы к isochrones.googleapis.com.
  • 404 NOT_FOUND: не удалось определить пункт отправления или привязать его к дорожной сети.
    • Не удалось определить местоположение по значению place. Проверьте, действителен ли идентификатор места.
    • Центроид пункта отправления location или пункта назначения place находится дальше от сегмента дороги, совместимого с режимом, чем максимальное расстояние привязки (около 200 метров или меньше для WALK и BICYCLE). Переместите координату ближе к дороге общего пользования или передайте координаты въезда на дорогу вместо идентификатора места большого парка или достопримечательности.
    • Координаты указывают на область, где нет дорог (например, в океане).
  • 429 RESOURCE_EXHAUSTED: в вашем проекте превышена квота на количество запросов в минуту (по умолчанию 300).

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

    Ограничьте частоту запросов клиента и повторите попытку отправки ответов 429, используя экспоненциальную выдержку со случайным дрожанием.

  • 503 UNAVAILABLE: сервис временно недоступен или перегружен. Повторите запрос, используя экспоненциальную выдержку.

  • 500 INTERNAL – произошла внутренняя ошибка сервера, например истекло время ожидания ответа от серверной части. Повторите запрос, используя экспоненциальную выдержку.