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

تنفّذ بعض طرق واجهة برمجة التطبيقات مهام معقّدة قد يستغرق إكمالها أكثر من بضع ثوانٍ. وقد تستغرق هذه الطلبات وقتًا أطول من الوقت المسموح به تلقائيًا. ويمكن أن يؤدي ذلك إلى حدوث أخطاء في واجهة برمجة التطبيقات أو من جهة العميل. في ما يلي طرق لتجنُّب المشاكل الناتجة عن زيادة مدة استجابة الطلبات.

زيادة المهلة التلقائية في مكتبة العميل

تستجيب بعض الطرق عادةً بمدة استجابة طويلة. ويتم توضيح ذلك في صفحة المرجع الخاصة بالطريقة. وقد تستجيب طرق أخرى أيضًا بمدة استجابة طويلة في حالات نادرة.

تتضمّن بعض مكتبات العميل حدودًا قصوى تلقائية للمهلة. وتؤدي هذه الحدود إلى حدوث أخطاء عندما تكون مدة استجابة الطلبات طويلة. في ما يلي المهلات التلقائية لبعض مكتبات العميل المتوافقة:

  • ‫Java: 20 ثانية
  • Python: 60 ثانية
  • PHP: 60 ثانية

يُرجى زيادة هذه الحدود التلقائية لتجنُّب الأخطاء من جهة العميل. في ما يلي كيفية تغيير المهلة التلقائية لمكتبة العميل:

جافا

  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. إنشاء خدمة واجهة برمجة التطبيقات

    # 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.

إذا استجاب أحد الطلبات بأحد هذين الرمزَين، أعِد محاولة الطلب باستخدام التراجع الأسي.

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