تتيح Firebase Hosting REST API عمليات النشر الآلي والمخصّص للمواقع المستضافة على Firebase. استخدِم واجهة برمجة التطبيقات REST API هذه لنشر محتوى Hosting جديد أو معدَّل و إعدادات.
كبديل لاستخدام Firebase CLI لعمليات النشر، يمكنك استخدام Firebase Hosting REST API لإنشاء version
جديد من مواد العرض لموقعك الإلكتروني بشكل آلي، وتحميل الملفات إلى الإصدار، ثم نشر الإصدار على موقعك الإلكتروني.
على سبيل المثال، باستخدام Firebase Hosting REST API، يمكنك إجراء ما يلي:
جدولة عمليات النشر باستخدام واجهة برمجة تطبيقات REST مع مهمة cron، يمكنك تغيير المحتوى المستضاف على Firebase وفقًا لجدول زمني منتظم (على سبيل المثال، لنشر إصدار خاص من المحتوى بمناسبة عطلة أو حدث).
الدمج مع أدوات المطوّرين: يمكنك إنشاء خيار في أداتك ل نشر مشاريع تطبيقات الويب على Firebase Hosting بنقرة واحدة فقط (مثل النقر على زر نشر ضمن بيئة تطوير متكاملة).
يتمّ نشر عمليات النشر المبرمَجة عند إنشاء محتوى ثابت. عندما تُنشئ عملية محتوًى ثابتًا آليًا (مثل المحتوى الذي ينشئه المستخدمون، مثل ملفات ويكي أو مقالات إخبارية)، يمكنك نشر المحتوى الذي تم إنشاؤه كملفّات ثابتة بدلاً من عرضه ديناميكيًا. ويساعدك ذلك في توفير طاقة الحوسبة الباهظة التكلفة وعرض ملفاتك بطريقة أكثر قابلية للتوسّع.
يوضّح هذا الدليل أولاً كيفية تفعيل واجهة برمجة التطبيقات والمصادقة عليها وتفويضها. بعد ذلك، يعرض هذا الدليل مثالاً لإنشاء نسخة Firebase Hosting وتحميل الملفات المطلوبة إلى الإصدار ثم أخيرًا نشر الإصدار.
يمكنك أيضًا الاطّلاع على مزيد من المعلومات عن واجهة برمجة التطبيقات REST API هذه في المستندات المرجعية الكاملة Hosting لواجهة برمجة التطبيقات REST API.
قبل البدء: تفعيل واجهة برمجة التطبيقات REST
يجب تفعيل واجهة برمجة التطبيقات Firebase Hosting REST API في وحدة تحكّم Google APIs:
افتح صفحة واجهة برمجة التطبيقات Firebase Hosting في وحدة تحكّم Google APIs.
اختَر مشروعك على Firebase عندما يُطلب منك ذلك.
انقر على تفعيل في صفحة واجهة برمجة التطبيقات Firebase Hosting.
الخطوة 1: الحصول على رمز دخول لمصادقة طلبات واجهة برمجة التطبيقات والموافقة عليها
تتوافق مشاريع Firebase مع حسابات خدمة Google، التي يمكنك استخدامها لطلب واجهات برمجة تطبيقات خادم Firebase من خادم تطبيقك أو بيئة موثوق بها. إذا كنت تطوّر رمزًا محليًا أو تنشر تطبيقك داخل المؤسسة، يمكنك استخدام بيانات الاعتماد التي تم الحصول عليها من خلال حساب الخدمة هذا للسماح بطلبات الخادم.
لمصادقة حساب خدمة ومنحه الإذن بالوصول إلى خدمات Firebase، يجب إنشاء ملف مفتاح خاص بتنسيق JSON.
لإنشاء ملف مفتاح خاص لحساب الخدمة:
في وحدة تحكّم Firebase، افتح الإعدادات > حسابات الخدمة.
انقر على إنشاء مفتاح خاص جديد، ثم أكِّد ذلك بالنقر على إنشاء مفتاح.
تخزين ملف JSON الذي يحتوي على المفتاح بأمان
استخدِم بيانات اعتماد Firebase مع مكتبة Google Auth Library بلغتك المفضّلة لاسترداد رمز وصول صالح لفترة قصيرة من خلال بروتوكول OAuth 2.0:
عقدة.js
const {google} = require('googleapis'); function getAccessToken() { return new Promise(function(resolve, reject) { var key = require('./service-account.json'); var jwtClient = new google.auth.JWT( key.client_email, null, key.private_key, SCOPES, null ); jwtClient.authorize(function(err, tokens) { if (err) { reject(err); return; } resolve(tokens.access_token); }); }); }
في هذا المثال، تُجري مكتبة برامج Google API مصادقة الطلب باستخدام رمز مميّز على شبكة JSON أو JWT. لمزيد من المعلومات، راجِع رموز JSON المميّزة للويب.
Python
def _get_access_token(): """Retrieve a valid access token that can be used to authorize requests. :return: Access token. """ credentials = ServiceAccountCredentials.from_json_keyfile_name( 'service-account.json', SCOPES) access_token_info = credentials.get_access_token() return access_token_info.access_token
جافا
private static String getAccessToken() throws IOException { GoogleCredential googleCredential = GoogleCredential .fromStream(new FileInputStream("service-account.json")) .createScoped(Arrays.asList(SCOPES)); googleCredential.refreshToken(); return googleCredential.getAccessToken(); }
بعد انتهاء صلاحية رمز الدخول، يتم استدعاء طريقة إعادة تحميل الرمز تلقائيًا لاسترداد رمز دخول معدَّل.
الخطوة 2: التأكّد من أنّ مشروعك يتضمّن موقعًا إلكترونيًا Hosting تلقائيًا
قبل عملية النشر الأولى على Firebase Hosting، يجب أن يحتوي مشروعك على Firebase
على Hosting SITE
تلقائيًا.
تحقَّق ممّا إذا كان مشروعك يتضمّن موقعًا إلكترونيًا تلقائيًا على Hosting من خلال طلب نقطة نهاية
sites.list
.على سبيل المثال:
أمر cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites
طلب HTTPS الأوّلي
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
إذا كان أحد المواقع الإلكترونية يحتوي على
"type": "DEFAULT_SITE"
، هذا يعني أن مشروعك يتضمن بالفعل موقع Hosting تلقائيًا. تخطّى الجزء المتبقّي من هذه الخطوة، وانتقِل إلى الخطوة التالية: إنشاء نسخة جديدة لموقعك الإلكتروني.إذا حصلت على صفيف فارغ، هذا يعني أنّه ليس لديك Hosting موقع إلكتروني تلقائي. أكمِل باقي هذه الخطوة.
اختَر
SITE_ID
لموقعك الإلكتروني التلقائي على Hosting. يُرجى مراعاة النقاط التالية عند اتخاذ هذا القرارSITE_ID
:يتم استخدام هذا الرمز
SITE_ID
لإنشاء النطاقات الفرعية التلقائية في Firebase:
وSITE_ID.web.app
.SITE_ID.firebaseapp.com
يجب استيفاء المتطلبات التالية في
SITE_ID
:- يجب أن يكون تصنيف اسم مضيف صالحًا، أي لا يمكن أن يحتوي على
.
أو_
أو غير ذلك. - يجب ألا يزيد عدد الأحرف عن 30 حرفًا.
- يجب أن يكون فريدًا على مستوى Firebase
- يجب أن يكون تصنيف اسم مضيف صالحًا، أي لا يمكن أن يحتوي على
يُرجى العِلم أنّنا ننصح غالبًا باستخدام رقم تعريف مشروعك ك
SITE_ID
لموقعك الإلكتروني Hosting التلقائي. اطّلِع على كيفية العثور على هذا المعرّف في مقالة فهم مشاريع Firebase.أنشئ موقعك الإلكتروني التلقائي على Hosting من خلال طلب نقطة نهاية
sites.create
باستخدامSITE_ID
المطلوب كمَعلمةsiteId
.على سبيل المثال:
أمر cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID
طلب HTTPS الأوّلي
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
يعرض طلب البيانات من واجهة برمجة التطبيقات هذا المخصّص لموقع
sites.create
ملف JSON التالي:{ "name": "projects/PROJECT_ID/sites/SITE_ID", "defaultUrl": "https://SITE_ID.web.app", "type": "DEFAULT_SITE" }
الخطوة 3: إنشاء نسخة جديدة لموقعك الإلكتروني
أول طلب بيانات من واجهة برمجة التطبيقات هو إنشاء Version
جديد لموقعك الإلكتروني.
وفي وقت لاحق من هذا الدليل، ستُحمِّل الملفات إلى هذا الإصدار ثم تنشره على موقعك الإلكتروني.
حدِّد SITE_ID للموقع الإلكتروني الذي تريد النشر فيه.
اتصل بنقطة نهاية versions.create باستخدام SITE_ID في المكالمة.
(اختياري) يمكنك أيضًا تمرير كائن إعدادات Firebase Hosting في الطلب، بما في ذلك ضبط عنوان يخزّن جميع الملفات مؤقتًا مدّة زمنية محدّدة.
على سبيل المثال:
أمر cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -d '{ "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions
طلب HTTPS الأوّلي
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/versions HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 134 { "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }
يعرض طلب البيانات من واجهة برمجة التطبيقات هذا المخصّص لموقع versions.create
ملف JSON التالي:
{ "name": "sites/SITE_ID/versions/VERSION_ID", "status": "CREATED", "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }
يحتوي هذا الردّ على معرّف فريد للإصدار الجديد بالتنسيق:
sites/SITE_ID/versions/VERSION_ID
. ستحتاج إلى
هذا المعرّف الفريد في جميع أقسام هذا الدليل للإشارة إلى
هذه النسخة المحدّدة.
الخطوة 4: تحديد قائمة الملفات التي تريد نشرها
بعد أن أصبح لديك معرّف الإصدار الجديد، عليك إخبار Firebase Hosting بالملفات التي تريد نشرها في هذا الإصدار الجديد.
يُرجى العلم أنّ الحد الأقصى لحجم الملفات في Hosting هو 2 غيغابايت.
تتطلّب واجهة برمجة التطبيقات هذه تحديد الملفات من خلال تجزئة SHA256. لذلك، قبل أن تتمكّن من إجراء طلب البيانات من واجهة برمجة التطبيقات، عليك أولاً احتساب تجزئة لكل ملف ثابت من خلال ضغط الملفات ثم الحصول على تجزئة SHA256 لكل ملف مضغوط حديثًا.
لنواصل مثالنا، لنفترض أنّك تريد نشر ثلاثة ملفات في الإصدار الجديد: file1
وfile2
وfile3
.
ضغط الملفات باستخدام Gzip:
gzip file1 && gzip file2 && gzip file3
لديك الآن ثلاثة ملفات مضغوطة هي
file1.gz
وfile2.gz
وfile3.gz
.يمكنك الحصول على تجزئة SHA256 لكل ملف مضغوط:
cat file1.gz | openssl dgst -sha256 66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
cat file2.gz | openssl dgst -sha256 490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
cat file3.gz | openssl dgst -sha256 59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
لديك الآن تجزئات SHA256 الثلاث للملفات الثلاثة المضغوطة.
أرسِل هذه التجزئات الثلاث في طلب واجهة برمجة التطبيقات إلى نقطة النهاية
versions.populateFiles
. أدرِج كل تجزئة حسب المسار المطلوب للملف الذي تم تحميله (في المثال التالي،/file1
و/file2
و/file3
).على سبيل المثال:
أمر cURL
$ curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -d '{ "files": { "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4", "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" } }' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFiles
طلب HTTPS غير معدَّل
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFiles HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 181 { "files": { "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4", "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" } }
يعرض طلب البيانات من واجهة برمجة التطبيقات هذا المخصّص لموقع versions.populateFiles
ملف JSON التالي:
{ "uploadRequiredHashes": [ "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" ], "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files" }
يتضمن هذا الرد:
تجزئة كل ملف يجب تحميله. على سبيل المثال، في هذا المثال، سبق أن تم تحميل
file1
في إصدار سابق، لذا لن يتم تضمين هالته في قائمةuploadRequiredHashes
.تمثّل هذه السمة
uploadUrl
الخاصة بالإصدار الجديد.
في الخطوة التالية لتحميل الملفَّين الجديدَين، ستحتاج إلى التجزئات وuploadURL
من ردّ versions.populateFiles
.
الخطوة 5: تحميل الملفات المطلوبة
عليك تحميل كل ملف مطلوب بشكلٍ فردي (هذه الملفات مُدرَجة في uploadRequiredHashes
من ردّ versions.populateFiles
في الخطوة السابقة). وبالنسبة إلى عمليات تحميل الملفات هذه، ستحتاج إلى تجزئات الملفات
وuploadUrl
من الخطوة السابقة.
يمكنك إلحاق شَرطة مائلة للأمام وتجزئة الملف إلى
uploadUrl
لإنشاء عنوان URL خاص بالملف بالتنسيق:https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH
.حمِّل جميع الملفات المطلوبة واحدًا تلو الآخر (في هذا المثال،
file2.gz
وfile3.gz
فقط) إلى عنوان URL الخاص بالملف باستخدام سلسلة من الطلبات.على سبيل المثال، لتحميل
file2.gz
المضغوط:الأمر cURL
curl -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @./file2.gz \ https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH
طلب HTTPS الأوّلي
Host: upload-firebasehosting.googleapis.com POST /upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/octet-stream Content-Length: 500 content-of-file2.gz
تؤدي عمليات التحميل الناجحة إلى عرض استجابة HTTPS 200 OK
.
الخطوة 6: تعديل حالة الإصدار إلى "مكتملة"
بعد تحميل جميع الملفات المدرَجة في استجابة
versions.populateFiles
، يمكنك تعديل حالة إصدارك إلى
FINALIZED
.
استخدِم نقطة النهاية versions.patch
مع ضبط الحقل status
في طلب واجهة برمجة التطبيقات على FINALIZED
.
على سبيل المثال:
أمر cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"status": "FINALIZED"}' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status
طلب HTTPS غير معدَّل
Host: firebasehosting.googleapis.com PATCH /v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 23 {"status": "FINALIZED"}
يعرض طلب البيانات من واجهة برمجة التطبيقات إلى versions.patch
رمز JSON التالي. تأكَّد من أنّه
تم تحديث status
إلى الإصدار FINALIZED
.
{ "name": "sites/SITE_ID/versions/VERSION_ID", "status": "FINALIZED", "config": { "headers": [{ "glob": "**", "headers": {"Cache-Control": "max-age=1800"} }] }, "createTime": "2018-12-02T13:41:56.905743Z", "createUser": { "email": "SERVICE_ACCOUNT_EMAIL@SITE_ID.iam.gserviceaccount.com" }, "finalizeTime": "2018-12-02T14:56:13.047423Z", "finalizeUser": { "email": "USER_EMAIL@DOMAIN.tld" }, "fileCount": "5", "versionBytes": "114951" }
الخطوة 7: طرح الإصدار للنشر
الآن بعد أن حصلت على نسخة نهائية، حررها للنشر. لهذه الخطوة،
عليك إنشاء
Release
من إصدارك
يحتوي على إعدادات الاستضافة وجميع ملفات المحتوى لإصدارك الجديد.
اتصل بنقطة نهاية releases.create
لإنشاء إصدارك.
على سبيل المثال:
أمر cURL
curl -H "Authorization: Bearer ACCESS_TOKEN" \ -X POST https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID
طلب HTTPS غير معدَّل
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID HTTP/1.1 Authorization: Bearer ACCESS_TOKEN
يعرض طلب البيانات من واجهة برمجة التطبيقات إلى releases.create
رمز JSON التالي:
{ "name": "sites/SITE_ID/releases/RELEASE_ID", "version": { "name": "sites/SITE_ID/versions/VERSION_ID", "status": "FINALIZED", "config": { "headers": [{ "glob": "**", "headers": {"Cache-Control": "max-age=1800"} }] } }, "type": "DEPLOY", "releaseTime": "2018-12-02T15:14:37Z" }
من المفترض أن يكون قد تم الآن نشر إعدادات الاستضافة وجميع ملفات الإصدار الجديد على موقعك الإلكتروني، ويمكنك الوصول إلى ملفاتك باستخدام عناوين URL التالية:
https://SITE_ID.web.app/file1
https://SITE_ID.web.app/file2
https://SITE_ID.web.app/file3
ويمكن الوصول إلى هذه الملفات أيضًا من خلال عناوين URL المرتبطة بنطاق SITE_ID.firebaseapp.com
.
يمكنك أيضًا الاطّلاع على إصدارك الجديد في لوحة بيانات Hosting في وحدة تحكّم Firebase.