Geolocation API 웹 서비스를 사용한 권장사항

Google Maps Platform 웹 서비스는 Google Cloud의 HTTP 인터페이스 모음입니다. 서비스를 제공합니다.

이 가이드에서는 웹 서비스 서비스 응답을 처리하는 데 사용할 수 있는 도구 집합입니다 개발자 가이드를 참고하세요. Geolocation API에 대한 전체 문서를 참조하세요.

웹 서비스란 무엇인가요?

Google Maps Platform 웹 서비스는 외부 서비스 및 지도 애플리케이션 내의 데이터를 사용할 수 있습니다. 이러한 서비스는 에 따라 지도와 함께 사용하도록 라이선스 제한 을 참조하세요.

Maps API 웹 서비스는 특정 URL에 대한 HTTP(S) 요청을 사용하여 URL 매개변수 및/또는 서비스에 대한 인수로 JSON 형식의 POST 데이터를 제공합니다. 일반적으로 이러한 서비스는 파싱을 위해 응답 본문을 JSON으로 로드 처리되어야 합니다.

Geolocation 요청은 POST를 사용하여 다음과 같은 URL로 전송됩니다.

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

참고: 모든 Geolocation API 애플리케이션에는 인증이 필요합니다. 사용자 인증 정보에 대해 자세히 알아보세요.

SSL/TLS 액세스

API 키를 사용하거나 사용자가 포함된 모든 Google Maps Platform 요청에는 HTTPS가 필요합니다. 데이터를 수집하는 데 사용됩니다 민감한 정보가 포함된 HTTP를 통한 요청은 거부될 수 있습니다.

적절한 Google API 사용

잘못 설계된 API 클라이언트는 인터넷과 서버 모두에서 필요한 것보다 더 많은 부하를 Google 서버. 이 섹션에는 API 클라이언트의 모범 사례가 포함되어 있습니다. 팔로우 중 본 모범 사례는 애플리케이션이 살펴보겠습니다

지수 백오프

드물지만 요청을 처리하는 과정에서 문제가 발생할 수 있습니다. 4XX 또는 5XX HTTP 요청이 또는 TCP 연결이 클라이언트와 Google 서버 사이의 어딘가에서 실패할 수 있습니다 있습니다. 요청을 다시 시도하면서 후속 요청은 원본이 실패했을 때 성공할 수 있습니다 그렇다고 해서 Google 서버에 요청하는 반복 루프를 통해 실행됩니다. 이러한 반복 동작은 많은 당사자에게 문제를 일으킬 수 있습니다.

따라서 시도 사이의 지연 시간을 늘려 재시도하는 것이 훨씬 좋습니다. 일반적으로 지연 시간은 각 시도의 곱셈 계수에 의해 증가하는데, 이는 지수 백오프.

예를 들어 Time Zone API:

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

다음 Python 예시는 지수 백오프 요청 방법을 보여줍니다.

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

또한 애플리케이션 호출에서 더 높은 재시도 코드가 없는지 주의해야 합니다. 빠르게 연속해서 반복되는 요청으로 연결되는 체인입니다.

동기화된 요청

Google의 API에 대한 다수의 동기화된 요청은 Google 인프라에 대한 서비스 거부 (DDoS) 공격 받는사람 피해야 할 경우, API 요청이 동기화되고 클라이언트 간 연결을 유지합니다.

예를 들어, 현재 시간대의 시간을 표시하는 애플리케이션을 생각해 봅시다. 이 애플리케이션은 클라이언트 운영 체제에서 다음 시간에 절전 모드를 해제하는 알람을 설정할 수 있습니다. 표시된 시간을 업데이트할 수 있도록 분의 시작을 나타냅니다. 애플리케이션은 않습니다.

고정 알람에 대한 응답으로 API를 호출하면 서로 다른 기기 간에도 분 단위로 동기화되는 시간이 지남에 따라 균등하게 분산됩니다. 이를 위해 잘못 설계된 애플리케이션은 트래픽을 중단할 수 있습니다

이 문제를 해결하려면 두 번째 알람을 임의로 선택한 시간으로 설정하도록 설계하면 됩니다. 두 번째 알람이 발생하면 애플리케이션은 필요한 모든 API를 호출하고 있습니다. 애플리케이션이 분 시작 시 화면을 업데이트하려고 할 때는 결과를 다시 가져올 수도 있습니다. 이 접근 방식을 사용하면 시간이 지남에 따라 균등하게 분산됩니다. 또한 API 호출은 디스플레이가 있습니다.

분 시작을 제외하고 다른 일반적인 동기화 시간은 주의해야 합니다. 아닙니다.

응답 처리

이 섹션에서는 웹 서비스 응답에서 이들 값을 동적으로 추출하는 방법에 대해 설명합니다.

Google 지도 웹 서비스는 이해할 수 있지만 사용자 친화적이지 않습니다. 쿼리를 수행할 때는 더 구체적인 데이터 세트를 표시하려면 값으로 사용됩니다. 일반적으로 웹에서 응답을 파싱합니다 확인하고 관심 있는 값만 추출하세요.

사용하는 파싱 스키마는 반환되는지 여부에 따라 다릅니다. 출력됩니다. JSON 응답은 이미 JavaScript 객체이며 JavaScript 자체 내에서 처리될 수 있습니다. 실행할 수 있습니다