Niektóre metody interfejsu API wykonują złożone zadania, których realizacja może potrwać więcej niż kilka sekund. Wykonanie tych żądań może trwać dłużej niż domyślny czas oczekiwania. Może to powodować błędy po stronie interfejsu API lub klienta. Oto sposoby na uniknięcie problemów spowodowanych wydłużonym czasem oczekiwania na żądanie.
Zwiększanie domyślnego limitu czasu w bibliotece klienta
Niektóre metody często odpowiadają z dużym opóźnieniem. Jest to podane na stronie referencyjnej metody. Inne metody mogą też w rzadkich przypadkach odpowiadać z dużym opóźnieniem.
Niektóre biblioteki klienta mają domyślne limity czasu. Te limity powodują błędy, gdy żądania mają duże opóźnienie. Domyślne limity czasu w przypadku niektórych obsługiwanych bibliotek klienta to:
- Java: 20 sekund.
- Python: 60 sekund.
- PHP 60 sekund.
Zwiększ te domyślne limity, aby uniknąć błędów po stronie klienta. Aby zmienić domyślny limit czasu w bibliotece klienta:
Java
Zaimportuj niezbędne zasoby.
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;Utwórz funkcję ustawiania limitu czasu 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); } }; }Wywołaj funkcję podczas tworzenia klienta interfejsu Display & Video 360 API.
// 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
Zaimportuj moduł http biblioteki klienta interfejsów API Google do języka Python.
from googleapiclient import httpZaktualizuj domyślną stałą limitu czasu.
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-secondsUtwórz usługę API.
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
Pobierz i zainstaluj bibliotekę HTTP Guzzle za pomocą Composera.
composer require guzzlehttp/guzzle:^7.0Utwórz klienta HTTP Guzzle, przypisując wartość limitu czasu.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);Utwórz klienta Google i przypisz klienta HTTP Guzzle.
$client = new Google_Client(); $client->setHttpClient($httpClient);
Obsługa błędów przekroczenia limitu czasu interfejsu API
W rzadkich przypadkach żądania mogą przekroczyć limit czasu serwera wynoszący 180 sekund. W takim przypadku interfejs API zwraca błąd 408 lub 504.
Jeśli w odpowiedzi na żądanie otrzymasz jeden z tych kodów, ponów próbę, korzystając z wzrastającego czasu do ponowienia.
Jeśli błąd będzie się powtarzał, skontaktuj się z zespołem pomocy ds. interfejsu API.