Ограничения на использование веб-служб Google Maps APIs

Эта страница предназначена только для пользователей, которые владеют лицензией на ранее выпускавшиеся продукты Maps APIs for Work или Maps API for Business. Эта страница не предназначена для пользователей нового продукта Google Maps APIs Premium Plan, который стал доступен в январе 2016 года.

Декабрь 2011 г.

При использовании веб-служб Google Maps APIs действуют определенные лимиты количества запросов за 24 часа. При отправке сверхлимитных запросов возвращается сообщение об ошибке.

Лимиты использования указаны в документе Часто задаваемые вопросы по лицензиям на ранее выпускавшиеся продукты Google Maps APIs for Work.

Эта статья адресована тем пользователям Google Maps APIs for Work, которые достигли лимитов использования и могут нуждаться в оптимизации приложений для более эффективного использования веб-служб.

Основы

Google Maps предоставляет веб-службы как интерфейс для запроса картографических данных Google для использования в ваших приложениях. Эти службы разрешается использовать только в сочетании с картами Google; использование данных этих служб без отображения на картах Google запрещено. Подробную информацию можно найти в разделе "Лицензионные ограничения" в Условиях использования Google Maps APIs.

Существует два типа квот, ограничивающих использование веб-служб Google Maps APIs: долгосрочная квота (дневная) и краткосрочная квота (частота запросов). При превышении лимитов использования или иных злоупотреблениях службой эта веб-службы может вернуть соответствующее сообщение об ошибке. При постоянном превышении ограничений ваш доступ к веб-службе может быть заблокирован. Также возможно получение ответов с ошибкой "403 Forbidden".

Примечание. К API на стороне клиента применяются разные ограничения.Maps JavaScript API имеют ограничение на частоту запросов в каждом сеансе работы с картой, поэтому эти запросы распределяются между пользователями. Это обеспечивает масштабирование использования на основе браузера с ростом числа пользователей. Информацию о выборе между веб-службами на стороне сервера и их эквивалентом на стороне клиента можно найти в документе Стратегии геокодирования.

Problems

Превышение лимитов использования Google Maps APIs может возникнуть в следующих случаях.

  • Выполняется отправка слишком большого количества запросов в день.
  • Происходит слишком быстрая отправка запросов, т. е. слишком много запросов в секунду.
  • Происходит слишком быстрая отправка запросов в течение длительного времени или злоупотребление веб-службой.
  • Превышение других лимитов использования, например, числа точек в запросе Google Maps Elevation API.

Превышение ограничения на использование

При превышении лимитов использования отобразится код состояния OVER_QUERY_LIMIT.

Это означает, что веб-служба остановит отправку запросов и будет возвращать только код состояния OVER_QUERY_LIMIT, пока использование снова не будет доступно. Возможны следующие варианты возобновления работы API.

  • В течение нескольких секунд, если ошибка возникла в результате отправки слишком большого числа запросов в секунду.
  • В течение 24 часов, если ошибка возникла в результате отправки приложением слишком большого числа запросов в день. Сброс дневной квоты происходит в полночь по Тихоокеанскому времени.

В этой демонстрации приведено пошаговое объяснение процесса регулирования запросов и обработки ошибок, применяемого во всех веб-службах.

После получения ответа с кодом состояния OVER_QUERY_LIMIT ваше приложение должно определить, какой лимит использования был превышен. Для этого можно повторно отправить тот же запрос через 2 секунды. Если ответ снова содержит код состояния OVER_QUERY_LIMIT, это значит, что ваше приложение отправляет слишком много запросов в день. В противном случае ваше приложение отправляет слишком много запросов в секунду.

Пример реализации в Python:

url = "MAPS_API_WEBSERVICE_URL"
attempts = 0
success = False

while success != True and attempts < 3:
  raw_result = urllib.urlopen(url).read()
  attempts += 1
  # The GetStatus function parses the answer and returns the status code
  # This function is out of the scope of this example (you can use a SDK).
  status = GetStatus(raw_result)
  if status == "OVER_QUERY_LIMIT":
    time.sleep(2)
    # retry
    continue
  success = True

if attempts == 3:
  # send an alert as this means that the daily limit has been reached
  print "Daily limit has been reached"

Примечание. Ошибка OVER_QUERY_LIMIT также может выдаваться в следующих случаях:

Приложения должны проверять соблюдение этих ограничений перед отправкой запросов.

Ответ HTTP 403

Запросы веб-служб могут также получать в ответе ошибку HTTP 403 (Forbidden). В большинстве случаев это связано с недопустимой подписью URL. Чтобы проверить это, удалите параметры client и signature, после чего повторите попытку:

  • Ответ HTTP 200 (OK) означает, что проблема была в подписи.
    Эта проблема не связана с лимитами использования. Более подробную информацию можно найти в разделе Устранение неполадок, связанных с аутентификацией главы Веб-службы документации по Google Maps APIs for Work.
  • Если вы получите ответ HTTP 403 (Forbidden), проблема может быть связана как с подписью, так и с лимитами использования.
    Обычно это означает, что ваш доступ к веб-службе заблокирован из-за того, что ваше приложение слишком долго превышало ограничения использования или иным образом нарушало условия использования веб-службы. Если у вас возникнет эта проблема, воспользуйтесь Google Cloud Support Portal. Контактная информация также указана на странице Поддержка и ресурсы.

Для всех запросов веб-служб требуются подписи URL. Также запросы могут отклоняться с сообщением об ошибке HTTP 403 (Forbidden), если в них указан параметр client, но нет параметра signature, или наоборот.

Решения

Вышеуказанные проблемы можно решить с помощью сочетания двух следующих подходов.

  1. Сокращение использования веб-служб путем оптимизации приложений.
  2. Приобретение дополнительной квоты для лицензии на Google Maps APIs for Work, чтобы увеличить лимиты использования.

В этой статье описываются способы оптимизации приложений для более эффективного использования веб-служб.

Проверки целесообразности

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

Проверьте свой вариант использования

Веб-службы Google Maps APIs лучше всего подходят для приложений, в которых конечные пользователи не вводят данные в реальном времени или не используют браузер. Обычно это бывает при получении набора данных, не зависящего от ввода данных пользователями. У вас может быть база данных с фиксированным набором адресов, для которых нужно провести геокодирование, например набор объектов, продаваемых на сайте агентства недвижимости, или список адресов магазинов.

При использовании веб-служб Google Maps APIs все запросы используют квоты (дневную квоту и квоту числа запросов в секунду), установленные для вашего идентификатора клиента. Эти квоты являются глобальными для каждого идентификатора клиента, вне зависимости от того, с какого количества IP-адресов отправляются запросы.

Использование служб Maps JavaScript API в браузере на стороне клиента имеет ограничения по частоте для каждого сеанса работы с картой. Это означает, что запросы распределяются между всеми пользователями и масштабируются по мере увеличения количества пользователей. Поэтому рекомендуется по мере возможности использовать API на стороне клиента. Они лучше всего подходят в ситуациях, когда вы получаете от пользователей адреса для геокодирования в реальном времени, например, для поиска магазинов рядом с домом пользователя.

Более подробное обсуждение этой темы можно найти в документе Стратегии геокодирования. Хотя рекомендации, приведенные в этом документе, относятся к геокодированию, они справедливы для всех веб-служб и поясняют, когда следует использовать веб-службы на стороне сервера, а когда их аналоги на стороне клиента.

Использование лицензии на Google Maps APIs for Work

Если у вас есть лицензия на Google Maps APIs for Work, ваши запросы должны обязательно содержать правильный идентификатор клиента.

Пользователям Google Maps APIs for Work предоставляются более высокие лимиты использования веб-служб Google Maps APIs, чем пользователям бесплатной версии API. Для использования этого преимущества ваши приложения должны правильно указывать параметр client, как описано в главе Веб-службы настоящего руководства.

Приложения, которые не используют идентификатор клиента Google Maps APIs for Work надлежащим образом, не рассматриваются как приложения премиум-пользователей, не имеют доступа к премиум-возможностям и квотам, на них не действует Соглашение об уровне обслуживания Google Maps APIs for Work, они не имеют права на техническую поддержку и для них действуют обычные лицензионные ограничения из Условий использования Google Maps APIs.

Как выполнить оптимизацию

Повышение эффективности использования веб-служб имеет две основных цели: сокращение использования посредством отправки запросов только при необходимости и равномерное распределение использования для соблюдения лимитов.

Кэширование результатов

В разделе 10.5.d Условий использования Google Maps APIs говорится, что вы можете хранить ограниченные объемы Контента исключительно для целей повышения производительности вашей реализации Google Maps APIs для компенсации задержки сети (а не для того, чтобы препятствовать Google в точном отслеживании использования), и только если такое хранение: будет временным (и его срок ни при каких обстоятельствах не будет превышать 30 календарных дней); будет защищенным; не будет включать изменение или объединение любых частей Контента или Службы; и не будет включать какого-либо изменения указаний авторства..

Это означает, что вы можете использовать временный кэш ответов веб-служб, чтобы не отправлять дублирующиеся запросы через короткие промежутки времени. Ответы веб-служб всегда содержат заголовок HTTP Cache-Control, указывающий время хранения результатов в кэше. В настоящее время это 24 часа:

Cache-Control: public, max-age=86400

Этот заголовок всегда следует учитывать. Кэширование может быть реализовано с помощью прокси-серверов автоматически или с помощью вашего приложения. Некоторые клиентские библиотеки НТТР также кэшируют ответы НТТР.

Чтобы увеличить процент обращений в кэш, координаты LatLng следует округлять до 6 знаков после запятой, что обеспечивает точность до 11 см в области экватора. Отправляемые веб-службами результаты не изменятся при добавлении дополнительных знаков после запятой, однако при этом уменьшится процент обращений в кэш.

Регулирование запросов

Приложения должны регулировать запросы, чтобы не превышать лимиты использования. При этом нужно учитывать, что лимиты действуют для каждого идентификатора клиента вне зависимости от того, с какого количества IP-адресов отправляются запросы.

Вы можете регулировать запросы, помещая их в очередь, которая будет отслеживать время отправки запросов. Если установлен лимит частоты 10 QPS (запросов в секунду), при отправке 11-го запроса ваше приложение должно проверить временную метку первого запроса и ждать, пока не пройдет 1 секунда. То же самое следует сделать и в отношении дневных лимитов.

При правильной реализации регулировки приложения должны следить за ответами с кодом состояния OVER_QUERY_LIMIT. При получении такого ответа нужно использовать механизм приостановки и повтора, описанный в разделе Превышение ограничения на использование выше, чтобы определить, какой лимит превышен.

Обработка скопившихся запросов

При правильной реализации регулировки запросы веб-служб не будут отправляться в случае превышения лимитов использования. Однако приложения могут получать запросы пользователей в большем объеме или с более высокой частотой, чем это допускается лимитами использования веб-служб. При этом очереди могут значительно вырасти, и появятся скопления запросов, ожидающих исполнения.

Ваши приложения могут использовать весь дневной лимит при обработке большого скопления. Если система регулировки очередей для дневных лимитов реализована правильно, приложение перестанет отправлять запросы. В противном случае при отправке дополнительных запросов будут получены ответы с кодом состояния OVER_QUERY_LIMIT. В обоих случаях скопления не будут уменьшаться.

Если средний объем запросов за день или неделю ниже лимитов использования, ваши приложения смогут обрабатывать скопления в периоды низкого потока запросов. В противном случае вам может потребоваться увеличение дневной квоты для вашей лицензии на Google Maps APIs for Work (см. следующий раздел).

Когда оптимизации недостаточно

Если вы реализовали все описанные выше способы оптимизации, но скопление запросов продолжает расти каждый день или в течение всего дня, вам нужно увеличить лимиты запросов в день или в секунду для вашей лицензии на Google Maps APIs for Work. В этом случае свяжитесь со своим менеджером по работе с клиентами Google Maps APIs for Work и обсудите доступные варианты.