برخی از متدهای API وظایف پیچیدهای را انجام میدهند که تکمیل آنها میتواند بیش از چند ثانیه طول بکشد. این درخواستها میتوانند بیشتر از زمان پیشفرض طول بکشند. این میتواند باعث ایجاد خطا در API یا سمت کلاینت شود. اینها راههایی برای جلوگیری از مشکلات ناشی از تأخیر طولانی درخواست هستند.
افزایش زمان پیشفرض وقفه در کتابخانه کلاینت
برخی از روشها معمولاً با تأخیر بالایی پاسخ میدهند. این موضوع در صفحه مرجع روش ذکر شده است. سایر روشها نیز ممکن است در موارد نادر با تأخیر بالایی پاسخ دهند.
Some client libraries have default timeout limits. These limits cause errors when requests have high latency. Default timeouts for some of the supported client libraries are:
- جاوا : 20 ثانیه.
- پایتون : ۶۰ ثانیه.
- پی اچ پی : ۶۰ ثانیه.
برای جلوگیری از خطاهای سمت کلاینت، این محدودیتهای پیشفرض را افزایش دهید. در اینجا نحوه تغییر زمان انتظار پیشفرض برای کتابخانه کلاینت شما آورده شده است:
جاوا
منابع لازم را وارد کنید.
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;ساخت تابع برای تنظیم زمان انقضای 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); } }; }هنگام ایجاد کلاینت 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();
پایتون
ماژول http کتابخانه کلاینت پایتون API گوگل را ایمپورت کنید.
from googleapiclient import httpثابت پیشفرض timeout را بهروزرسانی کنید.
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-secondsساخت سرویس API.
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
پی اچ پی
کتابخانه Guzzle HTTP را با استفاده از Composer دانلود و نصب کنید.
composer require guzzlehttp/guzzle:^7.0یک کلاینت HTTP از نوع Guzzle ایجاد کنید و مقدار timeout را به آن اختصاص دهید.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);کلاینت گوگل ایجاد کنید و کلاینت HTTP مربوط به Guzzle را به آن اختصاص دهید.
$client = new Google_Client(); $client->setHttpClient($httpClient);
مدیریت خطاهای مربوط به وقفه زمانی API
در موارد نادر، درخواستها ممکن است از زمان انتظار سرور که ۱۸۰ ثانیه است، تجاوز کنند. در این حالت، API خطای 408 یا 504 را برمیگرداند.
اگر درخواستی با یکی از این کدها پاسخ داد، درخواست را با استفاده از تابع برگشت نمایی (exponential backoff) دوباره امتحان کنید.
اگر خطا همچنان ادامه داشت، با پشتیبانی API تماس بگیرید .