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
Importez les ressources nécessaires.
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;
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); } }; }
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
Importez le module http de la bibliothèque cliente Python des API Google.
from googleapiclient import http
Mise à jour de la constante du délai avant expiration par défaut
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
Créer 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 le 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 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.