Configurare timeout e nuovi tentativi

Molti metodi dell'API Display & Video 360 eseguono operazioni complesse che potrebbero richiedere più di qualche secondo. A volte le richieste a questi metodi possono superare la latenza prevista, causando errori sull'API o sul lato client. Questa pagina elenca le pratiche per gestire i problemi causati dalla latenza delle richieste estesa.

Aumentare il timeout predefinito nella libreria client

Alcuni metodi specifici sono stati etichettati nella documentazione di riferimento come metodi che superano regolarmente la latenza prevista. Anche altri metodi potrebbero presentare periodicamente un comportamento con latenza elevata.

I limiti di timeout predefiniti per alcune librerie client potrebbero causare errori quando si effettuano richieste con latenza elevata. I timeout predefiniti per un sottoinsieme di librerie client supportate sono:

  • Java: 20 secondi
  • Python: 60 secondi
  • PHP: 60 secondi

I timeout lato client possono essere evitati aumentando questi timeout predefiniti. Segui queste istruzioni per modificare il timeout predefinito per la libreria client durante l'esecuzione:

Java

  1. Importa le risorse necessarie.

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. Crea una funzione per impostare il timeout 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. Chiama la funzione quando crei il client dell'API Display & Video 360.

    // 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. Importa il modulo http della libreria client Python dell'API di Google.

    from googleapiclient import http
    
  2. Aggiorna la costante di timeout predefinita.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Crea il servizio API.

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

PHP

  1. Scarica e installa la libreria HTTP Guzzle utilizzando Composer.

    composer require guzzlehttp/guzzle:^7.0
  2. Crea il client HTTP Guzzle, assegnando il valore del timeout.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Crea il client Google e assegna il client HTTP Guzzle.

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

Gestire gli errori di timeout dell'API

In rari casi, le richieste che completano operazioni complesse potrebbero superare il timeout lato server di 180 secondi, causando la restituzione di una risposta di errore 408 o 504 da parte dell'API.

Se una richiesta risponde con uno di questi codici di errore, ti consigliamo di ritentare queste richieste utilizzando la strategia di backoff esponenziale.

Se l'errore persiste, contatta l'assistenza utilizzando il modulo di contatto.