Google Haritalar Platformu web hizmetleri, harita uygulamalarınız için coğrafi veriler sağlayan Google hizmetlerine yönelik HTTP arayüzleri koleksiyonudur.
Bu kılavuzda, web hizmetinizin isteklerini ayarlamak ve hizmet yanıtlarını işlemek için faydalı olabilecek bazı yaygın uygulamalar açıklanmaktadır. Geliştirici kılavuzuna bakın inceleyebilirsiniz.
Web hizmeti nedir?
Google Haritalar Platformu web hizmetleri, harici hizmetlerden Maps API verileri istemek ve bu verileri Haritalar uygulamalarınızda kullanmak için kullanılan bir arayüzdür. Bu hizmetler uyarınca, bir haritayla birlikte kullanılmak üzere tasarlanır. Lisans Kısıtlamaları Google Haritalar Platformu Hizmet Şartları'na tabidir.
Maps API'lerin web hizmetleri, belirli URL'lere HTTP(S) istekleri göndererek URL parametrelerini ve/veya JSON biçimli POST verilerini hizmetlere bağımsız değişken olarak iletir. Genellikle bu hizmetler verileri ayrıştırmak için JSON olarak yanıt gövdesi ve/veya uygulamanız tarafından işleniyor.
Mevcut saatlik hava kalitesini şunu kullanarak isteyin: currentConditions uç noktası için şu adrese bir HTTP POST isteği gönderin:https://airquality.googleapis.com/v1/currentConditions:lookup?key=API_KEY
JSON gövdesi iletme isteğe bağlıdır.
Not: Tüm Hava Kalitesi API'si 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.
Geçerli bir URL oluşturma
Bu örneğin "geçerli" bir URL kendiliğinden ortaya çıkar, ancak
durum pek öyle değil. Bir
özel karakterler içerebilir (ör.
"上海+中國"
); tarayıcının bunu dahili olarak çevirmesi gerekir
iletilmeden önce bu karakterleri farklı bir kodlamaya dönüştürmelidir.
Aynı jeton, UTF-8 girişi oluşturan veya kabul eden tüm kodlar
UTF-8 karakterleri içeren URL'leri "geçerli" olarak işleyebilir ancak aynı zamanda
bir web sunucusuna göndermeden önce
çevirmesini isteyin.
Bu işleme URL kodlama veya yüzde kodlama denir.
Özel karakterler
Özel karakterleri çevirmemiz gerekiyor. tüm URL'lerin Üniforma Kaynak Tanımlayıcı (URI) spesifikasyonu. Bu, URL'lerin ASCII karakterlerinin yalnızca özel bir alt kümesini içermelidir: tanıdık alfasayısal semboller ve kontrol olarak kullanılmak üzere ayrılmış bazı karakterler karakterleri kullanabilirsiniz. Bu tabloda şu karakterler özetlenmektedir:
Ayarla | karakterler | URL kullanımı |
---|---|---|
Alfanümerik | a b c d e f g h i j k l m n o p q r s t u v g x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 | Metin dizeleri, şema kullanımı (http ), bağlantı noktası (8080 ) vb. |
Ayrılmamış | - _ . ~ | Metin dizeleri |
Rezervasyon yapıldı | ! * ( ) ; : @ & = + TL , / ? % # [ ] | Kontrol karakterleri ve/veya Metin Dizeleri |
Geçerli bir URL oluştururken, URL'nin yalnızca tablosunu oluşturalım. Bu karakter grubunu genel olarak kullanmak için bir URL oluşturma biri ihmal, biri ikame olmak üzere iki soruna yol açar:
- Yönetmek istediğiniz karakterler
ayarlandı. Örneğin, yabancı dillerdeki karakterler
gibi
上海+中國
etiketleri, tablodaki karakteri ekleyin. Genel kurala göre alanlar (yani alanlar izin verilmeyen içerikler) genellikle artı işaretiyle gösterilir'+'
karakter de mevcut. - Yukarıdaki grupta ayrılmış karakterler olarak bulunan karakterlerin, olduğu gibi kullanılması gerekir.
Örneğin,
?
, şunu belirtmek için URL'lerde kullanılır: sorgu dizesinin başlangıcı; öğesini kullanmak istiyorsanız dizesi "? ve Gizemler'e hoş geldiniz." bu URL'yi kodlamanız gerekir'?'
karakter.
URL olarak kodlanacak tüm karakterler kodlanmıştır
'%'
karakteri ve iki karakterden oluşan bir onaltılık karakter kullanılarak
değerine karşılık gelir. Örneğin,
UTF-8'de 上海+中國
, şu şekilde URL olarak kodlanır:
%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B
. İlgili içeriği oluşturmak için kullanılan
? and the Mysterians
dizesinin URL'si şöyle olur:
%3F+and+the+Mysterians
veya %3F%20and%20the%20Mysterians
.
Yaygın olarak kodlama gerektiren karakterler
Kodlanması gereken bazı yaygın karakterler şunlardır:
Güvenli olmayan karakter | Kodlanmış değer |
---|---|
Boşluk | %20 |
" | %22 |
< | %3C |
> | %3E |
# | %23 |
% | %25 |
| | %7C |
Kullanıcı girişinden aldığınız bir URL'yi dönüştürmek bazen zor olabilir. Örneğin, bir kullanıcı "5th&Main Street" olarak bir adres girebilir. Genel olarak, URL'nizi kendi parçalarından oluşturmanız gerekir: herhangi bir kullanıcı girişi değişmez karakter olarak kabul edilir.
Ayrıca URL'ler, tüm Google Haritalar Platformu web hizmetleri için 16.384 karakterle sınırlıdır ve statik web API'leri. Çoğu hizmette bu karakter sınırına nadiren yaklaşılır. Ancak bazı hizmetlerin uzun URL'lere neden olabilecek çeşitli parametreleri olduğunu unutmayın.
Google API'lerinin Sonradan Kullanımı
Kötü tasarlanmış API istemcileri hem internete hem de Google'ın sunucularına gereğinden fazla yük bindirebilir. 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, Google'ın sunucularına tekrar tekrar istek göndermek yerine, bu işlemi döngü içinde yapmamak önemlidir. 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ında artan gecikmelerle yeniden 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×tamp=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, gösterilen saatin güncellenebilmesi için istemci işletim sisteminde dakikanın başında istemciyi uyandıran bir alarm ayarlayabilir. 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 saate ayarlanmış ikinci bir alarmın olması iyi bir tasarım olabilir. Bu ikinci alarm tetiklendiğinde uygulama, ihtiyaç duyduğu tüm API'leri çağırır ve sonuçları depolar. Uygulama dakika başında ekranını güncellemek istediğinde önceden saklanan sonuçları çağırır. Bu yaklaşımla, API çağrıları zaman içinde 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, senkronizasyonu hedeflememeniz gereken diğer yaygın zaman aralıkları, bir saatin başlangıcı ve her günün başlangıcı olan gece yarısıdır.
Yanıtları işleme
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 veri kümesini 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ı; örneğin, JavaScript nesneleri, JavaScript'in kendi içinde işlenebilir gerekir.