יש שיטות API שמבצעות משימות מורכבות שיכולות להימשך יותר מכמה שניות. יכול להיות שהבקשות האלה יימשכו יותר זמן מהזמן שמוגדר כברירת מחדל. הדבר עלול לגרום לשגיאות ב-API או בצד הלקוח. אלה דרכים למנוע בעיות שנגרמות מזמן אחזור ארוך של בקשות.
הגדלת הזמן הקצוב לתפוגה שמוגדר כברירת מחדל בספריית הלקוח
יש שיטות שבהן זמן האחזור בדרך כלל גבוה. הערה כזו מופיעה בדף העזר של ה-method. גם שיטות אחרות עשויות להגיב עם חביון גבוה במקרים נדירים.
לחלק מספריות הלקוח יש מגבלות ברירת מחדל של זמן קצוב לתפוגה. המגבלות האלה גורמות לשגיאות כשיש השהיה ארוכה בבקשות. ערכי הזמן הקצובים שמוגדרים כברירת מחדל בחלק מספריות הלקוח הנתמכות הם:
- Java: 20 שניות.
- Python: 60 שניות.
- PHP: 60 שניות.
כדי להימנע משגיאות בצד הלקוח, צריך להגדיל את מגבלות ברירת המחדל האלה. כך משנים את ברירת המחדל של הזמן הקצוב לתפוגה בספריית הלקוח:
Java
מייבאים את המשאבים הנדרשים.
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;פיתוח פונקציה להגדרת פסק זמן (timeout) של 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); } }; }הפעלת פונקציית קריאה כשיוצרים את לקוח ה-API של 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
מייבאים את מודול ה-HTTP של ספריית הלקוח של Google API Python.
from googleapiclient import httpעדכון קבוע של ברירת המחדל של הזמן הקצוב לתפוגה.
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-secondsבניית שירות API.
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
מורידים ומתקינים את ספריית Guzzle HTTP באמצעות Composer.
composer require guzzlehttp/guzzle:^7.0יצירת לקוח HTTP של Guzzle והקצאת ערך פסק זמן.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);יוצרים לקוח Google ומקצים לקוח Guzzle HTTP.
$client = new Google_Client(); $client->setHttpClient($httpClient);
טיפול בשגיאות של פסק זמן ב-API
במקרים נדירים, בקשות עשויות לחרוג מהזמן הקצוב לתפוגה של השרת, שהוא 180 שניות. במקרה כזה, ה-API מחזיר שגיאה 408 או 504.
אם בקשה מגיבה באחד מהקודים האלה, צריך לנסות שוב את הבקשה באמצעות השהיה מעריכית לפני ניסיון חוזר.
אם השגיאה נמשכת, פנו לתמיכה בנושא API.