בהרבה שיטות של Display & Video 360 API יש פעולות מורכבות שעשויות להימשך יותר מכמה שניות. לפעמים, בקשות לשיטות האלו חורגות מזמן האחזור הצפוי, וגורמות לשגיאות ב-API או בצד הלקוח. בדף הזה מפורטות שיטות לטיפול בבעיות שנגרמות עקב זמן אחזור ארוך של בקשות.
הגדלה של הזמן הקצוב לתפוגה שמוגדר כברירת מחדל בספריית הלקוח
כמה שיטות ספציפיות סומנו במסמכי התיעוד שלהן כשיטה חורגת מזמן האחזור הצפוי באופן קבוע. מדי פעם גם שיטות אחרות יכולות להראות התנהגות עם זמן אחזור גבוה.
ברירת המחדל של מגבלות הזמן הקצוב לתפוגה של ספריות לקוח מסוימות עלולה לגרום לשגיאות ביצירת בקשות עם זמן אחזור גבוה. הזמן הקצוב לתפוגה שמוגדר כברירת מחדל לקבוצת משנה של ספריות לקוח נתמכות:
- 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;
יצירת פונקציה להגדרת זמן קצוב לתפוגה של 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 של ספריית הלקוח ב-Python של Google API.
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
מורידים ומתקינים את ספריית ה-HTTP של Guzzle באמצעות Composer.
composer require guzzlehttp/guzzle:^7.0
יצירת לקוח HTTP של Guzzle, להקצאת ערך של זמן קצוב לתפוגה.
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
יצירת לקוח של Google והקצאת לקוח HTTP של Guzzle.
$client = new Google_Client(); $client->setHttpClient($httpClient);
טיפול בשגיאות שקשורות לזמן הקצוב לתפוגה של ה-API
במקרים נדירים, בקשות להשלמת פעולות מורכבות עלולות לחרוג מהזמן הקצוב לתפוגה בצד השרת של 180 שניות, וכתוצאה מכך ה-API יחזיר תגובת שגיאה מסוג 408
או 504
.
אם בקשה מגיבה עם אחד מקודי השגיאה האלה, מומלץ לנסות שוב את הבקשות באמצעות אסטרטגיית השהיה מעריכית לפני ניסיון חוזר (exponential backoff).
אם השגיאה נמשכת, אפשר לפנות לתמיכה באמצעות הטופס ליצירת קשר.