إعداد المُهل وعمليات إعادة المحاولة

تُنفِّذ العديد من طرق Display & Video 360 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 في مكتبة Python لعملاء Google API.

    from googleapiclient import http
    
  2. تعديل ثابت المهلة التلقائية:

    http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-seconds
    
  3. إنشاء خدمة واجهة برمجة التطبيقات

    # 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. أنشئ عميل Guzzle HTTP، مع تحديد قيمة مهلة.

    $httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);
    
  3. أنشئ عميل Google وحدِّد عميل Guzzle HTTP.

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

التعامل مع أخطاء مهلة واجهة برمجة التطبيقات

في حالات نادرة، قد تتجاوز الطلبات التي تُكمِل عمليات معقّدة مهلة الانتظار التي تبلغ 180 ثانية على جانب الخادم، ما يؤدي إلى عرض واجهة برمجة التطبيقات استجابة خطأ 408 أو 504.

إذا تلقّى الطلب أيًا من رموز الخطأ هذين، ننصحك بإعادة محاولة إرسال هذه الطلبات باستخدام استراتيجية التراجع الأسي.

في حال استمرار ظهور الخطأ، يُرجى التواصل مع فريق الدعم باستخدام نموذج التواصل.