Тайм-ауты и повторные попытки

Некоторые методы API выполняют сложные задачи, выполнение которых может занимать более нескольких секунд. Эти запросы могут выполняться дольше, чем позволяют значения по умолчанию. Это может привести к ошибкам на стороне API или клиента. Ниже приведены способы предотвращения проблем, вызванных длительной задержкой запросов.

Увеличьте время ожидания по умолчанию в клиентской библиотеке.

Некоторые методы обычно отвечают с высокой задержкой. Это указано на странице описания метода. Другие методы также могут в редких случаях отвечать с высокой задержкой.

В некоторых клиентских библиотеках установлены ограничения по времени ожидания по умолчанию. Эти ограничения приводят к ошибкам при высокой задержке запросов. Значения времени ожидания по умолчанию для некоторых поддерживаемых клиентских библиотек следующие:

  • Java : 20 секунд.
  • Python : 60 секунд.
  • PHP : 60 секунд.

Увеличьте эти значения по умолчанию, чтобы избежать ошибок на стороне клиента. Вот как изменить время ожидания по умолчанию для вашей клиентской библиотеки:

Java

  1. Импортируйте необходимые ресурсы.

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. 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);
        }
      };
    }
    
  3. Вызовите функцию при создании клиента 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

  1. Импортируйте модуль http из клиентской библиотеки Python для Google API.

    from googleapiclient import http
    
  2. Обновить константу таймаута по умолчанию.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Создайте API-сервис.

    # Build the API service.
    service = discovery.build(
      'displayvideo',
      'v3',
      discoveryServiceUrl=discovery_url,
      credentials=credentials)
    

PHP

  1. Загрузите и установите библиотеку Guzzle HTTP с помощью Composer .

    composer require guzzlehttp/guzzle:^7.0
  2. Создайте HTTP-клиент Guzzle, назначив ему значение таймаута.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Создайте клиент Google и назначьте ему HTTP-клиент Guzzle.

    $client = new Google_Client();
    $client->setHttpClient($httpClient);
    

Обработка ошибок таймаута API

В редких случаях запросы могут превышать время ожидания сервера в 180 секунд. В этом случае API возвращает ошибку 408 или 504 .

Если в ответ на запрос приходит один из этих кодов, повторите запрос, используя экспоненциальную задержку .

Если ошибка сохраняется, обратитесь в службу поддержки API .