تنفّذ بعض طرق واجهة برمجة التطبيقات مهامًا معقّدة قد يستغرق إكمالها أكثر من بضع ثوانٍ. قد تستغرق هذه الطلبات وقتًا أطول من المدة التلقائية المسموح بها. ويمكن أن يؤدي ذلك إلى حدوث أخطاء من جهة واجهة برمجة التطبيقات أو العميل. في ما يلي طرق لتجنُّب المشاكل الناتجة عن وقت استجابة الطلبات الطويل.
زيادة المهلة التلقائية في مكتبة البرامج
تستغرق بعض الطرق وقتًا طويلاً للاستجابة. يتم توضيح ذلك في صفحة المرجع الخاصة بالطريقة. قد تستجيب طرق أخرى أيضًا بوقت استجابة عالٍ في حالات نادرة.
تتضمّن بعض مكتبات البرامج حدودًا تلقائية للمهلة. تتسبّب هذه الحدود القصوى في حدوث أخطاء عندما يكون وقت الاستجابة للطلبات طويلاً. في ما يلي مهلات تلقائية لبعض مكتبات البرامج المتوافقة مع العميل:
- Java: 20 ثانية
- Python: 60 ثانية
- PHP: 60 ثانية
يمكنك زيادة هذه الحدود التلقائية لتجنُّب حدوث أخطاء من جهة العميل. في ما يلي كيفية تغيير المهلة التلقائية لمكتبة العميل:
جافا
استيراد الموارد اللازمة
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); } }; }استدعاء الدالة عند إنشاء برنامج عميل واجهة برمجة التطبيقات في "مساحة العرض والفيديو 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 الخاصة بمكتبة عميل Google API Python.
from googleapiclient import httpتعديل الثابت التلقائي لمهلة الانتظار
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-secondsإنشاء خدمة واجهة برمجة التطبيقات
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
نزِّل مكتبة Guzzle HTTP وثبِّتها باستخدام 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);
التعامل مع أخطاء انتهاء المهلة في واجهة برمجة التطبيقات
في حالات نادرة، قد تتجاوز الطلبات مهلة الخادم البالغة 180 ثانية. في هذه الحالة، تعرض واجهة برمجة التطبيقات الخطأ 408 أو 504.
إذا ردّ طلب بأحد هذه الرموز، أعِد محاولة الطلب باستخدام الرقود الأسي الثنائي.
في حال استمرار ظهور الخطأ، يُرجى التواصل مع فريق دعم واجهة برمجة التطبيقات.