نظرًا لأنّ مشاريع "برمجة التطبيقات" تتوفّر على Google Drive، يمكن للمطوِّرين استيراد رمز مصدر "برمجة تطبيقات Google" وتصديره باستخدام واجهة برمجة تطبيقات Google Drive (يجب عدم الخلط بينه وبين خدمة Drive في لغة "برمجة تطبيقات Google").
على سبيل المثال، يمكن لمطوّر برامج تأليف رمز جديد لبرمجة التطبيقات على جهازه المحلي باستخدام أداة تعديل الرموز المفضلة لديها واستخدام نظام للتحكم في الإصدار مثل Git للتعاون مع مطوّرين آخرين. عند اكتمال إصدار ما، يمكنها تحميل (استيراد) الملفات إلى Google Drive باستخدام واجهة برمجة تطبيقات REST، حيث يمكن استخدامها مثل أي مشروع آخر لبرمجة التطبيقات.
يمكن إجراء تغييرات على الرمز في الإصدارات المحلية ومزامنته مع مشروع "برمجة تطبيقات Google" باستخدام Google Drive API. يمكن تنزيل (تصدير) المشاريع الحالية من Google Drive إلى جهاز محلي.
الميزات والقيود
إذا أردت استخدام Google Drive API لاستيراد المشاريع أو تصديرها، يجب الانتباه إلى ما يلي:
- من المتوقّع أن تنتهي ملفات النصوص البرمجية من جهة الخادم بالنطاق ".gs". قد ترغب في التطوير محليًا باستخدام ملفات .js، ولكن تأكد من إعادة التسمية لتضمين امتداد gs. قبل استيرادها إلى Google Drive.
- يجب أن تنتهي ملفات النصوص البرمجية من جهة العميل بـ ".html". ويشمل هذا ملفات html .أو js. أو css .من جهة العميل. ومرة أخرى، يمكنك التطوير محليًا باستخدام إضافات أخرى، ولكن من المهم الحصول على الإضافة .html قبل الاستيراد إلى Google Drive.
- عند استيراد ملفات المشاريع إلى Google Drive، سيتم استبدال جميع البيانات الحالية في هذه الملفات. لا يمكنك إلحاق نص جزئي أو إدراجه، إذ يجب تحديث الملف بأكمله.
- يجب أن تحتوي ملفات النصوص البرمجية من جهة الخادم على رمز JavaScript صالح. إذا كانت هناك أخطاء في ملفات .js للخادم، فسيفشل طلب تحديث واجهة برمجة تطبيقات Google Drive مع ظهور خطأ 5xx. ويمكنك منع ذلك عن طريق تصحيح التعليمات البرمجية قبل الاستيراد.
- لا يمكن استيراد الملفات الفارغة. سيفشل طلب تحديث واجهة برمجة تطبيقات Google Drive مع ظهور خطأ 5xx إذا حاولت تحميل ملف فارغ.
- يمكن استيراد أو تصدير النصوص البرمجية المستقلة فقط. لا يمكن الوصول إلى النصوص البرمجية المرتبطة بالحاوية من خلال Google Drive API.
- يمكن استيراد رمز المصدر أو تصديره فقط. لا يتم أيضًا عرض الموارد مثل خصائص المشروع أو السجلات عبر Google Drive API. لا يمكن تنفيذ إجراءات مثل تحديد نُسخ النص البرمجي أو نشره أو تنفيذه عبر Google Drive API.
- لست مقيدًا بملف
Code.gs
لخادم واحد. ويمكنك نشر رمز الخادم عبر ملفات متعددة لتسهيل عملية التطوير. يتم تحميل كل ملفات الخادم في مساحة الاسم العامة نفسها، لذلك يمكنك استخدام فئات JavaScript عندما تريد توفير تغليف آمن.
Drive API
تسمح Google Drive API للمطوّرين بالوصول إلى الملفات في Google Drive آليًا. تستخدم واجهة برمجة التطبيقات هذه GET
لتنزيل الملفات وPUT/POST
لتحميل الملفات. يُرجى الرجوع إلى صفحة نظرة عامة على Google Drive API
للحصول على المستندات التفصيلية والتشغيل السريع.
سيركز هذا الدليل على إدراج الملفات ونقلها باستخدام مورد الملفات باستخدام عمليات الاستدعاء التالية:
التفويض
يجب أن يصادق مستخدم تمت مصادقته على جميع الطلبات إلى Google Drive API من خلال بروتوكول OAuth 2.0. للتعرُّف على المزيد من التفاصيل، يُرجى الرجوع إلى مستندات تفويض Google Drive API.
بالإضافة إلى النطاقات الأخرى التي قد يحتاجها التطبيق
(مثل https://www.googleapis.com/auth/drive
)، على جميع التطبيقات التي تحاول
استيراد مشاريع برمجة Google Apps أو تصديرها طلب النطاق الخاص:
https://www.googleapis.com/auth/drive.scripts
سرد المشاريع الحالية
لإدراج جميع مشاريع "برمجة تطبيقات Google" في Drive، يمكنك استخدام مورد الملفات
للبحث عن الملفات التي تتضمن نوع MIME وهو application/vnd.google-apps.script
.
لفلترة الردّ لتضمين الملفات التي تملكها فقط، عليك تضمين معلَمة
البحث 'me' in owners
.
إليك نموذج طلب وردّ يعرضان مجموعة من مشاريع "برمجة التطبيقات" التي يتم عرضها من خلال استجابة JSON.
GET https://www.googleapis.com/drive/v2/files?q=mimeType%3D'application%2Fvnd.google-apps.script'+and+'me'+in+owners Authorization: Bearer ya29.fakebearerstring
{ "kind": "drive#fileList", "etag": "\"kjsas92/f3zGUXczKMxEB_9ZTMRFOF3d1ZU\"", "selfLink": "https://www.googleapis.com/drive/v2/files?q=mimeType%3D'application/vnd.google-apps.script'+and+'me'+in+owners", "items": [ { "kind": "drive#file", "id": "1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D", "etag": "\"kjsas92/MTM3MDk3ODY5ODQyNg\"", "selfLink": "https://www.googleapis.com/drive/v2/files/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D", "alternateLink": "https://script.google.com/a/google.com/d/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D/edit?usp=drivesdk", "iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_11_script_list.png", "title": "Mail merge", "mimeType": "application/vnd.google-apps.script", "description": "", "labels": { "starred": false, "hidden": false, "trashed": true, "restricted": false, "viewed": true }, "createdDate": "2013-06-11T19:24:45.188Z", "modifiedDate": "2013-06-11T19:24:58.426Z", "modifiedByMeDate": "2013-06-11T19:24:58.426Z", "lastViewedByMeDate": "2013-06-11T19:24:58.426Z", "parents": [ { "kind": "drive#parentReference", "id": "0APdyIOzo7bWDUk9PVA", "selfLink": "https://www.googleapis.com/drive/v2/files/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D/parents/0APdyIOzo7bWDUk9PVA", "parentLink": "https://www.googleapis.com/drive/v2/files/0APdyIOzo7bWDUk9PVA", "isRoot": true } ], "exportLinks": { "application/json": "https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json" }, "userPermission": { "kind": "drive#permission", "etag": "\"kjsas92/259X2r5DVstv1CcIQTjt_RQPSW8\"", "id": "me", "selfLink": "https://www.googleapis.com/drive/v2/files/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D/permissions/me", "role": "owner", "type": "user" }, "quotaBytesUsed": "0", "ownerNames": [ "John Doe" ], "owners": [ { "kind": "drive#user", "displayName": "John Doe", "picture": { "url": "https://lh4.googleusercontent.com/-yd1rIb6Pe2Y/AAAAAAAAAAI/AAAAAAAAAGs/PP5vTuZonik/s64/photo.jpg" }, "isAuthenticatedUser": true, "permissionId": "1234566789" } ], "lastModifyingUserName": "John Doe", "lastModifyingUser": { "kind": "drive#user", "displayName": "John Doe", "picture": { "url": "https://lh4.googleusercontent.com/-yd1rIb6Pe2Y/AAAAAAAAAAI/AAAAAAAAAGs/PP5vTuZonik/s64/photo.jpg" }, "isAuthenticatedUser": true, "permissionId": "1234566789" }, "editable": true, "writersCanShare": true, "shared": false, "explicitlyTrashed": true, "appDataContents": false } ] }
إذا كنت تعرف معرّف الملف لمشروع برمجة التطبيقات، يمكنك جلبه مباشرةً باستخدام طلب واجهة برمجة التطبيقات التالي:
GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization: Bearer ya29.fakebearerstring
تصدير المشاريع من Drive
بعد استرداد مورد File
من واجهة برمجة التطبيقات،
ستحتوي السمة exportLinks
على عنوان URL لجلب محتوى المشروع
كبيانات JSON. في ما يلي نموذج لما قد يبدو عليه عنوان URL هذا:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
يمكنك تقديم طلب إلى عنوان URL هذا لاسترداد محتوى المشروع نفسه.
يُرجى التأكّد من تضمين عنوان Authorization
باستخدام الرمز المميّز نفسه لبروتوكول OAuth Bearer
.
إليك نموذج طلب وردّ:
GET https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json Authorization: Bearer ya29.fakebearerstring
{ "files": [ { "id":"9basdfbd-749a-4as9b-b9d1-d64basdf803", "name":"Code", "type":"server_js", "source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n" }, { "id":"3asf7c0d-1afb-4a9-8431-5asdfc79e7ae", "name":"index", "type":"html", "source":"\u003chtml\u003e\n \u003cbody\u003e\n Hello, world!\n \u003c/body\u003e\n\u003c/html\u003e" } ] }
يتضمّن المثال أعلاه رمزًا لتطبيق ويب بسيط من دليل خدمة
HTML. تجدر الإشارة
إلى الحصول على مصفوفة من Files
، يتضمّن كل منها السمات الأربع التالية:
id |
معرّف داخلي لملف ضمن مشروع، مطلوب للإشارة إلى هذا الملف أثناء التعديلات. |
name |
اسم الملف بدون امتدادات، كما يظهر في "مُحرِّر النصوص البرمجية". |
type |
نوعا الملفات هما server_js وhtml. |
source |
رمز المصدر المشفّر المتضمّن في الملف |
استيراد المشاريع إلى Drive
لتعديل مشروع حالي، يمكنك إجراء استدعاء HTTP PUT
لواجهة برمجة تطبيقات الملف
update
باستخدام واجهة برمجة التطبيقات fileId
المناسبة.
يوضح المثال أدناه نموذج معاملة للجزء الذي تم فيه تحميل الوسائط. وباستخدام إحدى مكتبات العملاء، يمكن لتطبيقك تضمين البيانات الوصفية والوسائط في طلب التحميل نفسه بسهولة. يُرجى العِلم أنّ العنوان
Content-Type
يحدّد نوع المحتوى الذي تم تحميله في هذه الحالة.
PUT https://www.googleapis.com/upload/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz Authorization: Bearer ya29.fakebearerestring Content-Type: application/vnd.google-apps.script+json
{ "files": [ { "id":"9basdfbd-749a-4as9b-b9d1-d64basdf803", "name":"Code", "type":"server_js", "source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n" }, { "id":"3asf7c0d-1afb-4a9-8431-5asdfc79e7ae", "name":"index", "type":"html", "source":"\u003chtml\u003e\n \u003cbody\u003e\n New message!!\n \u003c/body\u003e\n\u003c/html\u003e" } ] }
إنشاء ملفات جديدة ضمن مشروع
ولإنشاء ملف جديد ضمن مشروع، أرسِل طلب PUT
لملف بدون السمة id
. إذا ضمّنت ملفًا بمعرّف غير معروف،
سيعرض النظام رسالة خطأ.
حذف ملفات ضمن مشروع
لحذف ملف من مشروع، أرسِل طلب PUT
لا يتضمّن هذا الملف (ولكنه يتضمّن جميع الملفات الأخرى في المشروع). وسيتم حذف أي ملف لم يتم
إعادة إرساله أثناء عملية الاستيراد من الخادم.
إعادة تسمية الملفات ضمن مشروع
لإعادة تسمية ملف داخل مشروع، أرسِل طلب PUT
مع id
الحالي
ولكن name
جديد. لاحظ أن الخادم يتجاهل أي محاولات للتغيير إلى type
.
إنشاء مشروع جديد
لإنشاء مشروع جديد، أرسِل طلب POST
إلى file
insert
API. يمكنك استخدام مكتبة العميل لتضمين بيانات وصفية مثل اسم المشروع ووصفه، تمامًا مثل طلب update
.
إليك نموذج عن عملية تحميل الوسائط. سيؤدي ذلك إلى إنشاء مشروع
يسمى "بلا عنوان" في Drive. يجب إدخال المَعلمة convert
في عنوان URL.
كما هو الحال مع طلب update
، يجب تقديم عنوان Content-Type
.
POST https://www.googleapis.com/upload/drive/v2/files?convert=true Authorization: Bearer ya29.fakebearerestring Content-Type: application/vnd.google-apps.script+json
{ "files": [ { "name":"Code", "type":"server_js", "source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n" }, { "name":"index", "type":"html", "source":"\u003chtml\u003e\n \u003cbody\u003e\n Hello, world!!\n \u003c/body\u003e\n\u003c/html\u003e" } ] }