部分 API 方法會執行複雜工作,可能需要幾秒鐘以上的時間才能完成。這些要求可能需要較長的時間,超出預設允許的範圍。這可能會導致 API 或用戶端發生錯誤。以下是避免因要求延遲時間過長而導致問題的方法。
增加用戶端程式庫中的預設逾時
部分方法通常會以高延遲時間回應。方法參考頁面會註明這點。其他方法也可能在極少數情況下以高延遲時間回應。
部分用戶端程式庫設有預設逾時限制。如果要求延遲時間較長,就會因超出這些限制而發生錯誤。部分支援的用戶端程式庫預設逾時時間如下:
- Java:20 秒。
- Python:60 秒。
- PHP:60 秒。
請提高這些預設限制,以免發生用戶端錯誤。如要變更用戶端程式庫的預設逾時時間,請按照下列步驟操作:
Java
匯入必要資源。
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;建構函式,用於設定 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); } }; }建立 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
匯入 Google API Python 用戶端程式庫的 http 模組。
from googleapiclient import http更新預設逾時常數。
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds建構 API 服務。
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
使用 Composer 下載並安裝 Guzzle HTTP 程式庫。
composer require guzzlehttp/guzzle:^7.0建立 Guzzle HTTP 用戶端,並指派逾時值。
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);建立 Google 用戶端,並指派 Guzzle HTTP 用戶端。
$client = new Google_Client(); $client->setHttpClient($httpClient);
處理 API 逾時錯誤
在極少數情況下,要求可能會超過伺服器 180 秒的逾時時間。在這種情況下,API 會傳回 408 或 504 錯誤。
如果要求傳回其中一個代碼,請使用指數輪詢重試要求。
如果錯誤持續發生,請與 API 支援團隊聯絡。