تحميل وسائط

تتيح ميزة تحميل الوسائط لواجهة برمجة تطبيقات "مدير الحملة 360" تخزين البيانات في السحابة الإلكترونية وإتاحتها للخادم. يمكن أن يتضمّن نوع البيانات التي يمكن تحميلها صورًا أو فيديوهات أو ملفات PDF أو ملفات ZIP أو أي نوع آخر من البيانات.

توضّح الأمثلة الواردة في هذا المستند استخدام تحميل الوسائط في واجهة برمجة تطبيقات خيالية في Farm Farm. ومع ذلك، تنطبق المفاهيم نفسها على واجهة برمجة تطبيقات "مدير الحملة 360".

خيارات التحميل

تسمح لك "مدير الحملة 360" بتحميل أنواع معيّنة من البيانات الثنائية أو الوسائط. يتم تحديد الخصائص المحددة للبيانات التي يمكنك تحميلها على الصفحة المرجعية لأي طريقة تتيح تحميل الوسائط.

  • الحد الأقصى لحجم ملف التحميل: الحد الأقصى لحجم البيانات التي يمكنك تخزينها بهذه الطريقة.
  • أنواع MIME المقبولة للوسائط: أنواع البيانات الثنائية التي يمكنك تخزينها باستخدام هذه الطريقة.

يمكنك تقديم طلبات التحميل بأي من الطرق التالية. حدِّد الطريقة التي تستخدمها مع معلَمة الطلب uploadType.

  • تحميل بسيط: uploadType=media. ولنقل الملفات بسرعة أصغر، مثل 5 ميغابايت أو أقل
  • تحميل متعدد الأجزاء: uploadType=multipart. وللنقل السريع للملفات الأصغر والبيانات الوصفية، ينقل الملف مع البيانات الوصفية التي تصفه، وكل ذلك في طلب واحد.
  • تحميل قابل للاستئناف: uploadType=resumable لنقل البيانات بشكل موثوق، لا سيما مع الملفات الأكبر حجمًا. وبهذه الطريقة، يمكنك استخدام طلب بدء الجلسة، والذي يمكن أن يتضمن بيانات وصفية إذا أردت. وهذه استراتيجية جيدة لاستخدامها في معظم التطبيقات، لأنها تعمل أيضًا مع ملفات أصغر حجمًا بتكلفة طلب HTTP إضافي واحد لكل تحميل.

عند تحميل الوسائط، يتم استخدام معرّف موارد منتظم (URI) خاص. في الواقع، تتضمن الطرق التي تدعم عمليات تحميل الوسائط نقطتَي نهاية لعنوان URL:

  • معرّف الموارد المنتظم (URI) للمحتوى الذي تم تحميله، للوسائط. ويكون تنسيق نقطة نهاية التحميل هو معرّف الموارد المنتظم (URI) للمورد العادي مع البادئة "/تحميل". يمكنك استخدام معرّف الموارد المنتظم (URI) عند نقل بيانات الوسائط نفسها.

    مثال: POST /upload/farm/v1/animals

  • معرّف الموارد المنتظم (URI) للمرجع العادي للبيانات الوصفية إذا كان المورد يحتوي على أي حقول بيانات، يتم استخدام هذه الحقول لتخزين البيانات الوصفية التي تصف الملف الذي تم تحميله. يمكنك استخدام معرّف الموارد المنتظم (URI) عند إنشاء قيم البيانات الوصفية أو تعديلها.

    مثال: POST /farm/v1/animals

تحميل بسيط

إنّ أسهل طريقة لتحميل ملف هي من خلال تقديم طلب تحميل بسيط. يكون هذا الخيار جيدًا في الحالات التالية:

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

لاستخدام عملية تحميل بسيطة، يمكنك إرسال طلب POST أو PUT إلى معرّف الموارد المنتظم (URI) للتحميل أو إضافة مَعلمة طلب البحث uploadType=media. على سبيل المثال:

POST https://www.googleapis.com/upload/farm/v1/animals?uploadType=media

تتضمن عناوين HTTP التي يمكن استخدامها عند تقديم طلب تحميل بسيط ما يلي:

  • Content-Type. اضبط على أحد أنواع بيانات وسائط التحميل المقبولة للطريقة، والمحدَّدة في مرجع واجهة برمجة التطبيقات.
  • Content-Length. اضبط عدد وحدات البايت التي تحمّلها. هذه السمة غير مطلوبة إذا كنت تستخدم ترميز نقل الأجزاء.

مثال: تحميل بسيط

يوضّح المثال التالي استخدام طلب بسيط لتحميل واجهة برمجة تطبيقات المزرعة الخيالية.

POST /upload/farm/v1/animals?uploadType=media HTTP/1.1
Host: www.googleapis.com
Content-Type: image/jpeg
Content-Length: number_of_bytes_in_file
Authorization: Bearer your_auth_token

JPEG data

وفي حال نجاح الطلب، يعرض الخادم رمز حالة HTTP 200 OK مع أي بيانات وصفية:

HTTP/1.1 200
Content-Type: application/json

{
  "name": "Llama"
}

تحميل متعدد الأجزاء

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

لاستخدام عملية تحميل متعدّد الأجزاء، أرسِل طلب POST أو PUT إلى معرّف الموارد المنتظم (URI) للتحميل، ثم أضِف معلَمة طلب البحث uploadType=multipart، على سبيل المثال:

POST https://www.googleapis.com/upload/farm/v1/animals?uploadType=multipart

تتضمن عناوين HTTP ذات المستوى الأعلى التي يمكن استخدامها عند تقديم طلب تحميل متعدد الأجزاء ما يلي:

  • Content-Type: اضبط السمة على "متعددة/ذات الصلة" وأدرِج سلسلة الحدود التي تستخدمها لتحديد أجزاء الطلب.
  • Content-Length. ضبط على إجمالي عدد وحدات البايت في نص الطلب. يجب أن يكون جزء الوسائط من الطلب أقل من الحد الأقصى لحجم الملف المحدد لهذه الطريقة.

يتم تنسيق نص الطلب كنوع محتوى multipart/related [RFC2387] ويحتوي على جزأين بالضبط. ويتم تحديد الأجزاء من خلال سلسلة حدود وسلسلة الحدود النهائية متبوعة بواصلتين.

يتطلب كل جزء من الطلب المتعدد الأجزاء عنوان Content-Type إضافيًا:

  1. جزء البيانات الوصفية: يجب أن يأتي أولاً، ويجب أن يتطابق Content-Type مع أحد تنسيقات البيانات الوصفية المقبولة.
  2. جزء الوسائط: يجب أن يأتي الثانية، ويجب أن يتطابق Content-Type مع أحد أنواع MIME للوسائط المقبولة.

اطّلِع على مرجع واجهة برمجة التطبيقات للاطّلاع على قائمة بكل طريقة من أنواع MIME المقبولة وحدود الحجم للملفات التي تم تحميلها.

ملاحظة: لإنشاء جزء البيانات الوصفية أو تعديله فقط، وبدون إرسال البيانات المرتبطة، ما عليك سوى إرسال طلب POST أو PUT إلى نقطة نهاية المورد القياسية: https://www.googleapis.com/farm/v1/animals

مثال: تحميل متعدد الأجزاء

يعرض المثال أدناه طلبًا لتحميل عدّة أجزاء لواجهة برمجة تطبيقات المزرعة الخيالية.

POST /upload/farm/v1/animals?uploadType=multipart HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer your_auth_token
Content-Type: multipart/related; boundary=foo_bar_baz
Content-Length: number_of_bytes_in_entire_request_body

--foo_bar_baz
Content-Type: application/json; charset=UTF-8

{
  "name": "Llama"
}

--foo_bar_baz
Content-Type: image/jpeg

JPEG data
--foo_bar_baz--

وفي حال نجاح الطلب، يعرض الخادم رمز حالة HTTP 200 OK مع أي بيانات وصفية:

HTTP/1.1 200
Content-Type: application/json

{
  "name": "Llama"
}

تحميل قابل للاستئناف

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

تتضمّن خطوات استخدام التحميل القابل للاستئناف ما يلي:

  1. بدء جلسة قابلة للاستئناف: يمكنك تقديم طلب أوّلي إلى معرّف الموارد المنتظم (URI) للتحميل الذي يتضمّن البيانات الوصفية، إن توفّر.
  2. احفظ معرّف الموارد المنتظم (URI) للجلسة القابلة للاستئناف. احفظ معرّف الموارد المنتظم (URI) للجلسة الذي تم عرضه استجابةً للطلب الأولي، ستستخدمه للطلبات المتبقية في هذه الجلسة.
  3. حمِّل الملف. أرسِل ملف الوسائط إلى معرّف الموارد المنتظم (URI) للجلسة القابلة للاستئناف.

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

ملاحظة: تنتهي صلاحية معرّف الموارد المنتظم (URI) للتحميل بعد أسبوع واحد.

الخطوة 1: بدء جلسة قابلة للاستئناف

لبدء عملية تحميل قابلة للاستئناف، أرسِل طلب POST أو PUT إلى معرّف الموارد المنتظم (URI) للطريقة /upload وأضِف معلّمة طلب البحث uploadType=resumable، على سبيل المثال:

POST https://www.googleapis.com/upload/farm/v1/animals?uploadType=resumable

بالنسبة إلى طلب البدء هذا، يعني ذلك أنّ النص فارغ أو يحتوي على البيانات الوصفية فقط، وعليك نقل المحتوى الفعلي للملف الذي تريد تحميله في الطلبات اللاحقة.

استخدام عناوين HTTP التالية مع الطلب الأولي:

  • X-Upload-Content-Type. اضبط نوع MIME للوسائط التي سيتم نقلها في الطلبات اللاحقة.
  • X-Upload-Content-Length. اضبط على عدد وحدات البايت الخاصة ببيانات التحميل التي سيتم نقلها في الطلبات اللاحقة. إذا كان الطول غير معروف في وقت هذا الطلب، يمكنك حذف هذا العنوان.
  • في حال توفير البيانات الوصفية: Content-Type. اضبط هذه البيانات وفقًا لنوع البيانات الوصفية.
  • Content-Length. اضبط عدد وحدات البايت المقدمة في نص هذا الطلب المبدئي. هذه السمة غير مطلوبة إذا كنت تستخدم ترميز نقل الأجزاء.

اطّلِع على مرجع واجهة برمجة التطبيقات للاطّلاع على قائمة بكل طريقة من أنواع MIME المقبولة وحدود الحجم للملفات التي تم تحميلها.

مثال: طلب بدء الجلسة القابلة للاستئناف

يوضح المثال التالي كيفية بدء جلسة قابلة للاستئناف في واجهة برمجة تطبيقات المزرعة الخيالية.

POST /upload/farm/v1/animals?uploadType=resumable HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer your_auth_token
Content-Length: 38
Content-Type: application/json; charset=UTF-8
X-Upload-Content-Type: image/jpeg
X-Upload-Content-Length: 2000000

{
  "name": "Llama"
}

ملاحظة: في طلب التعديل الأولي القابل للاستئناف بدون بيانات وصفية، اترك نص الطلب فارغًا واضبط عنوان Content-Length على 0.

ويوضّح القسم التالي كيفية التعامل مع الرد.

الخطوة 2: حفظ معرّف الموارد المنتظم (URI) للجلسة القابلة للاستئناف

في حال نجاح طلب بدء الجلسة، يستجيب خادم واجهة برمجة التطبيقات برمز حالة HTTP 200 OK. بالإضافة إلى ذلك، يقدم العنوان Location الذي يحدد معرّف الموارد المنتظم (URI) للجلسة القابل للاستئناف. يتضمّن عنوان Location، كما هو موضّح في المثال أدناه، جزءًا من معلّمة طلب البحث upload_id يقدّم معرّف التحميل الفريد المطلوب استخدامه لهذه الجلسة.

مثال: استجابة لبدء الجلسة القابلة للاستئناف

في ما يلي الرد على الطلب في الخطوة 1:

HTTP/1.1 200 OK
Location: https://www.googleapis.com/upload/farm/v1/animals?uploadType=resumable&upload_id=xa298sd_sdlkj2
Content-Length: 0

قيمة عنوان Location، كما هو موضّح في المثال أعلاه، هي معرّف الموارد المنتظم (URI) للجلسة الذي ستستخدمه كنقطة نهاية HTTP لإجراء عملية تحميل الملف أو طلب البحث عن حالة التحميل.

انسخ معرِّف الموارد المنتظم (URI) للجلسة واحفظه حتى تتمكّن من استخدامه في الطلبات اللاحقة.

الخطوة 3: تحميل الملف

لتحميل الملف، أرسِل طلب PUT إلى معرّف الموارد المنتظم (URI) للتحميل الذي حصلت عليه في الخطوة السابقة. يكون تنسيق طلب التحميل كما يلي:

PUT session_uri

إنّ عناوين HTTP التي يتم استخدامها عند تقديم طلبات تحميل الملفات القابلة للاستئناف تتضمّن Content-Length. اضبط هذه القيمة على عدد وحدات البايت التي تحمِّلها في هذا الطلب، وهو عادةً حجم تحميل الملف.

مثال: طلب تحميل ملف قابل للاستئناف

إليك طلب قابل للاستئناف لتحميل ملف JPEG بالكامل بحجم 2,000,000 بايت للمثال الحالي.

PUT https://www.googleapis.com/upload/farm/v1/animals?uploadType=resumable&upload_id=xa298sd_sdlkj2 HTTP/1.1
Content-Length: 2000000
Content-Type: image/jpeg

bytes 0-1999999

وفي حال نجاح الطلب، سيستجيب الخادم باستخدام HTTP 201 Created مع أي بيانات وصفية مرتبطة بهذا المورد. إذا كان الطلب الأولي للجلسة القابلة للاستئناف هو PUT، لتحديث المصدر الحالي، سيكون الرد الناجح 200 OK، إلى جانب أي بيانات وصفية مرتبطة بهذا المورد.

في حال مقاطعة طلب التحميل أو تلقّي ردّ HTTP 503 Service Unavailable أو أي استجابة أخرى من 5xx من الخادم، يُرجى اتّباع الإجراء الموضّح في استئناف عملية تحميل متوقفة.  


تحميل الملف في أجزاء

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


استئناف عملية تحميل تمت مقاطعتها

في حال إنهاء طلب تحميل قبل تلقّي ردّ أو إذا تلقّيت استجابة HTTP 503 Service Unavailable من الخادم، يجب استئناف عملية التحميل التي تم قطعها. لإجراء ذلك، يُرجى اتّباع الخطوات التالية:

  1. حالة الطلب: يمكنك الاستعلام عن حالة التحميل الحالية عن طريق إصدار طلب PUT فارغ إلى معرّف الموارد المنتظم (URI) للتحميل. بالنسبة إلى هذا الطلب، يجب أن تتضمن عناوين HTTP عنوان Content-Range يشير إلى أن الموضع الحالي في الملف غير معروف. على سبيل المثال، يمكنك ضبط Content-Range على */2000000 إذا كان إجمالي طول الملف هو 2,000,000. إذا لم تكن تعرف الحجم الكامل للملف، اضبط Content-Range على */*.

    ملاحظة: يمكنك طلب الحالة بين أجزاء معيّنة، وليس فقط في حال توقّف التحميل. وهذا مفيد، على سبيل المثال، إذا كنت تريد عرض مؤشرات تقدُّم التحميل للمتصفحات القديمة.

  2. حمِّل عدد وحدات البايت التي يتم تحميلها. معالجة الردّ من طلب البحث عن الحالة يستخدم الخادم عنوان Range في استجابته لتحديد وحدات البايت التي تلقّاها حتى الآن. على سبيل المثال، يشير العنوان Range الذي يشير إلى 0-299999 إلى تلقّي أول 300,000 بايت من الملف.
  3. حمِّل البيانات المتبقية. وأخيرًا، بعد أن عرفت أين يجب استئناف الطلب، أرسِل البيانات المتبقية أو الشريحة الحالية. يُرجى العِلم أنّه عليك التعامل مع البيانات المتبقية كجزء منفصل في أيٍّ من الحالتَين، لذلك عليك إرسال العنوان Content-Range عند استئناف التحميل.
مثال: استئناف عملية تحميل تمت مقاطعتها

1) اطلب حالة التحميل.

يستخدم الطلب التالي عنوان Content-Range للإشارة إلى أن الموضع الحالي في ملف 2,000,000 بايت غير معروف.

PUT {session_uri} HTTP/1.1
Content-Length: 0
Content-Range: bytes */2000000

2) استخراج عدد وحدات البايت التي تم تحميلها حتى الآن من الاستجابة

تستخدم استجابة الخادم الرأس Range للإشارة إلى أنه تلقى أول 43 بايت من الملف حتى الآن. استخدِم القيمة العليا لرأس Range لتحديد مكان بدء التحميل المحمَّل.

HTTP/1.1 308 Resume Incomplete
Content-Length: 0
Range: 0-42

ملاحظة: من الممكن أن تكون استجابة الحالة 201 Created أو 200 OK في حال اكتمال التحميل. قد يحدث ذلك إذا انقطع الاتصال بعد تحميل جميع وحدات البايت، ولكن قبل أن يتلقّى العميل ردًا من الخادم.

3) استئناف التحميل من النقطة التي توقّف عندها

يستأنف الطلب التالي التحميل عن طريق إرسال وحدات البايت المتبقية من الملف، بدءًا من البايت 43.

PUT {session_uri} HTTP/1.1
Content-Length: 1999957
Content-Range: bytes 43-1999999/2000000

bytes 43-1999999

أفضل الممارسات

عند تحميل الوسائط، من المفيد الانتباه إلى بعض أفضل الممارسات المتعلقة بمعالجة الأخطاء.

  • استئناف عمليات التحميل التي تعذّر إجراؤها بسبب انقطاع الاتصال أو أي من أخطاء 5xx أو إعادة المحاولة، بما في ذلك:
    • 500 Internal Server Error
    • 502 Bad Gateway
    • 503 Service Unavailable
    • 504 Gateway Timeout
  • استخدِم استراتيجية الأس أسي في حال عرض أي خطأ في خادم 5xx عند استئناف طلبات التحميل أو إعادة المحاولة. يمكن أن تحدث هذه الأخطاء إذا كان الخادم يواجه زيادة في التحميل. يمكن أن يساعد التأخير الأسي على الحد من هذه الأنواع من المشاكل خلال الفترات التي يكون فيها عدد الطلبات كبيرًا أو حركة بيانات الشبكة المزدحمة.
  • يجب عدم معالجة أنواع أخرى من الطلبات باستخدام خوارزمية الرقود الأسي، ولكن لا يزال بإمكانك إعادة محاولة استخدام عدد منها. عند إعادة محاولة إجراء هذه الطلبات، ضع حدًا لعدد مرات إعادة محاولة تنفيذها. على سبيل المثال، يمكن أن يقتصر الحد الأقصى المسموح به على الرمز على 10 محاولات أو أقل قبل الإبلاغ عن خطأ.
  • يمكنك معالجة خطأي 404 Not Found و410 Gone عند إجراء عمليات تحميل قابلة للاستئناف من خلال بدء التحميل بالكامل من البداية.

خوارزمية الرقود الأسي

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

يؤدي استخدام خوارزمية الرقود الأسي بشكل صحيح إلى زيادة كفاءة استخدام معدل نقل البيانات، وتقليل عدد الطلبات المطلوبة للحصول على استجابة ناجحة، وزيادة سرعة معالجة الطلبات في البيئات المتزامنة.

في ما يلي خطوات تنفيذ خوارزمية الرقود الأسية البسيطة:

  1. إرسال طلب إلى واجهة برمجة التطبيقات
  2. ستتلقّى ردًا من HTTP 503 يشير إلى أنه عليك إعادة محاولة الطلب.
  3. انتظِر لمدة ثانية واحدة +Random_number_milliseconds ثم أعِد محاولة الطلب.
  4. ستتلقّى ردًا من HTTP 503 يشير إلى أنه عليك إعادة محاولة الطلب.
  5. انتظِر لمدة ثانيتَين +Random_number_milliseconds، وأعِد محاولة الطلب.
  6. ستتلقّى ردًا من HTTP 503 يشير إلى أنه عليك إعادة محاولة الطلب.
  7. انتظِر لمدة 4 ثوانٍ +Random_number_milliseconds، ثم أعِد محاولة الطلب.
  8. ستتلقّى ردًا من HTTP 503 يشير إلى أنه عليك إعادة محاولة الطلب.
  9. انتظِر لمدة 8 ثوانٍ +Random_number_milliseconds، وأعِد محاولة الطلب.
  10. ستتلقّى ردًا من HTTP 503 يشير إلى أنه عليك إعادة محاولة الطلب.
  11. انتظِر لمدة 16 ثانية +Random_number_milliseconds، ثم أعِد محاولة الطلب.
  12. إيقاف. الإبلاغ عن خطأ أو تسجيله

في التدفق أعلاه، يمثّلRandom_number_milliseconds عددًا عشوائيًا بالملي ثانية أقل من 1000 أو يساويه. يُعد هذا الأمر ضروريًا، لأنّ تقديم تأخير عشوائي صغير يساعد على توزيع الحِمل بالتساوي أكثر وتجنُّب احتمالية ختم الخادم. يجب إعادة ضبط قيمة عشوائي_رقم_ميللي ثانية بعد كل انتظار.

ملاحظة: يكون وقت الانتظار دائمًا (2 ^ n) +Random_number_milliseconds، حيث يمثِّل العدد n عددًا صحيحًا أحاديًّا يُعرَّف على أنه 0. تتم زيادة العدد الصحيح n بمقدار 1 لكل تكرار (كل طلب).

يتم ضبط الخوارزمية على الانتهاء عندما يكون n 5. يمنع هذا الحد البرامج من إعادة المحاولة إلى ما لا نهاية، وينتج عن ذلك تأخير إجمالي يبلغ 32 ثانية قبل أن يُعتبر الطلب "خطأً غير قابل للإصلاح". ويُعدّ الحدّ الأقصى لعدد إعادة المحاولة إجراءً جيدًا، خاصةً إذا كان التحميل طويلًا، ما عليك سوى التأكّد من تحديد مدة تأخير إعادة المحاولة على نحو معقول، وأقل من دقيقة واحدة.

أدلة مكتبة برامج واجهة برمجة التطبيقات