Konfigurowanie limitów czasu oczekiwania i ponownych prób

Wiele metod interfejsu Display & Video 360 API wykonuje złożone operacje, których wykonanie może zająć więcej niż kilka sekund. Żądania tych metod mogą czasami przekraczać spodziewany czas oczekiwania, co powoduje błędy po stronie interfejsu API lub klienta. Ta strona zawiera listę metod rozwiązywania problemów powodowanych przez wydłużony czas oczekiwania na żądanie.

Zwiększ domyślny limit czasu w bibliotece klienta

Kilka z nich oznaczyliśmy w dokumentacji referencyjnej jako regularnie przekraczające oczekiwane czasy oczekiwania. Inne metody też mogą okresowo wykazywać duże opóźnienia.

W przypadku niektórych bibliotek klienta domyślne limity czasu oczekiwania mogą powodować błędy przy wysyłaniu żądań z dużym opóźnieniem. Domyślne limity czasu dla podzbioru obsługiwanych bibliotek klienta to:

  • Java: 20 sekund
  • Python: 60 sekund
  • PHP: 60 sekund

Aby uniknąć przekroczenia limitów czasu po stronie klienta, możesz zwiększyć te domyślne limity czasu. Aby zmienić domyślny limit czasu biblioteki klienta w czasie działania, wykonaj te czynności:

Java

  1. Zaimportuj niezbędne zasoby.

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. Utwórz funkcję do ustawiania limitu czasu HTTP.

    /**
     * Adjusts HTTP timeout values used by the provided request initializer.
     *
     * @param requestInitializer The {@link HttpRequestInitializer} used to authorize requests.
     * @param newHttpTimeout The HTTP timeout for requests in seconds.
     * @return An {@link HttpRequestInitializer} with modified HTTP timeout values.
     */
    private static HttpRequestInitializer setHttpTimeout(
        final HttpRequestInitializer requestInitializer,
        final int newHttpTimeout) {
      return new HttpRequestInitializer() {
        @Override
        public void initialize(HttpRequest httpRequest) throws IOException {
          requestInitializer.initialize(httpRequest);
          httpRequest.setConnectTimeout(newHttpTimeout * 1_000);
          httpRequest.setReadTimeout(newHttpTimeout * 1_000);
        }
      };
    }
    
  3. Wywoływanie funkcji podczas tworzenia klienta Display & Video 360 API.

    // Create authorized API client with non-default timeouts.
    DisplayVideo service =
        new DisplayVideo.Builder(
            credential.getTransport(),
            credential.getJsonFactory(),
            setHttpTimeout(credential, http-timeout-in-seconds)
        )
            .setApplicationName("displayvideo-java-installed-app-sample")
            .build();
    

Python

  1. Zaimportuj moduł http biblioteki klienta interfejsu API Google API.

    from googleapiclient import http
    
  2. Stała domyślna wartość limitu czasu aktualizacji.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Utwórz usługę API.

    # Build the API service.
    service = discovery.build(
      'displayvideo',
      'v3',
      discoveryServiceUrl=discovery_url,
      credentials=credentials)
    

PHP

  1. Pobierz i zainstaluj bibliotekę HTTP Guzzle za pomocą Composer.

    composer require guzzlehttp/guzzle:^7.0
    
  2. Utwórz klienta HTTP Guzzle i przypisz wartość limitu czasu.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Utwórz klienta Google i przypisz klienta HTTP Guzzle.

    $client = new Google_Client();
    $client->setHttpClient($httpClient);
    

Postępowanie w przypadku błędów przekroczenia limitu czasu oczekiwania interfejsu API

W rzadkich przypadkach żądania wykonujące złożone operacje mogą przekroczyć limit czasu po stronie serwera wynoszący 180 sekund, co spowoduje zwrócenie odpowiedzi błędu 408 lub 504.

Jeśli żądanie zwróci odpowiedź z jednym z tych kodów błędu, zalecamy ponowienie próby przy użyciu strategii wykładniczego ponowienia.

Jeśli błąd będzie się powtarzał, skontaktuj się z zespołem pomocy przy użyciu formularza kontaktowego.