Los servicios web de Google Maps Platform son un conjunto de interfaces HTTP para que proporcionan datos geográficos a tus aplicaciones de mapas.
En esta guía, se describen algunas prácticas comunes que sirven servicio web las solicitudes y el procesamiento de las respuestas del servicio. Consulta la guía para desarrolladores. para obtener la documentación completa de la API de Map Tiles.
¿Qué es un servicio web?
Los servicios web de Google Maps Platform son una interfaz para solicitar datos de la API de Google Maps a servicios externos y el uso de los datos en sus aplicaciones de Maps. Estos servicios son diseñado para usarse junto con un mapa, según el Restricciones de licencia en las Condiciones del Servicio de Google Maps Platform.
Los servicios web de las APIs de Google Maps usan solicitudes HTTP(S) para URLs específicas y pasan parámetros de URL, Datos POST en formato JSON como argumentos para los servicios. Generalmente, estos servicios devuelven datos en el de respuesta como JSON para analizar y/o procesamiento por parte de tu aplicación.
Un ejemplo de solicitud de servicio web es una Solicitud de metadatos de Street View, que tiene la siguiente forma:https://tile.googleapis.com/v1/streetview/metadata?session=YOUR_SESSION_TOKEN &key=YOUR_API_KEY &panoId=panoId
Nota: Todas las aplicaciones de la API de Map Tiles requieren autenticación. Obtén más información sobre las credenciales de autenticación.
Acceso SSL/TLS
Se requiere HTTPS para todas las solicitudes de Google Maps Platform que usan claves de API o contienen información de datos no estructurados. Es posible que se rechacen las solicitudes realizadas a través de HTTP que contengan datos sensibles.
Uso normal de las API de Google
Los clientes de API mal diseñados pueden cargar más carga de la necesaria tanto en Internet como en los servidores de Google. En esta sección se explican algunas de las prácticas recomendadas para los clientes de las API. Siguiendo estas prácticas recomendadas pueden ayudarte a evitar que tu aplicación se bloquee por abuso involuntario de las APIs.
Interrupción exponencial
En casos excepcionales, podría producirse un error al procesar tu solicitud. podrías recibir una solicitud HTTP 4XX código de respuesta o la conexión TCP puede fallar en algún lugar entre tu cliente y la red servidor. A menudo, vale la pena volver a realizar la solicitud, ya que la solicitud de seguimiento puede completarse con éxito si falla la original. Sin embargo, es importante no limitarse repetir indefinidamente solicitudes a los servidores de Google. Este comportamiento de bucle puede sobrecargar entre su cliente y Google causando problemas a muchas partes.
Un mejor enfoque consiste en realizar nuevos intentos con demoras más prolongadas entre uno y otro. Por lo general, el la demora aumenta por un factor multiplicativo con cada intento. Un enfoque conocido como Retirada exponencial.
Por ejemplo, piensa en una aplicación que desee realizar esta solicitud a la API de Time Zone:
https://maps.googleapis.com/maps/api/timezone/json?location=39.6034810,-119.6822510×tamp=1331161200&key=YOUR_API_KEY
En el siguiente ejemplo de Python se muestra la manera de realizar la solicitud con interrupción exponencial:
import json import time import urllib.error import urllib.parse import urllib.request # The maps_key defined below isn't a valid Google Maps API key. # You need to get your own API key. # See https://developers.google.com/maps/documentation/timezone/get-api-key API_KEY = "YOUR_KEY_HERE" TIMEZONE_BASE_URL = "https://maps.googleapis.com/maps/api/timezone/json" def timezone(lat, lng, timestamp): # Join the parts of the URL together into one string. params = urllib.parse.urlencode( {"location": f"{lat},{lng}", "timestamp": timestamp, "key": API_KEY,} ) url = f"{TIMEZONE_BASE_URL}?{params}" current_delay = 0.1 # Set the initial retry delay to 100ms. max_delay = 5 # Set the maximum retry delay to 5 seconds. while True: try: # Get the API response. response = urllib.request.urlopen(url) except urllib.error.URLError: pass # Fall through to the retry loop. else: # If we didn't get an IOError then parse the result. result = json.load(response) if result["status"] == "OK": return result["timeZoneId"] elif result["status"] != "UNKNOWN_ERROR": # Many API errors cannot be fixed by a retry, e.g. INVALID_REQUEST or # ZERO_RESULTS. There is no point retrying these requests. raise Exception(result["error_message"]) if current_delay > max_delay: raise Exception("Too many retry attempts.") print("Waiting", current_delay, "seconds before retrying.") time.sleep(current_delay) current_delay *= 2 # Increase the delay each time we retry. if __name__ == "__main__": tz = timezone(39.6034810, -119.6822510, 1331161200) print(f"Timezone: {tz}")
También debes tener cuidado de que no haya un código de reintento más alto en la llamada a la aplicación. que genera solicitudes repetidas en sucesión rápida.
Solicitudes sincronizadas
Grandes cantidades de solicitudes sincronizadas a las APIs de Google pueden parecer una infraestructura ataque de denegación del servicio (DDoS) en la infraestructura de Google, y se lo tratará según corresponda. Para evitar esto, debe asegurarse de que las solicitudes a la API no se sincronicen entre los clientes.
Por ejemplo, considera una aplicación que muestre la hora en la zona horaria actual. Esta aplicación probablemente configurará una alarma en el sistema operativo del cliente cuando la active a las el inicio del minuto para que se pueda actualizar la hora que se muestra. La aplicación debe No realizará ninguna llamada a la API como parte del procesamiento asociado con esa alarma.
Es malo realizar llamadas a la API en respuesta a una alarma fija, ya que esto hace que las llamadas a la API se sincronizada al inicio del minuto, incluso entre distintos dispositivos, en lugar de distribuida de manera uniforme con el tiempo. Una aplicación mal diseñada que hace esto producirá un aumento repentino de a 60 veces los niveles normales al comienzo de cada minuto.
En su lugar, un posible buen diseño es tener una segunda alarma configurada en una hora elegida al azar. Cuando esta segunda alarma se activa, la aplicación llama a cualquier API que necesite y almacena la resultados. Cuando la aplicación quiere actualizar su pantalla al inicio del minuto, usa en lugar de volver a llamar a la API. Con este enfoque, las llamadas a la API se distribuyen uniformemente con el tiempo. Además, las llamadas a la API no retrasan la renderización cuando la pantalla se se están actualizando.
Se deben tener cuidado con otros tiempos de sincronización comunes, además del inicio del minuto. no para segmentar son al inicio de una hora y al inicio de cada día a la medianoche.
Procesamiento de respuestas
En esta sección se discute cómo extraer esos valores de forma dinámica de las respuestas de los servicios web.
Los servicios web de Google Maps proporcionan respuestas fáciles de entender, pero no exactamente fácil de usar. Cuando se realiza una consulta, en lugar que mostrar un conjunto de datos, quizás quieras extraer algunos de salida. En general, se recomienda analizar las respuestas de la Web servicio y extraer solo los valores que te interesen.
El esquema de análisis que uses dependerá de si devuelves de salida en JSON. Respuestas JSON que ya tienen la forma de Objetos de JavaScript, pueden procesarse dentro del mismo JavaScript en el cliente.