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

שיטות רבות של 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. קוראים לפונקציה כשיוצרים את הלקוח של 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

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

    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. מורידים ומתקינים את ספריית Guzzle HTTP באמצעות 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.

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

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