مشروع Firebase هو في الواقع مجرد مشروع Google Cloud تم تفعيل إعدادات وخدمات إضافية خاصة بـ Firebase فيه. وهذا يعني أنّه يمكن الوصول إلى كل حزمة Cloud Storage تستخدمها مع Cloud Storage for Firebase في Google Cloud (بما في ذلك وحدة التحكّم وواجهات برمجة التطبيقات).
اعتبارات بشأن حسابات الخدمة
تستخدم Firebase Google Cloud حسابات الخدمة لتشغيل الخدمات وإدارتها
بدون مشاركة بيانات اعتماد المستخدم. عند إنشاء مشروع Firebase يستخدم
Cloud Storage، قد تلاحظ أنّ حساب خدمة مطابقًا متاح
بالفعل في مشروعك:
.
لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة على حسابات خدمة Firebase.
Google Cloud Storage
يمكنك استخدام واجهات برمجة التطبيقات Google Cloud Storage للوصول إلى الملفات التي تم تحميلها من خلال حِزم SDK الخاصة بـ Firebase في Cloud Storage، خاصةً لتنفيذ عمليات أكثر تعقيدًا، مثل نسخ ملف أو نقله أو إدراج جميع الملفات المتاحة في مرجع.
يُرجى العِلم أنّ هذه الطلبات تستخدم Google Cloud Storage خيارات التحكّم في الوصول، بدلاً من Firebase Authentication وCloud Storage Security Rules.
واجهات برمجة التطبيقات
بالإضافة إلى حِزم تطوير البرامج (SDK) الخاصة بـ Firebase في Cloud Storage، هناك عدد من الطرق الأخرى للوصول إلى البيانات المخزَّنة في حزمة Cloud Storage، وذلك حسب ما تريد تنفيذه. إذا كنت تريد الوصول إلى البيانات على خادم، نوفّر لك مكتبات من جهة الخادم، بالإضافة إلى واجهة برمجة تطبيقات RESTful متوافقة مع JSON وS3، أو إذا كنت بحاجة إلى كتابة نصوص برمجية لإجراء تغييرات أو تنفيذ مهام إدارية أخرى، نوفّر لك أداة سطر أوامر ستكون مفيدة.XML
Google Cloud حِزم SDK للخادم
تقدّم Google Cloud حِزم SDK عالية الجودة للخوادم لعدد من منتجات السحابة الإلكترونية، بما في ذلك Cloud Storage. تتوفّر هذه المكتبات في Node.js وJava وgo وPython وPHP وRuby.
لمزيد من المعلومات، بما في ذلك تعليمات التثبيت والمصادقة وتحديد المشاكل وحلّها، يُرجى الرجوع إلى المستندات الخاصة بالنظام الأساسي والمرتبطة أعلاه.
في ما يلي مثال على استخدام حزمة تطوير البرامج (SDK) Google Cloud Storage:
Node.js
// Require gcloud var gcloud = require('google-cloud'); // Enable Cloud Storage var gcs = gcloud.storage({ projectId: 'grape-spaceship-123', keyFilename: '/path/to/keyfile.json' }); // Reference an existing bucket. var bucket = gcs.bucket('my-existing-bucket'); // Upload a local file to a new file to be created in your bucket. bucket.upload('/photos/zoo/zebra.jpg', function(err, file) { if (!err) { // "zebra.jpg" is now in your bucket. } }); // Download a file from your bucket. bucket.file('giraffe.jpg').download({ destination: '/photos/zoo/giraffe.jpg' }, function(err) {});
Java
// Enable Cloud Storage Storage storage = StorageOptions.builder() .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json")) .build() .service(); // Upload a local file to a new file to be created in your bucket. InputStream uploadContent = ... BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg"); BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build(); Blob zebraBlob = storage.create(blobInfo, content); // Download a file from your bucket. Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null); InputStream downloadContent = giraffeBlob.getInputStream();
متابعة
// Enable Cloud Storage client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json")) if err != nil { log.Fatal(err) } // Download a file from your bucket. rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx) if err != nil { log.Fatal(err) } defer rc.Close() body, err := ioutil.ReadAll(rc) if err != nil { log.Fatal(err) }
Python
# Import gcloud from google.cloud import storage # Enable Cloud Storage client = storage.Client() # Reference an existing bucket. bucket = client.get_bucket('my-existing-bucket') # Upload a local file to a new file to be created in your bucket. zebraBlob = bucket.get_blob('zebra.jpg') zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg') # Download a file from your bucket. giraffeBlob = bucket.get_blob('giraffe.jpg') giraffeBlob.download_as_string()
PHP
// Require gcloud require 'vendor/autoload.php'; use Google\Cloud\Storage\StorageClient; // Enable Cloud Storage $storage = new StorageClient([ 'projectId' => 'grape-spaceship-123' ]); // Reference an existing bucket. $bucket = $storage->bucket('my-existing-bucket'); // Upload a file to the bucket. $bucket->upload( fopen('/photos/zoo/zebra.jpg', 'r') ); // Download a file from your bucket. $object = $bucket->object('giraffe.jpg'); $object->downloadToFile('/photos/zoo/giraffe.jpg');
لغة Ruby
# Require gcloud require "google/cloud" # Enable Cloud Storage gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json" storage = gcloud.storage # Reference an existing bucket. bucket = storage.bucket "my-existing-bucket" # Upload a file to the bucket. bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg" # Download a file from your bucket. file = bucket.file "giraffe.jpg" file.download "/photos/zoo/#{file.name}"
REST API
إذا كنت تستخدم لغة لا تتضمّن مكتبة برامج، أو أردت تنفيذ إجراء لا يمكن تنفيذه باستخدام مكتبات البرامج، أو كان لديك برنامج HTTP مفضّل تريد استخدامه، يمكنك الاستفادة من واجهات برمجة التطبيقات التي توفّرها Google Cloud Storage لكل من تنسيقَي JSON و XML.
بالإضافة إلى واجهات برمجة التطبيقات هذه التي تتيح الوصول إلى بيانات التخزين، يمكنك استخدام مساحة تخزين سحابية لـ Firebase API لإدارة حِزم Cloud Storage لاستخدامها في مشاريع Firebase.
gsutil
gsutil هي أداة سطر أوامر تتيح لك الوصول مباشرةً إلى Cloud Storage. يمكنك استخدام gsutil
لتنفيذ مجموعة كبيرة من مهام إدارة الحِزم والعناصر، بما في ذلك:
- تحميل العناصر وتنزيلها وحذفها
- إدراج الحِزم والكائنات
- نقل العناصر ونسخها وإعادة تسميتها
- تعديل قوائم التحكّم بالوصول إلى العناصر والحِزم
gsutil السماح بإجراء عمليات متقدّمة أخرى، مثل نقل الملفات من دليل إلى آخر أو حذف جميع الملفات الموجودة ضمن موقع معيّن
يمكنك نقل جميع الملفات من مرجع إلى آخر بسهولة باتّباع الخطوات التالية:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
إنّ الحذف المجمّع لجميع الملفات أدناه هو أمر سهل الاستخدام أيضًا:
# Delete all files under a path gsutil rm -r gs://bucket/reference/to/delete# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**
# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket
معدّلات الطلب
Google Cloud Storage هي خدمة قابلة للتوسّع بشكل كبير تستخدم تكنولوجيا التوسّع التلقائي لتحقيق معدّلات طلبات عالية جدًا.
Google Cloud Storage هي خدمة متعددة المستأجرين، ما يعني أنّ المستخدمين يتشاركون مجموعة الموارد الأساسية نفسها. للاستفادة إلى أقصى حد من هذه الموارد المشترَكة، تتضمّن الحِزم سعة إدخال/إخراج أولية.
أثناء التخطيط لدمج Cloud Storage for Firebase في تطبيقك، فكِّر في الحد الأدنى لمعدّل الطلبات الذي يحتاج إليه تطبيقك لتحقيق أداء جيد، وفي تقديم الطلبات بكفاءة. راجِع الإرشادات حول معدّلات الطلبات، وخاصةً زيادة معدّلات الطلبات تدريجيًا.
تحديد إصدارات العناصر
هل سبق أن حذفت شيئًا عن طريق الخطأ ولم يكن لديك نسخة احتياطية؟
تتيح خدمة Google Cloud Storage ميزة
إصدارات العناصر،
التي توفّر طريقة تلقائية للاحتفاظ بنسخة احتياطية من بياناتك واستعادتها. يمكنك تفعيل ميزة "التحكّم في إصدارات العناصر" باستخدام الأمر gsutil versioning set:
gsutil versioning set on gs://<your-cloud-storage-bucket>
يختار Cloud Storage دائمًا أحدث إصدار، لذا إذا أردت استعادة عنصر، عليك استخدام إحدى واجهات برمجة التطبيقات أو الأدوات الأخرى المذكورة أعلاه لضبط العنصر المطلوب كأحدث عنصر.
إدارة دورة حياة الكائن
تُعدّ إمكانية أرشفة الملفات القديمة أو حذفها تلقائيًا ميزة مفيدة للعديد من التطبيقات. لحسن الحظ، يوفّر Google Cloud Storage إدارة مراحل نشاط العنصر، ما يتيح لك حذف العناصر أو أرشفتها بعد فترة زمنية معيّنة.
لنفترض أنّك تستخدم تطبيقًا لمشاركة الصور وتريد حذف جميع الصور خلال يوم واحد. يمكنك إعداد سياسة مراحل نشاط العناصر على النحو التالي:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
ونشره باستخدام الأمر gsutil lifecycle set:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
يُرجى العِلم أنّ هذا الإعداد ينطبق على جميع الملفات في الحزمة، لذا إذا كنت تخزّن نُسخًا احتياطية مهمة من بيانات المستخدمين تريد الاحتفاظ بها لفترة طويلة إلى جانب الصور التي تريد حذفها يوميًا، ننصحك باستخدام حزمتَين منفصلتَين أو إجراء عمليات الحذف يدويًا باستخدام gsutil أو الخادم الخاص بك.
Google Cloud Functions (إصدار تجريبي)
Google Cloud Functions هي حل حوسبة خفيف الوزن ومستند إلى الأحداث وغير متزامن يتيح لك إنشاء وظائف صغيرة ذات غرض واحد تستجيب للأحداث بدون الحاجة إلى إدارة خادم أو بيئة وقت تشغيل. ويمكن استخدام هذه الدوال في تحويل ترميز الفيديو أو تصنيف الصور باستخدام تعلُّم الآلة أو مزامنة البيانات الوصفية مع Firebase Realtime Database. توفّر Cloud Functions سرعة أكبر من App Engine في الاستجابة للتغييرات في Cloud Storage، كما أنّها تتطلّب جهدًا أقل.
Google Cloud Vision API
تتيح واجهة Google Cloud Vision API للمطوّرين فهم محتوى الصور من خلال تضمين نماذج متقدّمة لتعلُّم الآلة في واجهة برمجة تطبيقات سهلة الاستخدام. وتصنّف الصور بسرعة إلى آلاف الفئات، وترصد العناصر والوجوه الفردية داخل الصور، وتعثر على الكلمات المطبوعة داخل الصور وتقرأها، وتتعرّف على المحتوى المسيء، وتقدّم حتى تحليلاً للمشاعر في الصور.
Google Cloud Speech API
على غرار Vision API، تتيح Google Cloud Speech API للمطوّرين استخراج نص من ملف صوتي مخزّن في Cloud Storage. تتعرّف واجهة برمجة التطبيقات على أكثر من 80 لغة وشريحة مختلفة لتلبية احتياجات قاعدة المستخدمين العالمية. عند دمجها مع Google Cloud Natural Language API، يمكن للمطوّرين استخراج النص الأولي واستنتاج المعنى من هذا النص. وإذا كان الجمهور المستهدف عالميًا، يمكنك استخدام Google Translate API لترجمة النص إلى أكثر من 90 لغة.
Google App Engine
تستخدم Cloud Storage for Firebase تنسيقَين مختلفَين لتسمية الحِزم التلقائية حسب تاريخ إنشاء الحزمة:
- الحزمة التلقائية التي تم إنشاؤها بعد
أيلول (سبتمبر) 2024 : تكون الحزم التلقائية مستقلة عن Google App Engine.*.firebasestorage.app - حِزم تلقائية قديمة:
تتم مشاركة الحِزم التلقائية في
مع Google App Engine.*.appspot.com
Google App Engine هي "منصة كخدمة" تعمل على توسيع نطاق منطق الخلفية تلقائيًا استجابةً لمقدار الزيارات التي تتلقّاها. ما عليك سوى تحميل رمز الخلفية، وستتولّى Google إدارة مدى توفّر تطبيقك، ولن تحتاج إلى توفير أي خوادم أو صيانتها. App Engine هي طريقة سريعة ومباشرة لإضافة قدرة معالجة إضافية أو تنفيذ موثوق إلى تطبيقك على Firebase.
دمج App Engine القديم
إذا كان لديك حزمة *.appspot.com
تتضمّن البيئات العادية للغات Java وPython وGo في App Engine واجهة برمجة التطبيقات App Engine Images API (Java | Python | Go)، والتي يمكنها تغيير حجم الصورة وتدويرها وقلبها واقتصاصها، بالإضافة إلى عرض عنوان URL لخدمة الصور الذي يتيح إجراء عمليات تحويل من جهة العميل، على غرار Cloudinary وImgix.
اعتبارات بشأن الحزمة المشترَكة
إذا كنت تستخدم مجموعة *.appspot.com
ملفات Firebase Security Rules وApp Engine: الملفات التي يتم تحميلها باستخدام App Engine share تستخدم الحزمة نفسها وتخضع لإعدادات الأمان نفسها. في حال ضبط Firebase Security Rules على الوصول العلني، ستتم إتاحة ملفات App Engine التي يتم تحميلها حديثًا للجميع أيضًا.
ضبط الأذونات: عند استيراد مشروع Google Cloud حالي إلى Firebase، قد تحتاج إلى ضبط عناصر التحكّم التلقائية في الوصول إلى عناصرك للسماح لـ Firebase بالوصول إليها. نفِّذ الأمر التالي باستخدام
gsutil:gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
المشاكل المعروفة في Cloud Storage وApp Engine
هناك حالتان معروفتان لا يمكنك فيهما استيراد تطبيق App Engine:
يتضمّن المشروع تطبيق App Engine Datastore Master/Slave سابقًا.
يحتوي المشروع على رقم تعريف مشروع مسبوق بنطاق، مثل:
domain.com:project-1234.
في أيّ من هاتين الحالتين، لن يتوافق مشروع Firebase مع Cloud Storage for Firebase، وعليك إنشاء مشروع Firebase جديد لاستخدام Cloud Storage. إذا كانت لديك أسئلة، يمكنك التواصل مع فريق الدعم في Firebase.