يمكنك دمج Cloud Functions مع Firebase Hosting لإنشاء المحتوى الديناميكي وعرضه أو إنشاء واجهات برمجة تطبيقات REST كخدمات مصغّرة.
تتيح لك Cloud Functions for Firebase تشغيل رمز الخلفية تلقائيًا استجابةً لطلبات HTTPS. يتم تخزين الرمز البرمجي في السحابة الإلكترونية من Google ويتم تنفيذه في بيئة مُدارة. ولا داعي إلى إدارة الخوادم وتوسيع نطاقها بنفسك.
للاطّلاع على أمثلة على حالات الاستخدام ونماذج لـ Cloud Functions المدمجة مع Firebase Hosting، انتقِل إلى نظرتنا العامة حول الخدمات غير الخادمية.
ربط جهاز Cloud Functions بشبكة Firebase Hosting
يقدّم هذا القسم مثالاً توضيحيًا حول ربط دالة بـ Firebase Hosting.
يُرجى العِلم أنّه لتحسين أداء عرض المحتوى الديناميكي، يمكنك ضبط إعدادات ذاكرة التخزين المؤقت بشكل اختياري.
الخطوة 1: إعداد Cloud Functions
تأكَّد من تثبيت أحدث إصدار من واجهة سطر الأوامر Firebase ومن إعداد Firebase Hosting.
للحصول على تعليمات مفصّلة حول تثبيت واجهة سطر الأوامر وتهيئة Hosting، يُرجى الاطّلاع على دليل البدء في استخدام Hosting.
تأكَّد من إعداد Cloud Functions:
إذا كنت قد أعددت Cloud Functions بالفعل، يمكنك الانتقال إلى الخطوة 2: إنشاء دالة HTTPS واختبارها.
إذا لم يتم إعداد Cloud Functions:
ابدأ Cloud Functions بتنفيذ الأمر التالي من جذر دليل مشروعك:
firebase init functions
عندما يُطلب منك ذلك، اختَر JavaScript (يستخدم مثال الشرح هذا JS).
تأكَّد من توفّر الدليل
functions
في دليل مشروعك المحلي (الذي تم إنشاؤه باستخدام أمر Firebase الذي نفّذته للتو). هذا الدليلfunctions
هو المكان الذي يتضمّن رمز Cloud Functions.
الخطوة 2: إنشاء دالة HTTPS واختبارها لموقعك الإلكتروني Hosting
افتح
/functions/index.js
في المحرّر المفضّل لديك.استبدِل محتوى الملف بالرمز التالي.
ينشئ هذا الرمز دالة HTTPS (اسمها
bigben
) ترد على طلبات HTTPS بالقيمةBONG
لكل ساعة من اليوم، تمامًا مثل الساعة.const functions = require('firebase-functions/v1'); exports.bigben = functions.https.onRequest((req, res) => { const hours = (new Date().getHours() % 12) + 1 // London is UTC + 1hr; res.status(200).send(`<!doctype html> <head> <title>Time</title> </head> <body> ${'BONG '.repeat(hours)} </body> </html>`); });
اختبِر الدوال محليًا باستخدام Firebase Local Emulator Suite.
من جذر دليل المشروع المحلي، نفِّذ الأمر التالي:
firebase emulators:start
يمكنك الوصول إلى الدالة من خلال عنوان URL المحلي الذي تعرضه واجهة سطر الأوامر، مثلاً:
.http://localhost:5001/PROJECT_ID/us-central1/bigben
يمكنك الانتقال إلى مستندات Cloud Functions للحصول على مزيد من المعلومات حول طلبات HTTPS.
توضّح لك الخطوة التالية كيفية الوصول إلى وظيفة HTTPS هذه من عنوان URL Firebase Hosting كي تتمكّن من إنشاء محتوى ديناميكي لموقعك الإلكتروني المستضاف على Firebase.
الخطوة 3: توجيه طلبات HTTPS مباشرةً إلى الدالة
باستخدام قواعد إعادة الكتابة، يمكنك توجيه الطلبات التي تتطابق مع أنماط معيّنة إلى وجهة واحدة. توضّح الخطوات التالية كيفية توجيه جميع الطلبات من المسار ../bigben
على موقعك الإلكتروني Hosting لتنفيذ الدالة bigben
.
افتح ملف
firebase.json
.أضِف إعدادات
rewrite
التالية ضمن القسمhosting
:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/bigben", "function": { "functionId": "bigben", "region": "us-central1" // optional (see note below) "pinTag": true // optional (see note below) } } ] }
تأكَّد من أنّ عملية إعادة التوجيه تعمل على النحو المتوقّع من خلال إجراء الاختبار مرة أخرى باستخدام محاكيات Firebase.
من جذر دليل المشروع المحلي، نفِّذ الأمر التالي:
firebase emulators:start
انتقِل إلى عنوان URL المستضاف محليًا لموقعك الإلكتروني كما هو معروض في واجهة سطر الأوامر (عادةً
localhost:5000
)، ولكن أضِفbigben
إلى عنوان URL، على النحو التالي:http://localhost:5000/bigben
كرِّر وظيفتك ووظائف موقعك الإلكتروني. استخدِم محاكيات Firebase لاختبار هذه التكرارات.
للحصول على أفضل أداء، يمكنك مشاركة الموقع الجغرافي لوظائفك مع Hosting من خلال اختيار إحدى المناطق التالية:
us-west1
us-central1
us-east1
europe-west1
asia-east1
انتقِل إلى صفحة إعدادات Hosting للحصول على مزيد من التفاصيل حول قواعد إعادة الكتابة. يمكنك أيضًا التعرّف على ترتيب الأولوية للردود لإعدادات Hosting المختلفة.
يُرجى العِلم أنّه لتحسين أداء عرض المحتوى الديناميكي، يمكنك ضبط إعدادات ذاكرة التخزين المؤقت بشكل اختياري.
الخطوة 4: نشر الدالة
بعد التأكّد من أنّ الدالة تعمل على النحو المطلوب في المحاكي، يمكنك المتابعة إلى نشرها واختبارها وتشغيلها باستخدام موارد المشروع الحقيقية. هذا هو الوقت المناسب لتحديد خيارات وقت التشغيل من أجل التحكّم في سلوك تغيير الحجم للدوال التي يتم تشغيلها في بيئة الإنتاج.
يمكنك نشر الدالة بالإضافة إلى محتوى Hosting وإعداداتهما على موقعك الإلكتروني من خلال تنفيذ الأمر التالي من جذر دليل مشروعك المحلي:
firebase deploy --only functions,hosting
يمكنك الوصول إلى موقعك الإلكتروني المباشر ووظيفتك على عناوين URL التالية:
النطاقات الفرعية في Firebase:
PROJECT_ID.web.app/bigben
وPROJECT_ID.firebaseapp.com/bigben
أي نطاقات مخصّصة مرتبطة:
CUSTOM_DOMAIN/bigben
استخدام إطار عمل للويب
يمكنك استخدام أُطر الويب، مثل Express.js، في Cloud Functions لعرض المحتوى الديناميكي لتطبيقك وكتابة تطبيقات ويب معقّدة بسهولة أكبر.
تتيح السمةيقدّم القسم التالي مثالاً توضيحيًا حول كيفية استخدام Express.js مع Firebase Hosting وCloud Functions.
ثبِّت Express.js في مشروعك المحلي عن طريق تنفيذ الأمر التالي من دليل
functions
:npm install express --save
افتح ملف
/functions/index.js
، ثم استورِد Express.js وفعِّله:const functions = require('firebase-functions/v1'); const express = require('express'); const app = express();
أضِف نقطتَي النهاية التاليتَين:
أضِف نقطة النهاية الأولى لعرض فهرس موقعنا الإلكتروني على
/
.app.get('/', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.send(` <!doctype html> <head> <title>Time</title> <link rel="stylesheet" href="/style.css"> <script src="/script.js"></script> </head> <body> <p>In London, the clock strikes: <span id="bongs">${'BONG '.repeat(hours)}</span></p> <button onClick="refresh(this)">Refresh</button> </body> </html>`); });
ونقطة نهاية أخرى لعرض عدد
BONG
كواجهة برمجة تطبيقات بتنسيق JSON ضمن/api
:app.get('/api', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.json({bongs: 'BONG '.repeat(hours)}); });
صدِّر تطبيق Express.js كدالة HTTPS:
exports.app = functions.https.onRequest(app);
في ملف
firebase.json
، وجِّه جميع الطلبات إلى الدالةapp
. تسمح عملية إعادة الكتابة هذه لـ Express.js بعرض المسار الفرعي المختلف الذي أعددناه (في هذا المثال،/
و/api
).{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
إضافة برامج وسيطة
استمرارًا لمثالنا، بعد استخدام Express.js، يمكنك إضافة برنامج وسيط Express.js بالطريقة المعتادة. على سبيل المثال، يمكنك تفعيل طلبات مشاركة الموارد من مصادر متعددة (CORS) على نقاط النهاية.
ثبِّت برنامج
cors
الوسيط عن طريق تشغيل الأمر التالي:npm install --save cors
افتح ملف
/functions/index.js
، ثم أضِفcors
إلى تطبيق Express.js، على النحو التالي:const cors = require('cors')({origin: true}); app.use(cors);
انتقِل إلى مستندات Cloud Functions لمزيد من المعلومات عن استخدام Firebase مع تطبيقات Express ووحدات البرامج الوسيطة.
الخطوات التالية
إعداد التخزين المؤقت للمحتوى الديناميكي على شبكة توصيل محتوى (CDN) عالمية
التفاعل مع خدمات Firebase الأخرى باستخدام مدير SDK في Firebase
راجِع الأسعار والحصص والحدود في Cloud Functions.