Limites de uso de serviços Web das Google Maps APIs

Esta página é destinada apenas a clientes que têm uma licença antiga do Maps APIs for Work ou do Maps API for Business. Esta página não se aplica a clientes com o novo Google Maps APIs Premium Plan, disponibilizado em janeiro de 2016.

Dezembro de 2011

O uso dos serviços Web das Google Maps APIs está sujeito a limites específicos de número de solicitações por período de 24 horas. As solicitações enviadas acima desses limites receberão uma mensagem de erro.

Os limites de uso estão documentados nas Perguntas frequentes do Google Maps APIs for Work sobre licenças anteriores.

Este artigo se destina a clientes do Google Maps APIs for Work que atingiram esses limites e precisam otimizar os aplicativos para usar os serviços Web de forma mais eficiente.

Conceitos básicos

O Google Maps oferece serviços Web como uma interface para a solicitações de dados de mapas do Google para uso em aplicativos. Esses serviços somente podem ser usados com um mapa do Google. É proibido usar dados desses serviços sem exibi-los em um mapa do Google. Para obter os detalhes completos, consulte as restrições de licenciamento dos Termos de Serviços das Google Maps APIs.

Existem dois tipos de cota que limitam o uso dos serviços Web das Google Maps APIs: longo prazo (cota diária) e curto prazo (cota de taxa de solicitações). Se você exceder os limites de uso ou abusar do serviço, o serviço web retornará uma mensagem de erro específica. Se você continuar a exceder os limites, o acesso ao serviço web poderá ser bloqueado. Também é possível receber respostas 403 Proibido.

Observação: as APIs do lado do cliente estão sujeitas a limites diferentes. As Maps JavaScript API têm taxa limitada por sessão de mapa. Portanto, as solicitações são distribuídas entre os usuários. Isso torna o uso em navegadores escalável de acordo com sua quantidade de usuários. Para obter informações sobre como escolher entre serviços Web do lado do servidor e seus equivalentes do lado do cliente, consulte o documento Estratégias de geocodificação.

Problemas

Os limites de uso das Google Maps APIs podem ser excedidos ao:

  • Enviar uma quantidade excessiva de solicitações diárias.
  • Enviar solicitações muito rapidamente, ou seja, uma quantidade excessiva de solicitações por segundo.
  • Enviar solicitações muito rapidamente por muito tempo ou abusar do serviço web de outras maneiras.
  • Exceder outros limites de uso como, por exemplo, pontos por solicitação na Google Maps Elevation API.

Limites de uso excedidos

Se você exceder os limites de uso, receberá como resposta um código de status OVER_QUERY_LIMIT.

Isso significa que o serviço web deixará de fornecer respostas normais e retornará o código de status OVER_QUERY_LIMIT até que mais uso seja permitido novamente. Isso pode acontecer:

  • Em alguns segundos, se o erro for recebido porque seu aplicativo enviou uma quantidade excessiva de solicitações por segundo.
  • Em até 24 horas, se o erro for recebido porque seu aplicativo enviou uma quantidade excessiva de solicitações por dia. As cotas diárias são zeradas à meia-noite do fuso horário do Pacífico.

Este screencast oferece uma explicação detalhada da limitação de solicitações e tratamento de erros adequados e se aplica a todos os serviços Web.

Quando receber uma resposta com código de status´ OVER_QUERY_LIMIT, o aplicativo deverá determinar qual limite de uso foi excedido. Isso pode ser feito aguardando dois segundos e reenviando a mesma solicitação. Se o código de status continua sendo OVER_QUERY_LIMIT, o aplicativo está excedendo o limite diário de solicitações. Caso contrário, o aplicativo está excedendo o limite de solicitações por segundo.

Veja a seguir um exemplo de implementação em 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"

Observação: também é possível receber o erro OVER_QUERY_LIMIT:

Os aplicativos devem garantir que esses limites não sejam alcançados antes de enviar solicitações.

Resposta HTTP 403

As solicitações de serviços Web também podem receber um erro HTTP 403 (Proibido). Na maioria dos casos, a causa é uma assinatura de URL inválida. Para confirmar, remova os parâmetros client e signature e tente novamente:

  • Se a resposta for HTTP 200 (OK), o problema era a assinatura.
    O problema não está relacionado a limites de uso. Consulte Solucionar problemas de autenticação no capítulo Web Services da documentação do Google Maps APIs for Work para obter detalhes.
  • Se a resposta continuar sendo o erro HTTP 403 (Proibido), pode ser que o problema não esteja relacionado à assinatura e sim aos limites de uso.
    Normalmente, isso significa que o acesso ao serviço Web foi bloqueado porque o aplicativo vem excedendo os limites de uso por um período muito longo ou abusou do serviço Web de outra forma. Acesse Google Cloud Support Portal se enfrentar esse problema. Os dados de contato também estão disponíveis na página Suporte e recursos.

Todos os serviços Web exigem assinaturas URL nas solicitações. As solicitações também serão rejeitadas com um erro HTTP 403 (Proibido) quando incluírem o parâmetro client, mas omitirem o parâmetro signature, ou vice-versa.

Soluções

Os problemas acima podem ser resolvidos combinando duas abordagens:

  1. Diminua o uso otimizando os aplicativos para usar os serviços Web de forma mais eficiente.
  2. Aumente os limites de uso, se possível, comprando cotas adicionais para sua licença do Google Maps APIs for Work.

Este artigo destacará formas de otimização de aplicativos para usar serviços Web com maior eficiência.

Verificações básicas

Antes de detalharmos como usar um serviço Web com mais eficiência, vale a pena verificar se o serviço e licença corretos estão sendo usados.

Valide seu caso de uso

Os serviços Web das Google Maps APIs são mais indicados para aplicativos que não recebem entradas de usuários finais em tempo real ou quando um navegador da Web não está disponível. Normalmente, isso ocorre quando você recebe um conjunto de dados que não depende de entradas do usuário. Por exemplo, quando você tem um banco de dados com um conjunto fixo de endereços que precisam de geocodificação, como um conjunto de propriedades colocadas à venda em um site de uma imobiliária, ou um conjunto de localizações de lojas.

Ao usar os serviços Web das Google Maps APIs, todas as solicitações são debitadas da cota (diário e por segundo) do ID do cliente. Essa cota é global para cada ID do cliente, independentemente do número de endereços IP de onde as solicitações são enviadas.

O uso dos serviços das Maps JavaScript API do lado do cliente no navegador é limitado por taxa por sessão de mapa. Isso significa que as solicitações são distribuídas entre todos os usuários e sua escala aumenta junto com o número de usuários. Portanto, as APIs do lado do cliente são sempre preferenciais e devem ser usadas sempre que possível. Elas são a solução ideal para a coleta de endereços de usuários que precisam ser geocodificados em tempo real, como em uma pesquisa por lojas perto do endereço residencial do usuário.

Para ver uma discussão mais detalhada sobre esse tópico, consulte o documento Estratégias de geocodificação. Embora as recomendações deste documento sejam específicas para geocodificação, elas se aplicam a todos os serviços Web e explicam quando você deve usar serviços Web do lado do servidor ou seus equivalentes do lado do cliente.

Usar uma licença do Google Maps APIs for Work

Se você tiver uma licença do Google Maps APIs for Work, verifique se as solicitações incluem o ID do cliente correto.

Os clientes do Google Maps APIs for Work têm limites de uso maiores para os serviços Web das Google Maps APIs que os limites dos usuários da API gratuita. Para aproveitar esses benefícios, os aplicativos devem configurar corretamente o parâmetro client, como descrito no capítulo Web Services deste guia.

Os aplicativos que não usarem corretamente um ID do cliente do Google Maps APIs for Work não serão tratados como Business, não se beneficiarão com os recursos e cotas exclusivos do Business, não estarão cobertos pelo ANS do Google Maps APIs for Work, não terão direito a suporte técnico e estarão sujeitos às restrições de licenciamento normais dos Termos de Serviço das Google Maps APIs.

Como otimizar

O uso mais eficiente dos serviços Web pode ser resumido em dois objetivos principais: reduzir o uso, enviando solicitações apenas quando realmente necessárias, e distribuir o uso uniformemente para não exceder os limites.

Armazenar resultados em cache

A seção 10.5.d dos Termos de Serviço das Google Maps APIs define que você poderá armazenar quantidades limitadas de Conteúdo com o propósito exclusivo de aprimorar o desempenho de sua Implementação das Google Maps APIs em relação à latência de rede (e não com o objetivo de evitar que o Google controle o uso de forma precisa), e somente se esse armazenamento for temporário (e, em nenhum caso, por mais de 30 dias corridos); for seguro; não manipular ou agregar nenhuma parte do Conteúdo ou do Serviço; e não modificar a atribuição de forma alguma.

Isso significa que você pode armazenar temporariamente respostas de serviços Web em cache para evitar o envio de solicitações duplicadas dentro de períodos curtos. As respostas dos serviços Web sempre incluem o cabeçalho HTTP Cache-Control para indicar por quanto tempo o resultado pode ser armazenado em cache (no momento, 24 horas):

Cache-Control: public, max-age=86400

Esse cabeçalho deve sempre ser respeitado. O armazenamento em cache pode ser implementado usando proxies Web, que normalmente oferecem essa funcionalidade pronta para uso, ou usando sua própria implementação. Observe que algumas bibliotecas cliente HTTP também armazenam respostas HTTP em cache.

Para aumentar as taxas de ocorrência em cache, as coordenadas LatLng devem ser normalizadas com arredondamento em seis casas decimais, o que oferece uma precisão de cerca de 11 centímetros na linha do equador. Os resultados dos serviços Web não serão diferentes com a adição de mais casas decimais, mas as taxas de ocorrência em cache serão reduzidas.

Limitar solicitações

Os aplicativos devem limitar solicitações para evitar exceder os limites de uso, considerando que esses limites se aplicam a cada ID do cliente, independentemente do número de endereços IP de onde as solicitações são enviadas.

Você pode limitar solicitações colocando-as em uma fila que controla quando as solicitações são enviadas. Com um limite de taxa de 10 QPS (consultas por segundo), ao enviar a 11ª solicitação, o aplicativo deve verificar o timestamp da primeira solicitação e aguardar um segundo. O mesmo se aplica aos limites diários.

Mesmo com uma implementação correta da limitação, os aplicativos devem estar atentos a respostas com o código de status OVER_QUERY_LIMIT. Se uma dessas respostas for recebida, use o mecanismo de suspender e tentar novamente explicado na seção Limites de uso excedidos acima para detectar qual limite foi excedido.

Processar solicitações pendentes

Com a implementação correta da limitação, as solicitações de serviços Web serão enviadas sem exceder os limites de uso. No entanto, os aplicativos podem receber entradas em volumes ou velocidades maiores que os permitidos pelos limites de uso dos serviços Web. Isso pode resultar em um crescimento considerável das filas de limitação, criando uma lista de solicitações pendentes.

Ao processar uma lista grande de solicitações pendentes, os aplicativos podem atingir os limites de uso diários. Se a limitação for implementada corretamente para os limites diários, os aplicativos cessarão o envio de solicitações. Caso contrário, o envio de solicitações adicionais resultaria em respostas com o código de status OVER_QUERY_LIMIT. Em ambos os casos, a lista de solicitações pendentes não diminuirá.

Se o volume médio de solicitações em um dia ou em uma semana permanecer abaixo dos limites de uso, os aplicativos devem conseguir eliminar a lista de solicitações pendentes durante os períodos de fluxo de entrada reduzido. Caso contrário, pode ser necessário aumentar a cota diária para sua licença do Google Maps APIs for Work (veja a seção a seguir).

Quando otimizar não é suficiente

Se você já implementou todas as otimizações acima e sua lista de solicitações pendentes continua a crescer diariamente ou em todos os momentos do dia, pode ser realmente necessário aumentar os limites de uso por dia ou por segundo da licença do Google Maps APIs for Work. Nesse caso, entre em contato com o gerente de contas do Google Maps APIs for Work para discutir as opções disponíveis.