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
Importez les ressources nécessaires.
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;
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); } }; }
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
Importez le module HTTP de la bibliothèque cliente Python des API Google.
from googleapiclient import http
Mise à jour de la constante de délai avant expiration par défaut.
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
Créez un service d'API.
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
Téléchargez et installez la bibliothèque HTTP Guzzle à l'aide de Composer.
composer require guzzlehttp/guzzle:^7.0
Créez un client HTTP Guzzle en attribuant une valeur de délai avant expiration.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
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.