إدارة العمليات طويلة المدى

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

تعرض واجهة برمجة التطبيقات Google Drive API عملية طويلة في كل مرة تستدعي فيها طريقة download على files مصدر لتنزيل محتوى ملف إما من خلال Drive API أو مكتبات العميل الخاصة به.

تعرض الطريقة مصدر operations للعميل. يمكنك استخدام مصدر operations لاسترداد حالة طريقة واجهة برمجة التطبيقات بشكل غير متزامن من خلال التحقّق من العملية باستخدام طريقة get. تلتزم العمليات الطويلة في Drive API بـ نمط تصميم العمليات الطويلة في Google Cloud.

لمزيد من المعلومات، يُرجى الاطّلاع على العمليات الطويلة.

نظرة عامة على العملية

يوضّح الرسم البياني التالي الخطوات عالية المستوى لكيفية عمل طريقة file.download.

خطوات عامة لطريقة file.download.
الشكل 1. الخطوات عالية المستوى لطريقة file.download

  1. استدعاء files.download: عندما يستدعي تطبيقك طريقة download، يتم إطلاق طلب تنزيل Drive API للملف. لمزيد من المعلومات، يُرجى الاطّلاع على تنزيل الملفات.

  2. طلب الأذونات: يرسل الطلب بيانات اعتماد المصادقة إلى Drive API. إذا كان تطبيقك يتطلب استدعاء Drive API باستخدام مصادقة مستخدم لم يتم منحها بعد، سيُطلب من المستخدم تسجيل الدخول. يطلب تطبيقك أيضًا الوصول باستخدام النطاقات التي تحدّدها عند إعداد المصادقة.

  3. بدء التنزيل: يتم إرسال طلب بيانات من واجهة برمجة التطبيقات إلى Drive API لبدء تنزيل الملف. يمكن إرسال الطلب إلى Google Vids أو بعض محتوى Google Workspace الآخر.

  4. بدء عملية طويلة: تبدأ عملية طويلة وتدير عملية التنزيل العملية.

  5. عرض العملية المعلّقة: يعرض Drive API عملية معلّقة تحتوي على معلومات عن المستخدم الذي يرسل الطلب وعدة حقول بيانات وصفية للملف.

  6. الحالة المعلّقة الأولية: يتلقّى تطبيقك العملية المعلّقة بالإضافة إلى حالة معلّقة أولية done=null. يشير ذلك إلى أنّ الملف ليس جاهزًا للتنزيل بعد وأنّ حالة العملية معلّقة.

  7. استدعاء operations.get والتحقّق من النتيجة: يستدعي تطبيقك طريقة get على الفترات الزمنية المقترَحة للتحقّق من نتيجة العملية والحصول على أحدث حالة لعملية طويلة. إذا تم عرض الحالة المعلّقة done=false، يجب أن يستمر تطبيقك في التحقّق إلى أن تعرض العملية الحالة المكتملة (done=true). بالنسبة إلى الملفات الكبيرة، من المتوقّع أن يتم التحقّق عدة مرات. لمزيد من المعلومات، يُرجى الاطّلاع على الحصول على تفاصيل حول عملية طويلة.

  8. التحقّق من الحالة المعلّقة: إذا تم عرض الحالة المعلّقة done=true من العملية الطويلة، يشير ذلك إلى أنّ الملف جاهز للتنزيل وأنّ حالة العملية مكتملة.

  9. عرض العملية المكتملة مع عنوان URI للتنزيل: بعد اكتمال العملية الطويلة، يعرض Drive API عنوان URI للتنزيل ويصبح الملف متاحًا للمستخدم الآن.

تنزيل الملفات

لتنزيل المحتوى ضمن عملية طويلة، استخدِم طريقة download على المصدر files. تأخذ الطريقة مَعلمات file_id وmime_type وrevision_id:

  • الحقل مطلوب. مَعلمة المسار file_id هي رقم تعريف الملف الذي سيتم تنزيله.

  • اختياريّ. تشير مَعلمة طلب البحث mime_type إلى نوع MIME الذي يجب أن تستخدمه الطريقة. لا تتوفّر هذه المَعلمة إلا عند تنزيل محتوى وسائط غير ثنائية (مثل مستندات Google Workspace). للاطّلاع على قائمة كاملة بأنواع MIME المتوافقة ، يُرجى الاطّلاع على أنواع MIME للتصدير لمستندات Google Workspace.

    إذا لم يتم ضبط نوع MIME، يتم تنزيل مستند Google Workspace بنوع MIME تلقائي. لمزيد من المعلومات، يُرجى الاطّلاع على أنواع MIME التلقائية.

  • اختياريّ. مَعلمة طلب البحث revision_id هي رقم تعريف مراجعة الملف الذي سيتم تنزيله. لا تتوفّر هذه المَعلمة إلا عند تنزيل ملفات ثنائية ومستندات Google ومستندات جداول بيانات Google. تعرض رمز الخطأ INVALID_ARGUMENT عند تنزيل مراجعة معيّنة على ملفات غير متوافقة.

طريقة download هي الطريقة الوحيدة لتنزيل ملفات Vids بتنسيق MP4، وهي عادةً الأنسب لتنزيل معظم ملفات الفيديو. إذا حاولت تصدير ملفات Google Vids، ستتلقّى الخطأ fileNotExportable.

تعرض روابط التنزيل التي تم إنشاؤها لمستندات Google أو جداول بيانات Google عملية إعادة توجيه في البداية. انقر على الرابط الجديد لتنزيل الملف.

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

يظهر هنا بروتوكول الطلب.

POST https://www.googleapis.com/drive/v3/files/{FILE_ID}/download

استبدِل FILE_ID بـ fileId للملف الذي تريد تنزيله.

أنواع MIME التلقائية

إذا لم يتم ضبط نوع MIME عند تنزيل محتوى غير ثنائي، يتم تعيين أنواع MIME التلقائية التالية:

نوع المستند التنسيق نوع MIME امتداد الملف
لغة برمجة تطبيقات Google JSON application/vnd.google-apps.script+json .json
مستندات Google Microsoft Word application/vnd.openxmlformats-officedocument.wordprocessingml.document ‎.docx
رسومات Google PNG الصورة/png ‎.png
نماذج Google ZIP application/zip ‎.zip
جداول بيانات Google Microsoft Excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ‎.xlsx
مواقع Google نص خام text/raw ‎.txt
العروض التقديمية من Google Microsoft PowerPoint application/vnd.openxmlformats-officedocument.presentationml.presentation ‎.pptx
Google Vids MP4 الفيديو/mp4 ‎.mp4
Jamboard PDF application/pdf ‎.pdf

تنزيل الردّ

عند استدعاء طريقة download، يتكوّن نص الردّ من مصدر يمثّل عملية طويلة. تعرض الطريقة عادةً رابطًا لتنزيل محتويات الملف.

{
  "done": true,
  "metadata": {
    "@type": "type.googleapis.com/google.apps.drive.v3.DownloadFileMetadata",
    "resourceKey": "RESOURCE_KEY"
  },
  "name": "NAME",
  "response": {
    "@type": "type.googleapis.com/google.apps.drive.v3.DownloadFileResponse",
    "downloadUri": "DOWNLOAD_URI",
    "partialDownloadAllowed": false
  }
}

يتضمّن هذا الناتج القيم التالية:

يُرجى العِلم أنّ الحقل partialDownloadAllowed يشير إلى ما إذا كان مسموحًا بـ تنزيل جزئي، وتكون قيمته true عند تنزيل محتوى ملف ثنائي.

الحصول على تفاصيل حول عملية طويلة

العمليات الطويلة هي استدعاءات للطرق قد تستغرق وقتًا طويلاً لإكمالها. عادةً، يتم عرض عمليات التنزيل التي تم إنشاؤها حديثًا في البداية في حالة معلّقة (done=null)، خاصةً بالنسبة إلى ملفات Vids.

يمكنك استخدام مصدر operations الذي يوفّره Drive API للتحقّق من حالة العملية الطويلة التي تتم معالجتها من خلال تضمين الاسم الفريد الذي يحدّده الخادم.

تحصل طريقة get على أحدث حالة لعملية طويلة بشكل غير متزامن. يمكن للعملاء استخدام هذه الطريقة للتحقّق من نتيجة العملية على فترات زمنية منتظمة تنصح بها خدمة واجهة برمجة التطبيقات.

التحقّق من عملية طويلة

للتحقّق من عملية طويلة متاحة، استدعِ طريقة get بشكل متكرر إلى أن تنتهي العملية. استخدِم خوارزمية الرقود الأسي الثنائي بين كل طلب تحقّق، مثل 10 ثوانٍ.

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

يجب أن تستخدم أي طلبات إلى get مفاتيح الموارد. لمزيد من المعلومات، يُرجى الاطّلاع على الوصول إلى ملفات Drive التي تمت مشاركتها باستخدام الروابط باستخدام مفاتيح الموارد.

يظهر هنا بروتوكولا الطلب.

طلب إجراء

operations.get(name='NAME');

استبدِل NAME بالاسم الذي يحدّده الخادم للعملية كما هو موضّح في الردّ على طلب طريقة download.

curl

curl -i -H \
      'Authorization: Bearer $(gcloud auth print-access-token)" \
      'https://googleapis.com/drive/v3/operations/NAME?alt=json'

استبدِل NAME بالاسم الذي يحدّده الخادم للعملية كما هو موضّح في الردّ على طلب طريقة download.

يستخدم الأمر المسار /drive/v3/operations/NAME.

يُرجى العِلم أنّ name لا يتم عرضه إلا في الردّ على طلب download. لا توجد طريقة أخرى لاسترداده لأنّ Drive API لا يتيح طريقة list. إذا فقدت قيمة name، يجب إنشاء ردّ جديد من خلال استدعاء طلب طريقة download مرة أخرى.

يتكوّن الردّ من طلب get من مصدر يمثّل عملية طويلة. لمزيد من المعلومات، يُرجى الاطّلاع على تنزيل الردّ.

عندما يحتوي الردّ على حالة مكتملة (done=true)، تكون العملية الطويلة قد انتهت.

تنزيل مراجعة

يمكنك استخدام قيمة الحقل headRevisionId من مصدر files لتنزيل أحدث مراجعة. يؤدي ذلك إلى جلب المراجعة التي تتطابق مع البيانات الوصفية للملف الذي سبق لك استرداده. لتنزيل بيانات جميع المراجعات السابقة للملف التي لا تزال مخزّنة في السحابة الإلكترونية، يمكنك استدعاء طريقة list على مصدر revisions باستخدام المَعلمة fileId. يعرض ذلك جميع revisionIds في الملف.

لتنزيل محتوى مراجعة الملفات الثنائية، يجب استدعاء طريقة get على المصدر revisions باستخدام رقم تعريف الملف الذي سيتم تنزيله ورقم تعريف المراجعة وalt مَعلمة النظام. تخبر المَعلمة alt=media الخادم بأنّه يتم طلب تنزيل المحتوى كشكل ردّ بديل.

تتوفّر مَعلمة النظام alt في جميع واجهات برمجة تطبيقات Google REST. إذا كنت تستخدم مكتبة عميل لـ Drive API، لن تحتاج إلى ضبط هذه المَعلمة بشكل صريح.

لا يمكن تنزيل مراجعات مستندات Google وجداول بيانات Google والعروض التقديمية من Google وVids باستخدام طريقة get مع المَعلمة alt=media. بخلاف ذلك، يتم إنشاء الخطأ fileNotDownloadable.

يظهر هنا بروتوكول الطلب.

GET https://www.googleapis.com/drive/v3/files/{FILE_ID}/revisions/{REVISION_ID}?alt=media

غيِّر القيم في السلسلة على الشكل التالي:

  • FILE_ID: fileId للملف الذي تريد تنزيله
  • REVISION_ID: revisionId للمراجعة التي تريد تنزيلها

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

تحديد المشاكل في العمليات الطويلة وحلّها

عندما تفشل عملية طويلة، يتضمّن ردّها رمز خطأ أساسيًا في Google Cloud.

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

يمكنك قراءة المزيد حول نموذج الخطأ هذا وكيفية التعامل معه في دليل تصميم واجهة برمجة التطبيقات.

الرمز تعداد رمز حالة HTTP‬ الوصف الإجراء المقترَح
1 CANCELLED 499 Client Closed Request تم إلغاء العملية، عادةً من قِبل المتصل. أعِد تشغيل العملية.
2 UNKNOWN 500 Internal Server Error قد يتم عرض هذا الخطأ عندما تنتمي قيمة Status التي تم تلقّيها من مساحة عنوان أخرى إلى مساحة خطأ غير معروفة في مساحة العنوان هذه. إذا لم يعرض خطأ واجهة برمجة التطبيقات معلومات كافية، قد يتم تحويل الخطأ إلى هذا الخطأ. أعِد المحاولة باستخدام خوارزمية الرقود الأسي الثنائي.
3 INVALID_ARGUMENT 400 Bad Request حدّد العميل وسيطة غير صالحة. يختلف هذا الخطأ عن FAILED_PRECONDITION. يشير INVALID_ARGUMENT إلى الوسيطات التي تسبّب مشاكل بغض النظر عن حالة النظام، مثل اسم ملف غير صالح. لا تعِد المحاولة بدون حلّ المشكلة.
4 DEADLINE_EXCEEDED 504 Gateway Timeout انتهت المهلة قبل أن تكتمل العملية. بالنسبة إلى العمليات التي تغيّر حالة النظام، قد يتم عرض هذا الخطأ حتى إذا اكتملت العملية بنجاح. على سبيل المثال، قد يكون الردّ الناجح من أحد الخوادم قد تأخّر لفترة طويلة بما يكفي لانتهاء المهلة. أعِد المحاولة باستخدام خوارزمية الرقود الأسي الثنائي.
5 NOT_FOUND 404 Not Found لم يتم العثور على بعض الكيانات المطلوبة، مثل مصدر FHIR. لا تعِد المحاولة بدون حلّ المشكلة.
6 ALREADY_EXISTS 409 Conflict الكيان الذي حاول العميل إنشاءه، مثل مثيل DICOM، متوفّر مسبقًا. لا تعِد المحاولة بدون حلّ المشكلة.
7 PERMISSION_DENIED 403 Forbidden المتصل ليس لديه إذن لتنفيذ العملية المحدّدة. لا يعني رمز الخطأ هذا أنّ الطلب صالح أو أنّ الكيان المطلوب متوفّر أو أنّه يستوفي الشروط المسبقة الأخرى. لا تعِد المحاولة بدون حلّ المشكلة.
8 RESOURCE_EXHAUSTED 429 Too Many Requests تم استنفاد بعض الموارد، مثل الحصة المخصّصة لكل مشروع. أعِد المحاولة باستخدام خوارزمية الرقود الأسي الثنائي. قد تصبح الحصة متاحة بمرور الوقت.
9 FAILED_PRECONDITION 400 Bad Request تم رفض العملية لأنّ النظام ليس في حالة مطلوبة لتنفيذ العملية. على سبيل المثال، الدليل الذي سيتم حذفه غير فارغ، أو يتم تطبيق عملية rmdir على عنصر غير دليل. لا تعِد المحاولة بدون حلّ المشكلة.
10 ABORTED 409 Conflict تم إلغاء العملية، عادةً بسبب مشكلة في التزامن، مثل فشل التحقّق من أداة التسلسل أو إلغاء المعاملة. أعِد المحاولة باستخدام خوارزمية الرقود الأسي الثنائي.
11 OUT_OF_RANGE 400 Bad Request تمت محاولة تنفيذ العملية خارج النطاق الصالح، مثل البحث أو القراءة بعد نهاية الملف. على عكس INVALID_ARGUMENT، يشير هذا الخطأ إلى مشكلة يمكن حلّها إذا تغيّرت حالة النظام. لا تعِد المحاولة بدون حلّ المشكلة.
12 UNIMPLEMENTED 501 Not Implemented لم يتم تنفيذ العملية أو أنّها غير متاحة أو غير مفعّلة في Drive API. لا تعِد المحاولة.
13 INTERNAL 500 Internal Server Error أخطاء داخلية يشير ذلك إلى حدوث خطأ غير متوقّع أثناء المعالجة على النظام الأساسي. أعِد المحاولة باستخدام خوارزمية الرقود الأسي الثنائي.
14 UNAVAILABLE 503 Service Unavailable واجهة برمجة التطبيقات Google Drive API غير متاحة. من المرجّح أنّ هذه الحالة مؤقتة ويمكن تصحيحها من خلال إعادة المحاولة باستخدام خوارزمية الرقود الأسي الثنائي. يُرجى العِلم أنّه ليس من الآمن دائمًا إعادة محاولة العمليات غير المتكررة. أعِد المحاولة باستخدام خوارزمية الرقود الأسي الثنائي.
15 DATA_LOSS 500 Internal Server Error فقدان البيانات أو تلفها بشكل لا يمكن استرجاعه يُرجى التواصل مع مشرف النظام. قد يرغب مشرف النظام في التواصل مع أحد ممثلي الدعم إذا حدث فقدان للبيانات أو تلفها.
16 UNAUTHENTICATED 401 Unauthorized لا يتضمّن الطلب بيانات اعتماد مصادقة صالحة للعملية. لا تعِد المحاولة بدون حلّ المشكلة.