Alcuni metodi API eseguono attività complesse che possono richiedere più di qualche secondo per essere completate. Queste richieste possono richiedere più tempo di quanto consentito dalle impostazioni predefinite. Ciò può causare errori lato API o client. Questi sono modi per evitare problemi causati da una latenza delle richieste prolungata.
Aumenta il timeout predefinito nella libreria client
Alcuni metodi rispondono comunemente con una latenza elevata. Questo è indicato nella pagina di riferimento del metodo. Anche altri metodi potrebbero rispondere con una latenza elevata in rare occasioni.
Alcune librerie client hanno limiti di timeout predefiniti. Questi limiti causano errori quando le richieste hanno una latenza elevata. I timeout predefiniti per alcune delle librerie client supportate sono:
- Java: 20 secondi.
- Python: 60 secondi.
- PHP: 60 secondi.
Aumenta questi limiti predefiniti per evitare errori lato client. Ecco come modificare il timeout predefinito per la libreria client:
Java
Importa le risorse necessarie.
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;Crea una funzione per impostare il timeout 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); } }; }Chiama la funzione durante la creazione del 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
Importa il modulo http della libreria client Python dell'API di Google.
from googleapiclient import httpAggiorna la costante di timeout predefinita.
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-secondsCrea il servizio API.
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
Scarica e installa la libreria HTTP Guzzle utilizzando Composer.
composer require guzzlehttp/guzzle:^7.0Crea il client HTTP Guzzle, assegnando il valore di timeout.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);Crea il client Google e assegna il client HTTP Guzzle.
$client = new Google_Client(); $client->setHttpClient($httpClient);
Gestire gli errori di timeout dell'API
In rari casi, le richieste potrebbero superare il timeout del server di 180 secondi. In questo
caso, l'API restituisce un errore 408 o 504.
Se una richiesta risponde con uno di questi codici, riprova a inviare la richiesta utilizzando il backoff esponenziale.
Se l'errore persiste, contatta l'assistenza API.