Límites de uso para servicios web de Google Maps APIs

Esta página está destinada únicamente a clientes con una licencia anterior de Maps APIs for Work o Maps API for Business. Esta página no está destinada a clientes con el nuevo Google Maps APIs Premium Plan, que se encuentra disponible desde enero de 2016.

Diciembre de 2011

El uso de los servicios web de las Google Maps APIs está sujeto a los límites específicos de la cantidad de solicitudes por período de 24 horas. Las solicitudes enviadas que excedan estos límites generarán un mensaje de error.

Los límites de uso se encuentran documentados en las preguntas frecuentes para licencias anteriores de Google Maps APIs for Work.

Este artículo está orientado a los clientes de Google Maps APIs for Work que alcanzan los límites de uso de servicios web y podrían necesitar optimizar aplicaciones para usar los servicios web de forma más eficiente.

Conceptos básicos

Google Maps proporciona servicios web como una interfaz para solicitar datos de mapas de Google que se usarán en tus aplicaciones. Estos servicios solo se pueden usar en conjunto con un mapa de Google. Está prohibido usar datos de estos servicios sin mostrarlos en un mapa de Google. Para obtener información detallada, consulta las Restricciones de licencia de las Condiciones de servicio de las Google Maps APIs.

Hay dos tipos de cuotas que limitan el uso de los servicios web de Google Maps APIs: de largo plazo (cuota por día) y de corto plazo (cuota por índice de solicitudes). Si excedes los límites de uso o abusas del servicio de alguna otra forma, el servicio web devolverá un mensaje de error específico. Si sigues excediendo los límites, se podría bloquear tu acceso al servicio web. También es posible que recibas respuestas 403 Forbidden.

Nota: Los diferentes límites se aplican a las API de cliente. Las Maps JavaScript API tienen una limitación de índice por sesión de mapa, de modo que las solicitudes se distribuyan entre los usuarios. Esto hace que el uso basado en el navegador sea escalable a medida que aumenta la cantidad de usuarios. Para obtener información sobre cómo elegir servicios web de servidor y su equivalencia de cliente, consulta el documento de estrategias de geocodificación.

Problemas

Puedes exceder los límites de uso de los servicios web de las Google Maps APIs:

  • Enviando demasiadas solicitudes por día.
  • Enviando solicitudes demasiado rápido; es decir, demasiadas solicitudes por segundo.
  • Enviando solicitudes demasiado rápido durante mucho tiempo o abusando del servicio web.
  • Excediendo otros límites de uso; p. ej., puntos por solicitud en la Google Maps Elevation API.

Límites de uso excedidos

Si excedes los límites de uso, recibirás un código de estado OVER_QUERY_LIMIT como respuesta.

Esto significa que el servicio web dejará de proporcionar respuestas normales y, en su lugar, devolverá solo el código de error OVER_QUERY_LIMIT hasta que se vuelva a autorizar más uso. Esto puede ocurrir:

  • En pocos segundos, si el error se recibió porque tu aplicación envió demasiadas solicitudes por segundo.
  • Dentro de las siguientes 24 horas, si el error se recibió porque tu aplicación envió demasiadas solicitudes por día. Las cuotas diarias se restablecen a la media noche, hora del Pacífico.

Esta presentación en pantalla proporciona una explicación paso a paso de los procedimientos correspondientes de limitación de solicitudes y administración de errores, que se aplican a todos los servicios web.

Una vez que se muestre una respuesta con el código de estado OVER_QUERY_LIMIT, tu aplicación deberá determinar el límite de uso que se ha excedido. Esto se puede llevar a cabo realizando una pausa de 2 segundos y reenviando la misma solicitud. Si el código de estado continúa siendo OVER_QUERY_LIMIT, significa que tu aplicación envía demasiadas solicitudes por día. De lo contrario, tu aplicación enviará demasiadas solicitudes por segundo.

A continuación, te mostramos un ejemplo de implementación en 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"

Nota: También es posible que se muestre el error OVER_QUERY_LIMIT:

Las aplicaciones deben garantizar que no se alcancen estos límites alcanzan antes de enviar solicitudes.

Respuesta HTTP 403

Las solicitudes a los servicios web también pueden recibir un error HTTP 403 (Forbidden). En la mayoría de los casos, esto se debe a una firma de URL no válida. Para verificar esto, quita los parámetros cliente y firma y realiza un nuevo intento:

  • Si la respuesta es HTTP 200 (OK), significa que el problema se debe a la firma.
    Esto no se relaciona con los límites de uso; consulta los Solución de problemas de autenticación en el capítulo Servicios web de la documentación de la Google Maps APIs for Work para obtener información detallada.
  • Si la respuesta sigue siendo HTTP 403 (Forbidden), significa que el problema no se debe necesariamente a la firma. Puede estar relacionado con los límites de uso.
    Por lo general esto significa que se ha bloqueado tu acceso al servicio web debido a que tu aplicación ha excedido los límites de uso por demasiado tiempo o transgredido de otra forma sus atribuciones respecto del servicio web. Accede al Google Cloud Support Portal si experimentas este problema. La información de contacto está disponible en la página de asistencia y recursos.

Para las solicitudes a todos los servicios web se necesitan firmas de URL. También se rechazarán las solicitudes con un error HTTP 403 (Forbidden) cuando incorporen el parámetro client pero no tengan el parámetro signature, o viceversa.

Soluciones

Los problemas anteriores se pueden resolver combinando dos enfoques:

  1. Reducir el uso optimizando aplicaciones para que usen los servicios web de manera más eficiente.
  2. Aumentar los límites de uso, cuando sea posible, adquiriendo permiso adicional para tu licencia de la Google Maps APIs for Work.

Este artículo se centrará en las maneras de optimizar las aplicaciones para usar los servicios web de forma más eficiente.

Verificaciones

Antes de ahondar en detalles respecto de cómo usar un servicio web de forma más eficiente, vale la pena tomarse un tiempo para verificar que el servicio y la licencia que se usen sean correctos.

Valida tu caso de uso

Los servicios web de las Google Maps APIs son de mayor utilidad para aplicaciones que carecen de entradas en tiempo real de usuarios finales o en los casos en que no haya disponible un navegador web. Por lo general, esto sucede cuando obtienes una base de datos independiente de las entradas de usuario. Por ejemplo, si tienes una base de datos con un conjunto fijo de direcciones que necesitan geocodificación, como un conjunto de propiedades que se ofrecen a la venta en un sitio web de bienes raíces o un conjunto de ubicaciones de almacenamiento.

Cuando se usan los servicios web de las Google Maps APIs, todas las solicitudes descuentan la cuota (diaria y por segundo) de tu ID de cliente. Esta cuota es global para cada ID de cliente, sin importar el número de direcciones IP desde las cuales se envían las solicitudes.

El uso de servicios del cliente de la Maps JavaScript API en el navegador tiene una limitación de índice por sesión de mapa. Esto significa que las solicitudes se distribuyen entre los usuarios y aumentan a medida que crece el número de usuarios. Por lo tanto, siempre se prefieren las API del cliente y se usan cada vez que es posible. Son la mejor opción si recopilas las direcciones de usuarios que deben someterse a geocodificación en tiempo real, como cuando se realiza una búsqueda de tiendas cerca del domicilio particular del usuario.

Para acceder a un análisis más detallado de este tema, consulta el documento Estrategias de geocodificación. Aunque se relacionan específicamente con la geocodificación, las recomendaciones de este documento se aplican a todos los servicios web, y se explica el momento en que debes usar los servicios web del servidor y sus equivalentes del cliente.

Usa una licencia de Google Maps APIs for Work

Si tienes una licencia de Google Maps APIs for Work, asegúrate de que en tus solicitudes se incluya tu ID de cliente de manera correcta.

En el caso de los clientes de Google Maps APIs for Work, se proporcionan límites de uso más altos para los servicios web de las Google Maps APIs que en el caso de los usuarios de API gratuitas. Para aprovechar esto, en tus aplicaciones se debe configurar el parámetro client de manera correcta como se describe en el capítulo de servicios web de esta guía.

Las aplicaciones en las que no se use un ID de cliente de las Google Maps APIs for Work de manera correcta no se considerarán como pertenecientes a una empresa, no recibirán funciones ni permisos exclusivos de empresas, no se contemplarán en el SLA de las Google Maps APIs for Work, no podrán recibir asistencia técnica y estarán sujetas a las restricciones de licencia regulares de las Condiciones de servicio de las Google Maps APIs.

Optimización

El procedimiento para usar los servicios web de manera más eficiente se puede resumir en dos objetivos principales: reducir el uso enviando solicitudes solo cuando sea realmente necesario y ampliar el uso aun para mantenerlo en valores inferiores a los límites.

Resultados almacenados en caché

En la sección 10.5.d de las Condiciones de servicio de las Google Maps APIs se establece que puedes almacenar cantidades limitadas de contenido con el único propósito de mejorar el rendimiento de tu implementación de las Google Maps APIs de Maps API debido a la latencia de la red (y no para evitar que Google realice un seguimiento preciso del uso), y solo si dicho almacenamiento: es temporario (y en ningún caso supera los 30 días calendario); es seguro, no manipula ni agrega ninguna parte del contenido o servicio; y no modifica atribuciones de ninguna manera.

Esto significa que puedes almacenar en caché respuestas de servicio web para evitar el envío de solicitudes por duplicado en períodos de tiempo cortos. En las respuestas de servicios web siempre se incluye el encabezado HTTP Cache-Control para indicar el tiempo durante el cual se puede almacenar en caché el resultado; actualmente 24 horas:

Cache-Control: público, max-age=86400

Siempre se debe respetar este encabezado. El almacenamiento se puede implementar usando proxies web, los cuales deben hacer esto de manera predeterminada o usando tu propia implementación. Vale la pena señalar que algunas bibliotecas de cliente HTTP también almacenan en caché las respuestas HTTP.

Para aumentar los índices de aciertos de caché, se deben normalizar las coordenadas LatLng con un redondeo a 6 decimales, lo cual proporciona una precisión de 11 centímetros en el Ecuador. Los resultados de servicios web no variarán al agregar más decimales, pero esto reducirá los índices de aciertos de caché.

Regulación de solicitudes

Las aplicaciones deben regular las solicitudes para evitar que se excedan los límites de uso, teniendo en cuenta que estas se aplican a cada ID de cliente sin importar el número de direcciones IP desde las cuales se envían las solicitudes.

Puedes regular las solicitudes poniéndolas en una cola que lleve el registro del momento en que se envían. Con un límite de índice 10 QPS (consultas por segundo), cuando se envía la solicitud número 11 tu aplicación debe verificar la marca de tiempo de la primera solicitud y esperar hasta que haya pasado 1 segundo. Lo mismo debe aplicarse a los límites diarios.

Aun cuando la regulación se implemente de forma correcta, las aplicaciones deberán estar preparadas para respuestas con código de estado OVER_QUERY_LIMIT. Si se reciben estas respuestas, usa el mecanismo de pausa y reintento que se explica en la sección Exceso de los límites de uso para detectar el límite excedido.

Control de trabajo acumulado

Con una regulación correctamente implementada, las solicitudes a los servicios web no se envían si se exceden los límites de uso. Sin embargo, las aplicaciones pueden recibir entradas con volúmenes o índices que superen los valores permitidos por los límites de uso de servicios web. Como resultado, esto puede hacer que la regulación de colas aumente considerablemente y genere trabajo acumulado con solicitudes pendientes.

Tus aplicaciones pueden alcanzar los límites de uso diarios y, al mismo tiempo, procesar mucho trabajo acumulado. Si la regulación se implementa de forma correcta para los límites diarios, las aplicaciones dejarán de enviar solicitudes; de lo contrario, ante el envío de solicitudes adicionales se obtendrán respuestas con el código de estado OVER_QUERY_LIMIT. En ambos casos, el trabajo acumulado no se reducirá.

Si el volumen promedio de solicitudes durante un día o una semana se encuentra dentro de los límites de uso, tus aplicaciones podrán encargarse del trabajo acumulado durante períodos de flujo de menor volumen de entradas. De lo contrario, es posible que debas aumentar el permiso diario de tu licencia de Google Maps APIs for Work (consulta la sección siguiente).

Cuando la optimización no es suficiente

Si ya implementaste todas las optimizaciones anteriores y tu trabajo acumulado de solicitudes crece de manera continua, ya sea a diario o en cualquier momento del día, tal vez debas aumentar los límites de uso por día o por segundo de tu licencia de Google Maps APIs for Work. En ese caso, comunícate con el administrador de cuentas de Google Maps APIs for Work para evaluar opciones disponibles.