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 qui peuvent prendre plus de quelques secondes. Les requêtes envoyées à ces méthodes peuvent parfois dépasser la latence attendue, ce qui entraîne des erreurs côté API ou client. Cette page liste les pratiques à suivre pour gérer les problèmes causés par une latence de requête prolongée.

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

Dans leur documentation de référence, certaines méthodes spécifiques ont été signalées comme dépassant régulièrement la latence attendue. D'autres méthodes peuvent également présenter un comportement à latence élevée de manière périodique.

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

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

Vous pouvez éviter les délais avant expiration 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. Fonction de compilation pour 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 la fonction lorsque vous créez le client de l'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 de délai avant expiration par défaut.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Créez 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 un 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 d'expiration de délai de l'API

Dans de rares cas, les requêtes effectuant des opérations complexes peuvent dépasser le délai d'inactivité côté serveur de 180 secondes, ce qui entraîne le renvoi d'une réponse d'erreur 408 ou 504 par l'API.

Si une requête renvoie l'un de ces codes d'erreur, nous vous recommandons de relancer ces requêtes à l'aide de la stratégie d'intervalle exponentiel entre les tentatives.

Si l'erreur persiste, contactez l'assistance à l'aide du formulaire de contact.