Geolocation API Web Hizmetlerini Kullanmayla İlgili En İyi Uygulamalar

Google Haritalar Platformu web hizmetleri, Google'a yönelik HTTP arayüzleri koleksiyonudur. Haritalar uygulamalarınız için coğrafi veriler sağlayan hizmetlerdir.

Bu kılavuzda, web hizmeti ve işleme konularını ele alacağız. Geliştirici kılavuzuna bakın bölümünü ziyaret edin.

Web hizmeti nedir?

Google Haritalar Platformu web hizmetleri, Google Haritalar API'si verilerini istemek için kullanılan bir arayüzdür ve Haritalar uygulamalarınızdaki verileri kullanarak harici hizmetlerden yararlanabilirsiniz. Bu hizmetler uyarınca, bir haritayla birlikte kullanılmak üzere tasarlanır. Lisans Kısıtlamaları Google Haritalar Platformu Hizmet Şartları'na tabidir.

Haritalar API'leri web hizmetleri, URL parametrelerini ileten ve/veya Hizmetlerin bağımsız değişkenleri olarak JSON biçimli POST verileri. Genellikle bu hizmetler verileri ayrıştırmak için JSON olarak yanıt gövdesi ve/veya uygulamanız tarafından işleniyor.

Coğrafi konum istekleri, aşağıdaki URL'ye POST kullanılarak gönderilir:

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

Not: Tüm Geolocation API uygulamaları kimlik doğrulama gerektirir. Kimlik doğrulama kimlik bilgileri hakkında daha fazla bilgi edinin.

SSL/TLS Erişimi

HTTPS, API anahtarları kullanan veya kullanıcı içeren tüm Google Haritalar Platformu istekleri için gereklidir dışı verilerdir. HTTP üzerinden yapılan ve hassas veriler içeren istekler reddedilebilir.

Google API'lerinin Sonradan Kullanımı

Kötü tasarlanmış API istemcileri hem internette hem de internette Google sunucuları. Bu bölümde, API istemcileri için bazı en iyi uygulamalar yer almaktadır. Takip edilenler Bu en iyi uygulamalar, uygulamanızın yanlışlıkla kötüye kullanımı nedeniyle engellenmesini önlemenize yardımcı olabilir. API'lar.

Üstel Geri Alma

Nadiren isteğiniz yerine getirilirken bir şeyler ters gidebilir. 4XX veya 5XX HTTP olabilir veya TCP bağlantısı istemciniz ile Google'ın web sunucusu arasında bir yerde, sunucu. Çoğunlukla isteği yeniden denemek daha iyidir, takip isteği de başarılı olabilir. Ancak, bütçe oluşturmak için Google sunucularına istek gönderen sürekli bir döngü vardır. Bu döngü davranışı, birçok taraf için soruna neden olan bir iletişim ağı örneğidir.

Daha iyi bir yaklaşım, denemeler arasındaki gecikmeleri artırarak tekrar denemektir. Genellikle gecikme, her denemede çarpımsal bir faktörle artırılır. Bu yaklaşıma Üstel Geri Alma.

Örneğin, Time Zone API:

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

Aşağıdaki Python örneğinde, isteğin eksponansiyel geri yüklemeyle nasıl gönderileceği gösterilmektedir:

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

Ayrıca, uygulama çağrısında daha üst düzey bir yeniden deneme kodu olmadığından da kısa sürede tekrarlanan isteklere yol açan bir zincirle ilgilidir.

Senkronize İstekler

Google'ın API'lerine yapılan senkronize edilmiş çok sayıda istek, Dağıtılmış Hizmet Reddi (DDoS) saldırısı ve buna göre işlem yapılması. Alıcı: API isteklerinin senkronize edilmediğinden emin olun. müzakere tekniği de eklediniz.

Örneğin, saati geçerli saat diliminde gösteren bir uygulamayı ele alalım. Bu uygulama muhtemelen istemci işletim sisteminde alarm çalacak ve cihazı şu saatte uyandıracak: gösterilen zamanın güncellenebilmesi için dakikanın başlangıcını. Başvuru, Söz konusu alarmla ilişkili işlemlerin bir parçası olarak API çağrısı yapmamalıdır.

Sabit bir alarma karşılık olarak API çağrıları yapmak, API çağrılarının senkronize etmek yerine dakikanın başında senkronize edilir. eşit olarak dağıtılır. Bunu yapan kötü tasarlanmış bir uygulama, her dakikanın başında normal düzeylerde altmış kadar trafik alabilir.

Bunun yerine, rastgele seçilen bir zamana ayarlanmış ikinci bir alarm olması olası iyi bir tasarımdır. Bu ikinci alarm etkinleştiğinde uygulama ihtiyaç duyduğu API'leri çağırır ve sonuç. Uygulama dakika başında ekranını güncellemek istediğinde önceden saklanan sonuçları çağırır. Bu yaklaşımla, API çağrıları eşit olarak yayılır. Ayrıca, ekran etkinken API çağrılarının güncelleniyor.

Dakikanın başlangıcı dışında, diğer yaygın senkronizasyon zamanları için de hedeflenecekler seçeneği bir saatin başında, her günün başlangıcında ise gece yarısı olacak.

Yanıtlar İşleniyor

Bu bölümde, bu değerlerin web hizmeti yanıtlarından dinamik olarak nasıl ayıklanacağı anlatılmaktadır.

Google Haritalar web hizmetleri, Google Haritalar'da kullanıcı dostu olmadığını söyleyebiliriz. Sorgu gerçekleştirirken yerine bir veri kümesi görüntülemek yerine, muhtemelen birkaç değerler. Genellikle, yanıtları web'den ayrıştırmak yalnızca sizi ilgilendiren değerleri ayıklayabilir.

Kullandığınız ayrıştırma şeması, dönüşüm modellemeden önce çıktı. JSON yanıtları, zaten şu biçimindedir: JavaScript nesneleri, JavaScript'in kendi içinde işlenebilir gerekir.