Некоторые методы 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;Build function for setting HTTP timeout.
/** * 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
Импортируйте модуль http из клиентской библиотеки Python для Google API.
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
Загрузите и установите библиотеку Guzzle HTTP с помощью Composer .
composer require guzzlehttp/guzzle:^7.0Создайте HTTP-клиент Guzzle, назначив ему значение таймаута.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);Создайте клиент Google и назначьте ему HTTP-клиент Guzzle.
$client = new Google_Client(); $client->setHttpClient($httpClient);
Обработка ошибок таймаута API
В редких случаях запросы могут превышать время ожидания сервера в 180 секунд. В этом случае API возвращает ошибку 408 или 504 .
Если в ответ на запрос приходит один из этих кодов, повторите запрос, используя экспоненциальную задержку .
Если ошибка сохраняется, обратитесь в службу поддержки API .