Một số phương thức API thực hiện các tác vụ phức tạp có thể mất hơn vài giây để hoàn thành. Những yêu cầu này có thể mất nhiều thời gian hơn so với thời gian mặc định. Điều này có thể gây ra lỗi ở phía API hoặc máy khách. Đây là những cách để ngăn chặn các vấn đề do độ trễ yêu cầu kéo dài gây ra.
Tăng thời gian chờ mặc định trong thư viện ứng dụng
Một số phương thức thường phản hồi với độ trễ cao. Điều này được ghi chú trên trang tham chiếu của phương thức. Các phương thức khác cũng có thể phản hồi với độ trễ cao trong một số trường hợp hiếm gặp.
Một số thư viện ứng dụng có giới hạn thời gian chờ mặc định. Những giới hạn này gây ra lỗi khi các yêu cầu có độ trễ cao. Thời gian chờ mặc định cho một số thư viện ứng dụng được hỗ trợ là:
- Java: 20 giây.
- Python: 60 giây.
- PHP: 60 giây.
Tăng các giới hạn mặc định này để tránh lỗi phía máy khách. Sau đây là cách thay đổi thời gian chờ mặc định cho thư viện ứng dụng:
Java
Nhập các tài nguyên cần thiết.
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;Tạo hàm để thiết lập thời gian chờ 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); } }; }Gọi hàm khi tạo ứng dụng 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
Nhập mô-đun http của thư viện ứng dụng Google API Python.
from googleapiclient import httpCập nhật hằng số thời gian chờ mặc định.
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-secondsTạo dịch vụ API.
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
Tải xuống và cài đặt thư viện Guzzle HTTP bằng Composer.
composer require guzzlehttp/guzzle:^7.0Tạo ứng dụng HTTP Guzzle, chỉ định giá trị thời gian chờ.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);Tạo ứng dụng Google và chỉ định ứng dụng HTTP Guzzle.
$client = new Google_Client(); $client->setHttpClient($httpClient);
Xử lý lỗi hết thời gian chờ của API
Trong một số ít trường hợp, các yêu cầu có thể vượt quá thời gian chờ của máy chủ là 180 giây. Trong trường hợp này, API sẽ trả về lỗi 408 hoặc 504.
Nếu một yêu cầu phản hồi bằng một trong các mã này, hãy thử lại yêu cầu bằng cách sử dụng thuật toán thời gian đợi luỹ thừa.
Nếu lỗi vẫn tiếp diễn, hãy liên hệ với nhóm hỗ trợ API.