הגדרת פסקי זמן וניסיונות חוזרים

בהרבה שיטות של Display & Video 360 API יש פעולות מורכבות שעשויות להימשך יותר מכמה שניות. לפעמים, בקשות לשיטות האלו חורגות מזמן האחזור הצפוי, וגורמות לשגיאות ב-API או בצד הלקוח. בדף הזה מפורטות שיטות לטיפול בבעיות שנגרמות עקב זמן אחזור ארוך של בקשות.

הגדלה של הזמן הקצוב לתפוגה שמוגדר כברירת מחדל בספריית הלקוח

כמה שיטות ספציפיות סומנו במסמכי התיעוד שלהן כשיטה חורגת מזמן האחזור הצפוי באופן קבוע. מדי פעם גם שיטות אחרות יכולות להראות התנהגות עם זמן אחזור גבוה.

ברירת המחדל של מגבלות הזמן הקצוב לתפוגה של ספריות לקוח מסוימות עלולה לגרום לשגיאות ביצירת בקשות עם זמן אחזור גבוה. הזמן הקצוב לתפוגה שמוגדר כברירת מחדל לקבוצת משנה של ספריות לקוח נתמכות:

  • Java: 20 שניות
  • Python: 60 שניות
  • PHP: 60 שניות

ניתן למנוע חסימות זמניות בצד הלקוח על ידי הגדלת ברירת המחדל של הזמן הקצוב לתפוגה. כדי לשנות את ברירת המחדל עבור הזמן הקצוב לתפוגה של ספריית הלקוח במהלך זמן הריצה:

Java

  1. לייבא את המשאבים הנדרשים.

    import com.google.api.client.http.HttpRequest;
    import com.google.api.client.http.HttpRequestInitializer;
    import java.io.IOException;
    
  2. יצירת פונקציה להגדרת זמן קצוב לתפוגה של 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. פונקציית קריאה בזמן יצירה של לקוח 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

  1. מייבאים את מודול http של ספריית הלקוח ב-Python של Google API.

    from googleapiclient import http
    
  2. עדכון קבוע של הזמן הקצוב לתפוגה שמוגדר כברירת מחדל.

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. בניית שירות API.

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

PHP

  1. מורידים ומתקינים את ספריית ה-HTTP של Guzzle באמצעות Composer.

    composer require guzzlehttp/guzzle:^7.0
    
  2. יצירת לקוח HTTP של Guzzle, להקצאת ערך של זמן קצוב לתפוגה.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. יצירת לקוח של Google והקצאת לקוח HTTP של Guzzle.

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

טיפול בשגיאות שקשורות לזמן הקצוב לתפוגה של ה-API

במקרים נדירים, בקשות להשלמת פעולות מורכבות עלולות לחרוג מהזמן הקצוב לתפוגה בצד השרת של 180 שניות, וכתוצאה מכך ה-API יחזיר תגובת שגיאה מסוג 408 או 504.

אם בקשה מגיבה עם אחד מקודי השגיאה האלה, מומלץ לנסות שוב את הבקשות באמצעות אסטרטגיית השהיה מעריכית לפני ניסיון חוזר (exponential backoff).

אם השגיאה נמשכת, אפשר לפנות לתמיכה באמצעות הטופס ליצירת קשר.