Bonnes pratiques d'utilisation des services Web de l'API Geolocation

Les services Web Google Maps Platform sont un ensemble d'interfaces HTTP envoyées à Google qui fournissent des données géographiques à vos applications cartographiques.

Ce guide décrit quelques pratiques courantes utiles pour configurer votre service Web requêtes et le traitement des réponses du service. Consultez le guide du développeur pour accéder à la documentation complète sur l'API Geolocation.

Qu'est-ce qu'un service Web ?

Les services Web Google Maps Platform sont une interface permettant de demander des données à l'API Google Maps services externes et l'utilisation des données dans vos applications Maps. Ces services sont conçu pour être utilisé avec une carte, conformément aux Restrictions liées aux licences dans les conditions d'utilisation de Google Maps Platform.

Les services Web des API Google Maps utilisent des requêtes HTTP(S) vers des URL spécifiques, en transmettant des paramètres d'URL et/ou Des données POST au format JSON en tant qu'arguments aux services. En général, ces services renvoient des données corps de la réponse en JSON pour analyse et/ou traités par votre application.

Les requêtes de géolocalisation sont envoyées à l'aide de la méthode POST à l'URL suivante :

https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY

Remarque: Toutes les applications de l'API Geolocation nécessitent une authentification. En savoir plus sur les identifiants d'authentification

Accès SSL/TLS

HTTPS est requis pour toutes les requêtes Google Maps Platform qui utilisent des clés API ou contiennent un utilisateur données. Les requêtes effectuées via HTTP qui contiennent des données sensibles peuvent être rejetées.

Bon usage des Google API

Les clients API mal conçus peuvent placer plus de charge que nécessaire à la fois sur Internet et vers les serveurs de Google. Cette section contient les bonnes pratiques pour les clients de ces API. Suivies ces bonnes pratiques peuvent vous aider à éviter que votre application soit bloquée pour cause d'abus involontaire de les API.

Intervalle exponentiel entre les tentatives

Dans de rares cas, un problème peut survenir lors du traitement de votre demande. il se peut que vous receviez un code code de réponse, ou la connexion TCP peut tout simplement échouer quelque part entre votre client et Google Cloud. Il est souvent utile de relancer la requête, la demande de suivi peut aboutir alors que la requête d'origine a échoué. Cependant, il est important de ne pas simplement des requêtes répétées aux serveurs Google. Ce comportement en boucle peut surcharger réseau entre votre client et Google, ce qui cause des problèmes pour de nombreuses parties.

Il est préférable de réessayer en allongeant progressivement les délais entre deux tentatives. En général, le retard est augmenté d'un facteur multiplicatif à chaque tentative, une approche connue sous le nom de Intervalle exponentiel entre les tentatives.

Prenons l'exemple d'une application qui souhaite envoyer cette requête à l'API Time Zone:

https://maps.googleapis.com/maps/api/timezone/json?location=39.6034810,-119.6822510&timestamp=1331161200&key=YOUR_API_KEY

L'exemple Python suivant illustre comment effectuer la requête avec le retrait exponentiel :

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

Vous devez également veiller à ce qu'il n'y ait pas de code de nouvelle tentative plus haut dans l'appel de l'application qui entraîne des requêtes répétées rapidement.

Requêtes synchronisées

Un grand nombre de requêtes synchronisées vers les API Google peut ressembler à un réseau par déni de service (DDoS) sur l'infrastructure de Google, et traitées en conséquence. À vous devez vous assurer que les requêtes API ne sont pas synchronisées entre les clients.

Prenons l'exemple d'une application qui affiche l'heure dans le fuseau horaire actuel. Cette application définira probablement une alarme dans le système d'exploitation client qui l'activera à le début de la minute pour que l'heure affichée puisse être mise à jour. L'application doit pas d'appel d'API dans le cadre du traitement associé à cette alarme.

Effectuer des appels d'API en réponse à une alarme fixe n'est pas correct, car les appels d'API sont alors sont synchronisées en début de minute, même entre différents appareils, au lieu d'être répartis uniformément au fil du temps. Une application mal conçue qui procède ainsi produira un pic de de trafic à un niveau soixante fois normal au début de chaque minute.

Il est recommandé d'avoir une seconde alerte définie sur une heure choisie de manière aléatoire. Lorsque cette seconde alarme se déclenche, l'application appelle les API dont elle a besoin et stocke le résultats. Lorsque l'application souhaite mettre à jour l'affichage au début de la minute, elle utilise précédemment stockés au lieu d'appeler à nouveau l'API. Avec cette approche, les appels d'API sont réparties uniformément au fil du temps. De plus, les appels d'API ne retardent pas l'affichage lorsque l'écran en cours de mise à jour.

Soyez prudent avec d'autres heures de synchronisation courantes que le début de la minute. pas à cibler sont fixés au début d'une heure et le début de chaque journée à minuit.

Traitement des réponses

Cette section explique comment extraire ces valeurs de manière dynamique à partir des réponses d'un service Web.

Les services Web Google Maps fournissent des réponses faciles à comprendre, mais pas vraiment facile à utiliser. Lorsque vous exécutez une requête, que d'afficher un ensemble de données, vous souhaitez probablement extraire des données valeurs. En général, il est préférable d'analyser les réponses provenant du Web et extraire uniquement les valeurs qui vous intéressent.

Le schéma d'analyse que vous utilisez varie selon que vous renvoyez ou non au format JSON. des réponses JSON, étant déjà sous la forme Objets JavaScript, peuvent être traités dans JavaScript sur le client.