Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

ابدأ: اكتب واختبر وانشر وظائفك الأولى

لبدء استخدام وظائف السحابة ، حاول العمل من خلال هذا البرنامج التعليمي ، الذي يبدأ بمهام الإعداد المطلوبة ويعمل من خلال إنشاء واختبار ونشر وظيفتين مرتبطتين:

  • addMessage() ، الذي يعرض على URL التي تقبل قيمة النص ويكتب إلى سحابة Firestore.
  • makeUppercase() ، الذي يطلق على الغيمة Firestore الكتابة والتحويلات النص إلى أحرف كبيرة.

لقد اخترنا سحابة Firestore وظائف جافا سكريبت HTTP أثار لهذه العينة وذلك جزئيا بسبب هذه المشغلات الخلفية يمكن اختبارها بدقة من خلال Firebase المحاكي جناح المحلية . تدعم مجموعة الأدوات هذه أيضًا مشغلات Realtime Database و PubSub و Auth و HTTP القابلة للاستدعاء. يمكن لجميع أنواع أخرى من المحفزات الأساسية مثل التكوين عن بعد، TestLab، ومشغلات تحليلات اختبار تفاعلي باستخدام من toolsets لا الموضحة في هذه الصفحة.

توضح الأقسام التالية من هذا البرنامج التعليمي بالتفصيل الخطوات المطلوبة لإنشاء النموذج واختباره ونشره. إذا كنت تفضل تشغيل التعليمات البرمجية وتفتيشها، والقفز إلى مراجعة نموذج التعليمات البرمجية كاملة .

أنشئ مشروع Firebase

  1. في وحدة التحكم Firebase ، انقر فوق المشروع إضافة.

    • لإضافة موارد Firebase إلى مشروع جوجل الغيمة القائمة، أدخل اسم المشروع، أو تحديده من القائمة المنسدلة.

    • لإنشاء مشروع جديد ، أدخل اسم المشروع المطلوب. يمكنك أيضًا تعديل معرّف المشروع المعروض أسفل اسم المشروع اختياريًا.

  2. إذا طلب منك مراجعة وقبول الشروط Firebase .

  3. انقر فوق متابعة.

  4. (اختياري) تعيين ما يصل Google Analytics للمشروع، والتي تمكنك من الحصول على تجربة مثالية باستخدام أي من المنتجات Firebase التالية:

    إما تحديد القائمة حساب Google Analytics أو إنشاء حساب جديد.

    إذا قمت بإنشاء حساب جديد، حدد الخاص بك تحليلات الإبلاغ عن الموقع ، ثم قبول الإعدادات تبادل البيانات والشروط Google Analytics للمشروع الخاص بك.

  5. إضغط على انشاء مشروع (أو اضافة Firebase، إذا كنت تستخدم مشروع جوجل الغيمة الحالية).

يوفر Firebase الموارد تلقائيًا لمشروع Firebase. عند اكتمال العملية ، سيتم نقلك إلى صفحة النظرة العامة لمشروع Firebase في وحدة تحكم Firebase.

قم بإعداد Node.js و Firebase CLI

عليك ان تحصل على نود.جي إس بيئة إلى وظائف الكتابة، وستحتاج إلى Firebase CLI إلى وظائف نشرها في وظائف الغيمة وقت التشغيل. لتثبيت نود.جي إس و قائية وطنية ، عقدة النسخة مدير ينصح.

وبمجرد الانتهاء من نود.جي إس وقائية وطنية تثبيت، تثبيت Firebase CLI عبر الأسلوب المفضل لديك. لتثبيت CLI عبر npm ، استخدم:

npm install -g firebase-tools

يؤدي هذا إلى تثبيت أمر Firebase المتاح عالميًا. إذا فشل الأمر، قد تحتاج إلى تغيير أذونات الآلية الوقائية الوطنية . لتحديث إلى الإصدار الأحدث من firebase-tools ، إعادة تشغيل نفس الأمر.

ابدأ مشروعك

عند تهيئة Firebase SDK للوظائف السحابية ، فإنك تنشئ مشروعًا فارغًا يحتوي على بعض التبعيات وبعض نماذج التعليمات البرمجية ، وتختار TypeScript أو JavaScript لتكوين الوظائف. لأغراض هذا البرنامج التعليمي ، ستحتاج أيضًا إلى تهيئة Cloud Firestore.

لتهيئة مشروعك:

  1. تشغيل firebase login لتسجيل الدخول عن طريق المتصفح ومصادقة أداة firebase.
  2. انتقل إلى دليل مشروع Firebase.
  3. تشغيل firebase init firestore . بالنسبة لهذا البرنامج التعليمي ، يمكنك قبول القيم الافتراضية عند مطالبتك بقواعد Firestore وملفات الفهرس. إذا كنت لم تستخدم الغيمة Firestore في هذا المشروع حتى الآن، سوف تحتاج أيضا إلى تحديد وضع البداية وموقع لFirestore كما هو موضح في الشروع في العمل مع سحابة Firestore .
  4. تشغيل firebase init functions . تمنحك الأداة خيارًا لتثبيت التبعيات باستخدام npm. فمن آمن أن ينخفض إذا كنت ترغب في إدارة تبعيات بطريقة أخرى، على الرغم من الانخفاض إذا قمت بذلك سوف تحتاج إلى تشغيل npm install قبل محاكاة أو نشر مهامكم.
  5. تمنحك الأداة خيارين لدعم اللغة:

    لهذا البرنامج التعليمي، حدد جافا سكريبت.

بعد اكتمال هذه الأوامر بنجاح ، سيبدو هيكل مشروعك كما يلي:

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

و package.json الملف الذي تم إنشاؤه أثناء التهيئة يحتوي على مفتاح مهم: "engines": {"node": "10"} . يحدد هذا إصدار Node.js الخاص بك لكتابة الوظائف ونشرها. يمكنك تحديد الإصدارات الأخرى التي تدعمها .

استيراد الوحدات المطلوبة وتهيئة التطبيق

بعد الانتهاء من مهام الإعداد ، يمكنك فتح دليل المصدر والبدء في إضافة التعليمات البرمجية كما هو موضح في الأقسام التالية. لهذه العينة، يجب مشروعك استيراد وظائف السحب ووحدات الادارية SDK باستخدام عقدة require البيانات. إضافة خطوط مثل ما يلي لديك index.js الملف:

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

هذه الخطوط تحميل firebase-functions و firebase-admin وحدات، والتهيئة ل admin المثال التطبيق يمكن من خلالها إجراء تغييرات سحابة Firestore. أينما الادارية SDK يتوفر دعم، كما هو الحال بالنسبة FCM، مصادقة، وقاعدة البيانات Firebase الحقيقي، فإنه يوفر وسيلة قوية لدمج Firebase باستخدام وظائف السحب.

يقوم Firebase CLI تلقائيًا بتثبيت Firebase و Firebase SDK لوحدات عقدة وظائف السحابة عند تهيئة مشروعك. لإضافة مكتبات 3rd الطرف لمشروعك، يمكنك تعديل package.json وتشغيل npm install . لمزيد من المعلومات، راجع التبعيات مقبض .

إضافة addMessage() وظيفة

ل addMessage() وظيفة، إضافة هذه الأسطر إلى index.js :

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.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 admin.firestore().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.`});
});

و addMessage() وظيفة هو HTTP نقطة النهاية. أي طلب لنتائج نقطة النهاية في الطراز ExpressJS طلب و استجابة الأجسام تمريرها إلى onRequest() الاستدعاء.

وظائف HTTP متزامن (على غرار وظائف للاستدعاء )، لذلك يجب أن ترسل ردا في أسرع وقت ممكن، وإرجاء العمل باستخدام السحب Firestore. و addMessage() HTTP وظيفة يمر قيمة النص إلى HTTP نقطة النهاية وإدراج ذلك في قاعدة البيانات تحت المسار /messages/:documentId/original .

إضافة makeUppercase() وظيفة

ل makeUppercase() وظيفة، إضافة هذه الأسطر إلى index.js :

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

و makeUppercase() ينفذ وظيفة عندما الغيمة Firestore هو مكتوب ل. و ref.set تحدد وظيفة وثيقة للاستماع على. لأسباب تتعلق بالأداء ، يجب أن تكون محددًا قدر الإمكان.

الأقواس، على سبيل المثال، {documentId} -surround "المعلمات" البدل التي تعرض بياناتها المتطابقة في الاستدعاء.

سحابة Firestore بتشغيل onWrite() الاستدعاء كلما بيانات مكتوبة أو تحديثها على وثيقة معينة.

الوظائف التي تعتمد على الأحداث مثل أحداث Cloud Firestore غير متزامنة. وظيفة رد الاتصال يجب أن تعود إما null ، كائن، أو وعد . إذا لم تقم بإرجاع أي شيء ، تنتهي مهلة الوظيفة ، مما يشير إلى وجود خطأ ، وتتم إعادة المحاولة. انظر سينك، التزامن، والوعود .

محاكاة تنفيذ المهام الخاصة بك

و Firebase المحلية المحاكي جناح يسمح لك لبناء وتطبيقات الاختبار على الجهاز المحلي بدلا من نشر لمشروع Firebase. يوصى بشدة بإجراء اختبار محلي أثناء التطوير ، ويرجع ذلك جزئيًا إلى أنه يقلل من مخاطر أخطاء الترميز التي يمكن أن تتكبد تكلفة في بيئة الإنتاج (على سبيل المثال ، حلقة لا نهائية).

لمحاكاة وظائفك:

  1. تشغيل firebase emulators:start والتحقق من الإخراج لURL من المحاكي جناح UI. لأنه تخلف عن المضيف المحلي: 4000 ، ولكن قد استضافت على منفذ آخر على جهازك. أدخل عنوان URL هذا في متصفحك لفتح واجهة مستخدم Emulator Suite.

  2. تحقق من إخراج firebase emulators:start الأوامر للURL وظيفة HTTP addMessage() . سيبدو مشابها ل http://localhost:5001/MY_PROJECT/us-central1/addMessage ، باستثناء ما يلي:

    1. MY_PROJECT سيتم استبدال مع ID المشروع.
    2. قد يكون المنفذ مختلفًا على جهازك المحلي.
  3. إضافة سلسلة الاستعلام ?text=uppercaseme إلى نهاية URL والدالة. هذا ينبغي أن ننظر شيئا مثل: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . اختياريًا ، يمكنك تغيير الرسالة "الكبيرة" إلى رسالة مخصصة.

  4. أنشئ رسالة جديدة بفتح عنوان URL في علامة تبويب جديدة في متصفحك.

  5. عرض تأثيرات الوظائف في Emulator Suite UI:

    1. في علامة التبويب سجلات، يجب أن تشاهد السجلات الجديدة تشير إلى أن وظائف addMessage() و makeUppercase() ركض:

      وظائف i: بدء تنفيذ "addMessage"

      وظائف i: بدء تنفيذ "makeUppercase"

    2. في علامة التبويب Firestore، يجب أن نرى وثيقة تحتوي الرسالة الأصلية الخاصة بك وكذلك النسخة uppercased الرسالة (إذا كان في الأصل "uppercaseme"، سترى "UPPERCASEME").

نشر الوظائف في بيئة الإنتاج

بمجرد أن تعمل وظائفك على النحو المطلوب في المحاكي ، يمكنك المتابعة لنشرها واختبارها وتشغيلها في بيئة الإنتاج. نضع في اعتبارنا أن للانتشار في بيئة وقت التشغيل نود.جي إس 14 الموصى بها، يجب أن يكون مشروعك على خطة التسعير الحريق . رؤية سحابة التسعير وظائف .

لاستكمال تعليمي، نشر مهامكم ومن ثم تنفيذ addMessage() لتحريك makeUppercase() .

  1. قم بتشغيل هذا الأمر لنشر وظائفك:

    $ firebase deploy --only functions
    

    بعد تشغيل هذا الأمر ، يُخرج Firebase CLI عنوان URL لأي نقاط نهاية لوظيفة HTTP. في جهازك ، يجب أن ترى سطرًا مثل ما يلي:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    يحتوي عنوان URL على معرف المشروع الخاص بك بالإضافة إلى منطقة لوظيفة HTTP. على الرغم من أنك لا تحتاج إلى تقلق بشأن ذلك الآن، يجب أن بعض وظائف إنتاج HTTP تحدد موقع لتقليل استتار الشبكة.

    إذا واجهت أخطاء الوصول إلى مثل "غير قادر على يأذن الوصول إلى المشروع،" محاولة تدقيق الخاص التعرج المشروع .

  2. باستخدام addMessage() الانتاج URL من قبل CLI، إضافة معلمة استعلام النص، وفتحها في المتصفح:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    تقوم الوظيفة بتنفيذ وإعادة توجيه المتصفح إلى وحدة تحكم Firebase في موقع قاعدة البيانات حيث يتم تخزين السلسلة النصية. يؤدي هذا الحدث الكتابة makeUppercase() ، الذي يكتب نسخة الكبير من السلسلة.

بعد نشر وتنفيذ المهام، يمكنك عرض سجلات في وحدة تحكم Firebase عن وظائف الغيمة . إذا كنت بحاجة إلى حذف وظائف في مجال التنمية أو الإنتاج، واستخدام Firebase CLI.

في الإنتاج ، قد ترغب في تحسين أداء الوظائف والتحكم في التكاليف عن طريق تعيين الحد الأدنى والحد الأقصى لعدد المثيلات للتشغيل. انظر السلوك التحجيم تحكم لمزيد من المعلومات حول هذه الخيارات وقت التشغيل.

مراجعة كود عينة كاملة

وهنا يكمن الانتهاء functions/index.js الذي يحتوي على وظائف addMessage() و makeUppercase() . تسمح لك هذه الوظائف بتمرير معلمة إلى نقطة نهاية HTTP تكتب قيمة إلى Cloud Firestore ، ثم تقوم بتحويلها عن طريق الأحرف الكبيرة في السلسلة.

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.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 admin.firestore().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 creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

الخطوات التالية

في هذه الوثائق، يمكنك العثور على مزيد من المعلومات حول المفاهيم العامة للوظائف سحابة فضلا عن أدلة ل كتابة وظائف للتعامل مع أنواع الحدث بدعم من وظائف الغيمة.

لمعرفة المزيد حول وظائف السحابة ، يمكنك أيضًا القيام بما يلي:

فيديو تعليمي

يمكنك معرفة المزيد حول وظائف السحابة من خلال مشاهدة مقاطع الفيديو التعليمية. في هذا الفيديو ، ستجد إرشادات مفصلة حول بدء استخدام وظائف السحابة ، بما في ذلك إعداد Node.js و CLI.