Tiempos de espera y reintentos

Algunos métodos de la API realizan tareas complejas que pueden tardar más de unos segundos en completarse. Estas solicitudes pueden tardar más de lo que permiten los valores predeterminados. Esto puede causar errores en la API o en el cliente. Estas son formas de evitar problemas causados por una latencia de solicitud prolongada.

Aumenta el tiempo de espera predeterminado en la biblioteca cliente

Algunos métodos suelen responder con una latencia alta. Esto se indica en la página de referencia del método. En ocasiones, otros métodos también pueden responder con una latencia alta.

Algunas bibliotecas cliente tienen límites de tiempo de espera predeterminados. Estos límites provocan errores cuando las solicitudes tienen una latencia alta. Los tiempos de espera predeterminados para algunas de las bibliotecas cliente compatibles son los siguientes:

  • Java: 20 segundos
  • Python: 60 segundos
  • PHP: 60 segundos

Aumenta estos límites predeterminados para evitar errores del cliente. Sigue estos pasos para cambiar el tiempo de espera predeterminado de tu biblioteca cliente:

Java

  1. Importa los recursos necesarios.

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. Compila una función para configurar el tiempo de espera de 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);
        }
      };
    }
    
  3. Llama a la función cuando crees el cliente de la API de Display & Video 360.

    // 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. Importa el módulo http de la biblioteca cliente de la API de Google para Python.

    from googleapiclient import http
    
  2. Se actualizó la constante de tiempo de espera predeterminado.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Compila el servicio de API.

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

PHP

  1. Descarga e instala la biblioteca HTTP Guzzle con Composer.

    composer require guzzlehttp/guzzle:^7.0
  2. Crea un cliente HTTP de Guzzle y asígnale un valor de tiempo de espera.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Crea un cliente de Google y asígnale un cliente HTTP de Guzzle.

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

Controla los errores de tiempo de espera de la API

En casos excepcionales, las solicitudes pueden exceder el tiempo de espera del servidor de 180 segundos. En este caso, la API devuelve un error 408 o 504.

Si una solicitud responde con uno de estos códigos, vuelve a intentarla con una retirada exponencial.

Si el error persiste, comunícate con el equipo de asistencia para las APIs.