Bazı API yöntemleri, tamamlanması birkaç saniyeden uzun sürebilen karmaşık görevler gerçekleştirir. Bu istekler, varsayılan süreden daha uzun sürebilir. Bu durum, API veya istemci tarafında hatalara neden olabilir. Bunlar, uzun istek gecikmesinin neden olduğu sorunları önlemenin yollarıdır.
İstemci kitaplığında varsayılan zaman aşımını artırma
Bazı yöntemler genellikle yüksek gecikmeyle yanıt verir. Bu durum, yöntemin referans sayfasında belirtilir. Diğer yöntemler de nadir durumlarda yüksek gecikme süresiyle yanıt verebilir.
Bazı istemci kitaplıklarında varsayılan zaman aşımı sınırları vardır. Bu sınırlar, isteklerde yüksek gecikme olduğunda hatalara neden olur. Desteklenen bazı istemci kitaplıkları için varsayılan zaman aşımları şunlardır:
- Java: 20 saniye.
- Python: 60 saniye.
- PHP: 60 saniye.
İstemci tarafı hatalarını önlemek için bu varsayılan sınırları artırın. İstemci kitaplığınızın varsayılan zaman aşımını şu şekilde değiştirebilirsiniz:
Java
Gerekli kaynakları içe aktarın.
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;HTTP zaman aşımını ayarlamak için işlev oluşturun.
/** * 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); } }; }Display & Video 360 API istemcisi oluşturulurken işlevi çağırma.
// 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
Google API Python istemci kitaplığı http modülünü içe aktarın.
from googleapiclient import httpVarsayılan zaman aşımı sabitini güncelleyin.
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-secondsAPI hizmeti oluşturun.
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
Composer'ı kullanarak Guzzle HTTP kitaplığını indirip yükleyin.
composer require guzzlehttp/guzzle:^7.0Zaman aşımı değeri atayarak Guzzle HTTP istemcisi oluşturun.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);Google istemcisi oluşturun ve Guzzle HTTP istemcisini atayın.
$client = new Google_Client(); $client->setHttpClient($httpClient);
API zaman aşımı hatalarını giderme
Nadir durumlarda istekler, 180 saniyelik sunucu zaman aşımını aşabilir. Bu durumda API, 408 veya 504 hatası döndürür.
Bir istek bu kodlardan biriyle yanıt verirse eksponansiyel geri yüklemeyi kullanarak isteği yeniden deneyin.
Hata devam ederse API desteğiyle iletişime geçin.