Délais d'expiration et nouvelles tentatives

Certaines méthodes d'API effectuent des tâches complexes qui peuvent prendre plus de quelques secondes. Ces requêtes peuvent prendre plus de temps que les valeurs par défaut ne le permettent. Cela peut entraîner des erreurs côté API ou client. Ces méthodes permettent d'éviter 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

Certaines méthodes répondent souvent avec une latence élevée. Cela est indiqué sur la page de référence de la méthode. D'autres méthodes peuvent également répondre avec une latence élevée à de rares occasions.

Certaines bibliothèques clientes ont des limites de délai d'attente par défaut. Ces limites entraînent des erreurs lorsque les requêtes ont une latence élevée. Voici les délais d'attente par défaut pour certaines des bibliothèques clientes compatibles :

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

Augmentez ces limites par défaut pour éviter les erreurs côté client. Voici comment modifier le délai avant expiration par défaut de votre bibliothèque cliente :

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 d'attente 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 lors de la création du 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 et attribuez-lui 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 peuvent dépasser le délai avant expiration du serveur de 180 secondes. Dans ce cas, l'API renvoie une erreur 408 ou 504.

Si une requête renvoie l'un de ces codes, relancez-la à l'aide d'un intervalle exponentiel entre les tentatives.

Si l'erreur persiste, contactez l'assistance API.