للبدء في استخدام Cloud Functions، جرِّب هذا البرنامج التعليمي، الذي يبدأ بمهام الإعداد المطلوبة ويشرح كيفية إنشاء دالتَين مرتبطتَين واختبارهما، ونشرهما:
- دالة "إضافة رسالة" تعرض عنوان URL يقبل قيمة نصية ويكتبها في Cloud Firestore.
- دالة "تغيير النص ليصبح بالأحرف الكبيرة" يتم تشغيلها عند الكتابة في Cloud Firestore وتحوِّل النص إلى أحرف كبيرة
في ما يلي رمز النموذج الكامل الذي يحتوي على الدوال:
Node.js
// The Cloud Functions for Firebase SDK to create Cloud Functions and triggers.
const {logger} = require("firebase-functions");
const {onRequest} = require("firebase-functions/https");
const {onDocumentCreated} = require("firebase-functions/firestore");
// The Firebase Admin SDK to access Firestore.
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");
initializeApp();
// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addmessage = onRequest(async (req, res) => {
// Grab the text parameter.
const original = req.query.text;
// Push the new message into Firestore using the Firebase Admin SDK.
const writeResult = await getFirestore()
.collection("messages")
.add({original: original});
// Send back a message that we've successfully written the message
res.json({result: `Message with ID: ${writeResult.id} added.`});
});
// Listens for new messages added to /messages/:documentId/original
// and saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
// Grab the current value of what was written to Firestore.
const original = event.data.data().original;
// Access the parameter `{documentId}` with `event.params`
logger.log("Uppercasing", event.params.documentId, original);
const uppercase = original.toUpperCase();
// You must return a Promise when performing
// asynchronous tasks inside a function
// such as writing to Firestore.
// Setting an 'uppercase' field in Firestore document returns a Promise.
return event.data.ref.set({uppercase}, {merge: true});
});
Python
# The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
from firebase_functions import firestore_fn, https_fn
# The Firebase Admin SDK to access Cloud Firestore.
from firebase_admin import initialize_app, firestore
import google.cloud.firestore
app = initialize_app()
@https_fn.on_request()
def addmessage(req: https_fn.Request) -> https_fn.Response:
"""Take the text parameter passed to this HTTP endpoint and insert it into
a new document in the messages collection."""
# Grab the text parameter.
original = req.args.get("text")
if original is None:
return https_fn.Response("No text parameter provided", status=400)
firestore_client: google.cloud.firestore.Client = firestore.client()
# Push the new message into Cloud Firestore using the Firebase Admin SDK.
_, doc_ref = firestore_client.collection("messages").add({"original": original})
# Send back a message that we've successfully written the message
return https_fn.Response(f"Message with ID {doc_ref.id} added.")
@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
"""Listens for new documents to be added to /messages. If the document has
an "original" field, creates an "uppercase" field containg the contents of
"original" in upper case."""
# Get the value of "original" if it exists.
if event.data is None:
return
try:
original = event.data.get("original")
except KeyError:
# No "original" field, so do nothing.
return
# Set the "uppercase" field.
print(f"Uppercasing {event.params['pushId']}: {original}")
upper = original.upper()
event.data.reference.update({"uppercase": upper})
لمحة عن هذا البرنامج التعليمي
اخترنا Cloud Firestore والدوال التي يتم تشغيلها من خلال طلبات HTTP لهذا النموذج، ويرجع ذلك جزئيًا إلى إمكانية اختبار عوامل التشغيل في الخلفية هذه بدقة من خلال Firebase Local Emulator Suite. تتوافق مجموعة الأدوات هذه أيضًا مع Realtime Database وCloud Storage وPubSub وAuth وعوامل التشغيل القابلة للاستدعاء من خلال HTTP. يمكن اختبار أنواع أخرى من عوامل التشغيل في الخلفية مثل Remote Config وعوامل تشغيل TestLab بشكل تفاعلي باستخدام مجموعات أدوات غير موضّحة في هذه الصفحة.
توضّح الأقسام التالية من هذا البرنامج التعليمي الخطوات المطلوبة لإنشاء النموذج واختباره ونشره.
إنشاء مشروع على Firebase
إذا كنت تستخدم Firebase أو Google Cloud للمرة الأولى
اتّبِع الخطوات التالية إذا كنت تستخدم Firebase أو Google Cloud للمرة الأولى.
يمكنك أيضًا اتّباع هذه الخطوات إذا أردت إنشاء مشروع جديد بالكامل على
Firebase (ومشروع Google Cloud الأساسي).
- سجِّل الدخول إلى Firebase وحدة التحكّم.
- انقر على الزر لإنشاء مشروع جديد على Firebase.
-
في حقل النص، أدخِل اسم مشروع.
إذا كنت جزءًا من مؤسسة Google Cloud، يمكنك اختياريًا تحديد المجلد الذي تريد إنشاء مشروعك فيه.
- إذا طُلب منك ذلك، راجِع بنود Firebase واقبلها، ثم انقر على متابعة.
- (اختياري) فعِّل المساعدة المستندة إلى الذكاء الاصطناعي في Firebase وحدة التحكّم (المعروفة باسم "Gemini في Firebase")، ما يساعدك في البدء و تبسيط عملية التطوير.
-
(اختياري) يمكنك إعداد Google Analytics لمشروعك، ما يتيح تجربة مثالية باستخدام منتجات Firebase التالية: Firebase A/B Testing وCloud Messaging وCrashlytics وIn-App Messaging وRemote Config (بما في ذلك ميزة التخصيص).
يمكنك إما اختيار حساب حالي Google Analytics أو إنشاء حساب جديد. إذا أنشأت حسابًا جديدًا، اختَر موقع تقارير Analytics، ثم اقبل إعدادات مشاركة البيانات وبنود Google Analytics لمشروعك.
- انقر على إنشاء مشروع.
تنشئ Firebase مشروعك وتوفّر بعض الموارد الأولية وتفعِّل واجهات برمجة التطبيقات المهمة. عند اكتمال العملية، سيتم نقلك إلى صفحة النظرة العامة لمشروعك على Firebase في Firebase console.
مشروع حالي على Google Cloud
اتّبِع الخطوات التالية إذا أردت البدء في استخدام Firebase مع مشروع حالي Google Cloud. مزيد من المعلومات حول "إضافة Firebase" إلى مشروع حالي Google Cloud وحلّ المشاكل المتعلقة بذلك.
- سجِّل الدخول إلى Firebase وحدة التحكّم باستخدام الحساب الذي يمنحك إمكانية الوصول إلى المشروع الحالي Google Cloud.
- انقر على الزر لإنشاء مشروع جديد على Firebase.
- في أسفل الصفحة، انقر على إضافة Firebase إلى مشروع Google Cloud.
- في حقل النص، ابدأ بإدخال اسم مشروع المشروع الحالي، ثم اختَر المشروع من القائمة المعروضة.
- انقر على فتح المشروع.
- إذا طُلب منك ذلك، راجِع بنود Firebase واقبلها، ثم انقر على متابعة.
- (اختياري) فعِّل المساعدة المستندة إلى الذكاء الاصطناعي في Firebase وحدة التحكّم (المعروفة باسم "Gemini في Firebase")، ما يساعدك في البدء و تبسيط عملية التطوير.
-
(اختياري) يمكنك إعداد Google Analytics لمشروعك، ما يتيح تجربة مثالية باستخدام منتجات Firebase التالية: Firebase A/B Testing وCloud Messaging وCrashlytics وIn-App Messaging وRemote Config (بما في ذلك ميزة التخصيص).
يمكنك إما اختيار حساب حالي Google Analytics أو إنشاء حساب جديد. إذا أنشأت حسابًا جديدًا، اختَر موقع تقارير Analytics، ثم اقبل إعدادات مشاركة البيانات وبنود Google Analytics لمشروعك.
- انقر على إضافة Firebase.
تضيف Firebase منصة Firebase إلى مشروعك الحالي. عند اكتمال العملية، سيتم نقلك إلى صفحة النظرة العامة لمشروعك على Firebase في Firebase وحدة التحكّم.
إعداد بيئتك وFirebase CLI
Node.js
ستحتاج إلى بيئة Node.js لكتابة الدوال، وإلى Firebase CLI لنشر الدوال في وقت تشغيل Cloud Functions. لتثبيت Node.js وnpm، ننصح باستخدام Node Version Manager.
بعد تثبيت Node.js وnpm، ثبِّت Firebase CLI بالطريقة المفضّلة لديك. لتثبيت CLI من خلال npm، استخدِم الأمر التالي:
npm install -g firebase-tools
يؤدي هذا الأمر إلى تثبيت الأمر `firebase` المتاح على مستوى العالم. إذا
تعذّر تنفيذ الأمر، قد تحتاج إلى
تغيير أذونات npm.
للتحديث إلى أحدث إصدار من firebase-tools، أعِد تنفيذ الأمر نفسه.
Python
ستحتاج إلى بيئة Python
لكتابة الدوال،
وإلى Firebase CLI لنشر الدوال في
وقت تشغيل Cloud Functions. ننصح باستخدام venv لعزل التبعيات. تتوفّر إصدارات Python من 3.10 إلى 3.13،
ويكون الإصدار 3.13 هو وقت التشغيل التلقائي.
بعد تثبيت Python، ثبِّت Firebase CLI بالطريقة المفضّلة لديك.
إعداد مشروعك
عند إعداد Firebase SDK لـ Cloud Functions، يمكنك إنشاء مشروع فارغ يحتوي على التبعيات وبعض نماذج الرموز البرمجية البسيطة. إذا كنت تستخدم Node.js، يمكنك اختيار TypeScript أو JavaScript لإنشاء الدوال. لأغراض هذا البرنامج التعليمي، ستحتاج أيضًا إلى إعداد Cloud Firestore.
لإعداد مشروعك، اتّبِع الخطوات التالية:
- نفِّذ الأمر
firebase loginلتسجيل الدخول من خلال المتصفّح ومصادقة Firebase CLI. - انتقِل إلى دليل مشروعك على Firebase.
- نفِّذ الأمر
firebase init firestore. في هذا البرنامج التعليمي، يمكنك قبول القيم التلقائية عندما يُطلب منك إدخال قواعد Firestore وملفات الفهرس. إذا لم يسبق لك استخدام Cloud Firestore في هذا المشروع، عليك أيضًا اختيار وضع بدء وموقع جغرافي لـ Firestore كما هو موضّح في مقالة البدء في استخدام Cloud Firestore. - نفِّذ الأمر
firebase init functions. يطلب منك CLI اختيار قاعدة رموز حالية أو إعداد قاعدة رموز جديدة وتسميتها. عندما تبدأ، تكون قاعدة رموز واحدة في الموقع التلقائي كافية. وفي وقت لاحق، مع توسيع عملية التنفيذ، قد تحتاج إلى تنظيم الدوال في قواعد رموز. يمنحك CLI الخيارات التالية لدعم اللغة:
- JavaScript
- TypeScript
- Python
في هذا البرنامج التعليمي، اختَر JavaScript أو Python. لإنشاء الدوال بلغة TypeScript، يُرجى الاطّلاع على مقالة كتابة الدوال باستخدام TypeScript.
يمنحك CLI خيار تثبيت التبعيات. يمكنك رفض هذا الخيار إذا أردت إدارة التبعيات بطريقة أخرى.
بعد اكتمال هذه الأوامر بنجاح، سيبدو هيكل مشروعك على النحو التالي:
Node.js
myproject
+- .firebaserc # Hidden file that helps you quickly switch between
| # projects with `firebase use`
|
+- firebase.json # Describes properties for your project
|
+- functions/ # Directory containing all your functions code
|
+- .eslintrc.json # Optional file containing rules for JavaScript linting.
|
+- package.json # npm package file describing your Cloud Functions code
|
+- index.js # Main source file for your Cloud Functions code
|
+- node_modules/ # Directory where your dependencies (declared in
# package.json) are installed
بالنسبة إلى Node.js، يحتوي الملف package.json الذي تم إنشاؤه أثناء الإعداد على مفتاح مهم: "engines": {"node": "18"}. يحدّد هذا المفتاح إصدار Node.js لكتابة الدوال ونشرها. يمكنك
اختيار إصدارات أخرى متوافقة.
Python
myproject
+- .firebaserc # Hidden file that helps you quickly switch between
| # projects with `firebase use`
|
+- firebase.json # Describes properties for your project
|
+- functions/ # Directory containing all your functions code
|
+- main.py # Main source file for your Cloud Functions code
|
+- requirements.txt # List of the project's modules and packages
|
+- venv/ # Directory where your dependencies are installed
استيراد الوحدات المطلوبة وإعداد تطبيق
بعد إكمال مهام الإعداد، يمكنك فتح دليل المصدر والبدء في إضافة الرموز البرمجية كما هو موضّح في الأقسام التالية. بالنسبة إلى هذا النموذج، يجب أن يستورد مشروعك وحدتَي Cloud Functions وAdmin SDK. أضِف أسطرًا مثل ما يلي إلى ملف المصدر:
Node.js
// The Cloud Functions for Firebase SDK to create Cloud Functions and triggers.
const {logger} = require("firebase-functions");
const {onRequest} = require("firebase-functions/https");
const {onDocumentCreated} = require("firebase-functions/firestore");
// The Firebase Admin SDK to access Firestore.
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");
initializeApp();
Python
# The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
from firebase_functions import firestore_fn, https_fn
# The Firebase Admin SDK to access Cloud Firestore.
from firebase_admin import initialize_app, firestore
import google.cloud.firestore
app = initialize_app()
تعمل هذه الأسطر على تحميل الوحدات المطلوبة و
إعداد نُسخة من تطبيق admin يمكن من خلالها إجراء Cloud Firestore تغييرات.
حيثما يتوفّر دعم Admin SDK، كما هو الحال
في FCM وAuthentication وFirebase Realtime Database، يوفّر طريقة
فعّالة لدمج Firebase باستخدام Cloud Functions.
تثبِّت Firebase CLI تلقائيًا وحدتَي Firebase Admin SDK وFirebase SDK لـ Cloud Functions عند إعداد مشروعك. لمزيد من المعلومات حول إضافة مكتبات تابعة لجهات خارجية إلى مشروعك، يُرجى الاطّلاع على مقالة إدارة التبعيات.
إضافة دالة "إضافة رسالة"
بالنسبة إلى دالة "إضافة رسالة"، أضِف الأسطر التالية إلى ملف المصدر:
Node.js
// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addmessage = onRequest(async (req, res) => {
// Grab the text parameter.
const original = req.query.text;
// Push the new message into Firestore using the Firebase Admin SDK.
const writeResult = await getFirestore()
.collection("messages")
.add({original: original});
// Send back a message that we've successfully written the message
res.json({result: `Message with ID: ${writeResult.id} added.`});
});
Python
@https_fn.on_request()
def addmessage(req: https_fn.Request) -> https_fn.Response:
"""Take the text parameter passed to this HTTP endpoint and insert it into
a new document in the messages collection."""
# Grab the text parameter.
original = req.args.get("text")
if original is None:
return https_fn.Response("No text parameter provided", status=400)
firestore_client: google.cloud.firestore.Client = firestore.client()
# Push the new message into Cloud Firestore using the Firebase Admin SDK.
_, doc_ref = firestore_client.collection("messages").add({"original": original})
# Send back a message that we've successfully written the message
return https_fn.Response(f"Message with ID {doc_ref.id} added.")
دالة "إضافة رسالة" هي نقطة نهاية HTTP. يؤدي أي طلب إلى نقطة النهاية
إلى تمرير كائنَي الطلب والرد إلى
معالج الطلب لمنصتك (onRequest()
أو on_request).
تكون دوال HTTP متزامنة (مشابهة لـ
الدوال القابلة للاستدعاء)، لذا عليك إرسال رد
في أسرع وقت ممكن وتأجيل العمل باستخدام Cloud Firestore. تمرِّر دالة HTTP "إضافة رسالة" قيمة نصية إلى نقطة نهاية HTTP وتُدرِجها في قاعدة البيانات ضمن المسار /messages/:documentId/original.
إضافة دالة "تغيير النص ليصبح بالأحرف الكبيرة"
بالنسبة إلى دالة "تغيير النص ليصبح بالأحرف الكبيرة"، أضِف الأسطر التالية إلى ملف المصدر:
Node.js
// Listens for new messages added to /messages/:documentId/original
// and saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
// Grab the current value of what was written to Firestore.
const original = event.data.data().original;
// Access the parameter `{documentId}` with `event.params`
logger.log("Uppercasing", event.params.documentId, original);
const uppercase = original.toUpperCase();
// You must return a Promise when performing
// asynchronous tasks inside a function
// such as writing to Firestore.
// Setting an 'uppercase' field in Firestore document returns a Promise.
return event.data.ref.set({uppercase}, {merge: true});
});
Python
@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
"""Listens for new documents to be added to /messages. If the document has
an "original" field, creates an "uppercase" field containg the contents of
"original" in upper case."""
# Get the value of "original" if it exists.
if event.data is None:
return
try:
original = event.data.get("original")
except KeyError:
# No "original" field, so do nothing.
return
# Set the "uppercase" field.
print(f"Uppercasing {event.params['pushId']}: {original}")
upper = original.upper()
event.data.reference.update({"uppercase": upper})
يتم تنفيذ دالة "تغيير النص ليصبح بالأحرف الكبيرة" عند الكتابة في Cloud Firestore، ما يحدّد المستند الذي يجب الاستماع إليه. لتحسين الأداء، يجب أن تكون محددًا قدر الإمكان.
تحيط الأقواس المعقوفة، مثل {documentId}، "المَعلمات"، وهي أحرف بدل تعرض البيانات المطابقة لها في دالة ردّ الاتصال. Cloud Firestore تُشغِّل
دالة ردّ الاتصال كلما تمت إضافة رسائل جديدة.
في Node.js، تكون الدوال المستندة إلى الأحداث، مثل أحداث Cloud Firestore،
غير متزامنة. يجب أن تعرض دالة ردّ الاتصال null أو كائنًا،
أو وعدًا.
إذا لم تعرض أي شيء، تنتهي مهلة الدالة، ما يشير إلى حدوث خطأ، ويتم إعادة محاولة تنفيذها. يُرجى الاطّلاع على مقالة الدوال المتزامنة وغير المتزامنة والوعود.
محاكاة تنفيذ الدوال
تتيح لك Firebase Local Emulator Suite إنشاء التطبيقات واختبارها على جهازك المحلي بدلاً من نشرها في مشروع على Firebase. ننصح بشدة بإجراء الاختبار المحلي أثناء التطوير، ويرجع ذلك جزئيًا إلى أنّه يقلّل من خطر حدوث أخطاء في الرموز البرمجية التي قد تؤدي إلى تكبّد تكلفة في بيئة الإنتاج (على سبيل المثال، حلقة لا نهائية).
لمحاكاة الدوال، اتّبِع الخطوات التالية:
نفِّذ الأمر
firebase emulators:startوتحقَّق من الناتج بحثًا عن عنوان URL لـ Emulator Suite UI. يكون عنوان URL تلقائيًا localhost:4000، ولكن قد تتم استضافته على منفذ مختلف على جهازك. أدخِل عنوان URL هذا في المتصفّح لفتح Emulator Suite UI.تحقَّق من ناتج الأمر
firebase emulators:startبحثًا عن عنوان URL لدالة HTTP. سيبدو عنوان URL مشابهًا لـhttp://localhost:5001/MY_PROJECT/us-central1/addMessage، باستثناء ما يلي:- سيتم استبدال
MY_PROJECTبرقم تعريف مشروعك. - قد يكون المنفذ مختلفًا على جهازك المحلي.
- سيتم استبدال
أضِف سلسلة طلب البحث
?text=uppercasemeإلى نهاية عنوان URL للدالة. يجب أن يبدو عنوان URL على النحو التالي:http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme. يمكنك اختياريًا تغيير الرسالة "uppercaseme" إلى رسالة مخصّصة.أنشئ رسالة جديدة عن طريق فتح عنوان URL في علامة تبويب جديدة في المتصفّح.
اطّلِع على تأثيرات الدوال في Emulator Suite UI
في علامة التبويب السجلات ، من المفترض أن تظهر لك سجلات جديدة تشير إلى أنّ دوال HTTP قد تم تشغيلها بنجاح:
i functions: Beginning execution of "addMessage"i functions: Beginning execution of "makeUppercase"في علامة التبويب Firestore ، من المفترض أن يظهر لك مستند يحتوي على رسالتك الأصلية بالإضافة إلى النسخة التي تم تحويلها إلى أحرف كبيرة من رسالتك (إذا كانت الرسالة الأصلية "uppercaseme"، ستظهر لك "UPPERCASEME").
نشر الدوال في بيئة إنتاج
بعد أن تعمل الدوال على النحو المطلوب في المحاكي، يمكنك المتابعة لنشرها واختبارها وتشغيلها في بيئة الإنتاج. يُرجى العِلم أنّه لنشر الدوال في بيئة الإنتاج، يجب أن يكون مشروعك ضمن خطة Blaze المَرِنة. يمكنك الاطّلاع على Cloud Functions الأسعار.
لإكمال البرنامج التعليمي، انشر الدوال ثم نفِّذها.
نفِّذ الأمر التالي لنشر الدوال:
firebase deploy --only functions
بعد تنفيذ هذا الأمر، يعرض Firebase CLI عنوان URL لأي نقاط نهاية لدوال HTTP. في المحطة الطرفية، من المفترض أن يظهر لك سطر مثل ما يلي:
Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessageيحتوي عنوان URL على رقم تعريف مشروعك بالإضافة إلى منطقة لدالة HTTP. على الرغم من أنّه ليس عليك القلق بشأن ذلك الآن، يجب أن تحدّد بعض دوال HTTP في بيئة الإنتاج موقعًا جغرافيًا لتقليل وقت استجابة الشبكة.
إذا واجهت أخطاء في الوصول، مثل "يتعذّر منح إذن الوصول إلى المشروع"، جرِّب التحقّق من أسماء مستعارة لمشروعك.
باستخدام عنوان URL الذي يعرضه CLI، أضِف مَعلمة طلب بحث نصي، وافتحها في متصفّح:
https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetooيتم تنفيذ الدالة وإعادة توجيه المتصفّح إلى الـ Firebase وحدة تحكّم في موقع قاعدة البيانات الذي يتم فيه تخزين السلسلة النصية. يؤدي حدث الكتابة هذا إلى تشغيل دالة "تغيير النص ليصبح بالأحرف الكبيرة"، التي تكتب نسخة من السلسلة بأحرف كبيرة.
بعد نشر الدوال وتنفيذها، يمكنك الاطّلاع على السجلات في Google Cloud Console. إذا كنت بحاجة إلى حذف الدوال في بيئة التطوير أو الإنتاج، استخدِم Firebase CLI.
في بيئة الإنتاج، قد تحتاج إلى تحسين أداء الدالة والتحكّم في التكاليف عن طريق ضبط الحد الأدنى والأقصى لعدد النُسخ التي سيتم تشغيلها. يُرجى الاطّلاع على مقالة التحكّم في سلوك التوسيع للحصول على مزيد من المعلومات حول خيارات وقت التشغيل هذه.
الخطوات التالية
في هذا المستند، يمكنك الاطّلاع على مزيد من المعلومات حول كيفية إدارة الدوال في Cloud Functions وكيفية معالجة جميع أنواع الأحداث التي تتوافق مع Cloud Functions.
لمزيد من المعلومات حول Cloud Functions، يمكنك أيضًا تنفيذ ما يلي:
- قراءة معلومات عن حالات استخدام Cloud Functions.
- تجربة الدرس التطبيقي حول الترميز في Cloud Functions.
- مراجعة نماذج الرموز البرمجية وتنفيذها على GitHub