Waktu tunggu dan percobaan ulang

Beberapa metode API melakukan tugas kompleks yang dapat memerlukan waktu lebih dari beberapa detik untuk diselesaikan. Permintaan ini dapat memerlukan waktu lebih lama daripada yang diizinkan secara default. Hal ini dapat menyebabkan error di sisi API atau klien. Berikut cara untuk menghindari masalah yang disebabkan oleh latensi permintaan yang diperpanjang.

Meningkatkan waktu tunggu default di library klien

Beberapa metode biasanya merespons dengan latensi tinggi. Hal ini dicantumkan di halaman referensi metode. Metode lain juga dapat merespons dengan latensi tinggi pada kesempatan yang jarang terjadi.

Beberapa library klien memiliki batas waktu tunggu default. Batas ini menyebabkan error saat permintaan memiliki latensi tinggi. Waktu tunggu default untuk beberapa library klien yang didukung adalah:

  • Java: 20 detik.
  • Python: 60 detik.
  • PHP: 60 detik.

Tingkatkan batas default ini untuk menghindari error sisi klien. Berikut cara mengubah waktu tunggu default untuk library klien Anda:

Java

  1. Impor resource yang diperlukan.

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. Membangun fungsi untuk menyetel waktu tunggu 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. Panggil fungsi saat membuat klien 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. Impor modul http library klien Python Google API.

    from googleapiclient import http
    
  2. Perbarui konstanta waktu tunggu default.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. Bangun layanan API.

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

PHP

  1. Download dan instal library HTTP Guzzle menggunakan Composer.

    composer require guzzlehttp/guzzle:^7.0
  2. Buat klien HTTP Guzzle, tetapkan nilai waktu tunggu.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. Buat klien Google dan tetapkan klien HTTP Guzzle.

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

Menangani error waktu tunggu API

Dalam kasus yang jarang terjadi, permintaan dapat melebihi waktu tunggu server 180 detik. Dalam hal ini, API akan menampilkan error 408 atau 504.

Jika permintaan merespons dengan salah satu kode ini, coba lagi permintaan menggunakan backoff eksponensial.

Jika error tetap berlanjut, hubungi dukungan API.