Configurer des délais avant expiration et de nouvelles tentatives

De nombreuses méthodes de l'API Display & Video 360 effectuent des opérations complexes pouvant prendre plus de quelques secondes. Les requêtes adressées à ces méthodes peuvent parfois dépasser la latence attendue, ce qui entraîne des erreurs au niveau de l'API ou du côté client. Cette page répertorie les pratiques permettant de gérer les problèmes causés par une latence étendue des requêtes.

Augmenter le délai avant expiration par défaut dans la bibliothèque cliente

Plusieurs méthodes spécifiques ont été désignées dans leur documentation de référence comme étant susceptibles de dépasser régulièrement la latence attendue. D'autres méthodes peuvent également présenter régulièrement un comportement à latence élevée.

Les limites de délai avant expiration par défaut pour certaines bibliothèques clientes peuvent entraîner des erreurs lors de l'exécution de requêtes à latence élevée. Voici les délais avant expiration par défaut pour un sous-ensemble de bibliothèques clientes compatibles:

  • Java: 20 secondes
  • Python: 60 secondes
  • PHP: 60 secondes

Il est possible d'éviter les délais d'inactivité côté client en augmentant ces délais par défaut. Suivez ces instructions pour ajuster le délai avant expiration par défaut de votre bibliothèque cliente pendant l'exécution:

Java

  1. Importez les ressources nécessaires.

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. Créez une fonction permettant de définir le délai avant expiration 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. Appelez une fonction lors de la création du client 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. Importez le module http de la bibliothèque cliente Python des API Google.

    from googleapiclient import http
    
  2. Mise à jour de la constante du délai avant expiration par défaut

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Créer un service d'API.

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

PHP

  1. Téléchargez et installez la bibliothèque HTTP Guzzle à l'aide de Composer.

    composer require guzzlehttp/guzzle:^7.0
    
  2. Créez le client HTTP Guzzle en attribuant une valeur de délai avant expiration.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Créez un client Google et attribuez-lui le client HTTP Guzzle.

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

Gérer les erreurs de délai avant expiration de l'API

Dans de rares cas, les requêtes effectuant des opérations complexes peuvent dépasser le délai avant expiration côté serveur de 180 secondes, ce qui amène l'API à renvoyer une réponse d'erreur 408 ou 504.

Si une requête renvoie l'un de ces codes d'erreur, nous vous recommandons de réessayer en utilisant la stratégie d'intervalle exponentiel entre les tentatives.

Si l'erreur persiste, contactez l'assistance via le formulaire de contact.