Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

وظائف الاتصال عبر طلبات HTTP

يمكنك تشغيل دالة من خلال طلب HTTP باستخدام functions.https . يسمح لك هذا باستدعاء وظيفة متزامنة من خلال طرق HTTP المدعومة التالية: GET و POST و PUT و DELETE و OPTIONS .

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

قم بتشغيل دالة باستخدام طلب HTTP

استخدم functions.https لإنشاء دالة تتعامل مع أحداث HTTP. يستمع معالج الأحداث لدالة HTTP onRequest() ، الذي يدعم أجهزة التوجيه والتطبيقات التي يديرها إطار عمل الويب السريع .

استخدام كائنات الطلب السريع والاستجابة

عند استخدامه onRequest() لـ onRequest() ، يمنحك كائن الطلب حق الوصول إلى خصائص طلب HTTP الذي أرسله العميل ، ويمنحك كائن الاستجابة طريقة لإرسال استجابة مرة أخرى إلى العميل.

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

استخدام تطبيقات Express الموجودة

باستخدام التطبيق كوسيطة لـ onRequest() ، يمكنك تمرير تطبيق Express كامل إلى وظيفة HTTP. يمكن نقل رمز اللوحة الأساسية إلى البرمجيات الوسيطة كما هو موضح:

 const express = require('express');
const cors = require('cors');

const app = express();

// Automatically allow cross-origin requests
app.use(cors({ origin: true }));

// Add middleware to authenticate requests
app.use(myMiddleware);

// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));

// Expose Express API as a single Cloud Function:
exports.widgets = functions.https.onRequest(app);
 

استدعاء دالة HTTP

بعد نشر وظيفة HTTP ، يمكنك استدعاؤها من خلال عنوان URL الفريد الخاص بها. يتضمن عنوان URL ما يلي بالترتيب:

  • المنطقة (أو المناطق) التي نشرت فيها وظيفتك. قد تحتاج بعض وظائف الإنتاج إلى تعيين الموقع بشكل صريح لتقليل وقت استجابة الشبكة.
  • معرّف مشروع Firebase
  • cloudfunctions.net
  • اسم وظيفتك

على سبيل المثال ، يبدو عنوان URL لاستدعاء date() كما يلي:

 https://us-central1-<project-id>.cloudfunctions.net/date
 

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

مع التوجيه السريع للتطبيق ، تتم إضافة اسم الوظيفة كبادئة لمسارات URL في التطبيق الذي تحدده. على سبيل المثال ، يبدو عنوان URL لاستدعاء المُحضر في مثال تطبيق Express أعلاه كما يلي:

 https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
 

إذا قمت باستدعاء وظائف HTTP خلف جدار حماية أو عامل تصفية IP ، يمكنك البحث عن عناوين IP التي تستخدمها Google لخدمة وظائف HTTP.

استخدم وحدات البرامج الوسيطة مع وظائف السحاب

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

// Enable CORS using the `cors` express middleware.
return cors(req, res, () => {
  // ...
});

اقرأ القيم من الطلب

يسرد الجدول التالي بعض السيناريوهات الشائعة:

نوع المحتوى نص الطلب سلوك
application/json '{"name":"John"}' request.body.name يساوي "جون"
application/octet-stream "نصي" request.body يساوي '6d792074657874' (وحدات البايت الخام للطلب ؛ راجع وثائق Node.js Buffer )
text/plain "نصي" request.body يساوي "النص الخاص بي"
application/x-www-form-urlencoded "name = John" request.body.name يساوي "جون"

يتم إجراء هذا التحليل بواسطة موزعي الجسم التاليين:

افترض أن وظيفتك تسمى مع الطلب التالي:

curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'

ثم تتجسد البيانات المرسلة تحت:

الملكية / الطريقة القيمة
req.method "بريد"
req.get('x-myheader') "123"
req.query.foo "باز"
req.body.text "شيئا ما"
req.rawBody البايتات الخام (غير المحللة) للطلب

في مثال الدالة date() ، تختبر الوظيفة كلاً من معلمة URL والنص لقيمة format لتعيين تنسيق التاريخ / الوقت لاستخدامه:

let format = req.query.format;
format = req.body.format;

إنهاء وظائف HTTP

قم دائمًا بإنهاء وظيفة HTTP باستخدام send() أو redirect() أو end() . خلاف ذلك ، قد يستمر تشغيل وظيفتك وإنهائها بالقوة من قبل النظام. انظر أيضًا Sync و Async و Promises .

بعد استرجاع وتنسيق وقت الخادم باستخدام وحدة moment Node.js ، تنتهي الدالة date() بإرسال النتيجة في استجابة HTTP:

const formattedDate = moment().format(format);
console.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

ربط وظائف HTTP باستضافة Firebase

يمكنك توصيل وظيفة HTTP باستضافة Firebase. يمكن إرسال الطلبات على موقع Firebase Hosting الخاص بك إلى وظائف HTTP محددة. يسمح لك هذا أيضًا باستخدام نطاقك الخاص مع وظيفة HTTP. تعرّف على المزيد حول ربط وظائف السحابة باستضافة Firebase .