يمكنك تشغيل دالة من خلال طلب HTTP باستخدام
functions.https
ويسمح لك هذا باستدعاء دالة متزامنة من خلال
طرق HTTP المتوافقة التالية: GET
وPOST
وPUT
وDELETE
OPTIONS
تستند الأمثلة في هذه الصفحة إلى
دالة نموذج
الذي يظهر عندما ترسل
طلب HTTP GET
إلى نقطة نهاية الدوال. دالة النموذج
تسترد وقت الخادم الحالي، وتنسق الوقت كما هو محدد في طلب بحث عنوان URL
وترسل النتيجة في استجابة HTTP.
تشغيل دالة باستخدام طلب HTTP
استخدام functions.https
لإنشاء دالة تتعامل مع HTTP
أحداث. يصغي معالج الحدث لدالة HTTP إلى
حدث onRequest()
الذي يتوافق مع أجهزة التوجيه والتطبيقات المُدارة بواسطة
إطار عمل الويب سريع
استخدام كائنات الطلبات والاستجابة السريعة
مستخدمة كوسيطات للدالة onRequest()
،
يمنح الكائن Request
الوصول إلى خصائص طلب HTTP الذي أرسله العميل
يمنحك كائن Response طريقة
إرسال الرد مرة أخرى إلى العميل.
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
إذا واجهتك أخطاء في الأذونات عند نشر الدوال، تأكَّد من أدوار إدارة الهوية وإمكانية الوصول المناسبة المخصصة للمستخدم الذي يشغِّل أوامر النشر.
من خلال توجيه تطبيق Express، تتم إضافة اسم الدالة كبادئة إلى مسارات عناوين URL في التطبيق الذي تحدده. على سبيل المثال، عنوان URL لاستدعاء دالة الاستدعاء في Express مثال التطبيق أعلاه يبدو كما يلي:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
إذا قمت باستدعاء دوال HTTP وراء جدار حماية أو فلتر IP، يمكنك البحث عن عناوين IP التي يستخدمها محرّك بحث Google لعرض وظائف HTTP.
استخدام وحدات البرمجيات الوسيطة مع Cloud Functions
إذا كنت بحاجة إلى إدخال تبعيات البرمجيات الوسيطة لأشياء مثل إتاحة ملفات تعريف الارتباط أو قم باستدعاء هذه العناصر ضمن الدالة. على سبيل المثال، لتفعيل دعم سياسة مشاركة الموارد المتعددة المصادر (CORS)، أضف الجزء التالي:
// Enable CORS using the `cors` express middleware. 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 يساوي "جون" |
ويتم إجراء هذا التحليل باستخدام أدوات تحليل النص الأساسي التالية:
- محلل النص الأساسي JSON
- محلل لغة أولية للجسم
- المحلل اللغوي لنص النص
- محلل النص الأساسي للنموذج بترميز عنوان URL
افترض أنه يتم استدعاء الدالة مع الطلب التالي:
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 |
"baz" |
req.body.text |
"شيء ما" |
req.rawBody |
وحدات البايت الأولية (غير التي تم تحليلها) للطلب |
في مثال الدالة date()
، تختبر الدالة كلاً من معلمة عنوان URL
النص الأساسي للقيمة format
لضبط تنسيق التاريخ/الوقت لاستخدامه:
let format = req.query.format; format = req.body.format;
إنهاء دوال HTTP
إنهاء دالة HTTP دائمًا باستخدام send()
وredirect()
أو end()
. وإلا، فقد تستمر الدالة في العمل
الذي يتم إنهاؤه إجباريًا من قبل النظام. يمكن أيضًا مراجعة
المزامنة وغير المتزامنة والوعود:
بعد استرداد وقت الخادم وتنسيقه باستخدام Node.js
وحدة moment
، الدالة date()
بإرسال النتيجة في استجابة HTTP:
const formattedDate = moment().format(`${format}`); functions.logger.log('Sending Formatted date:', formattedDate); res.status(200).send(formattedDate);
ربط دوال HTTP بـ Firebase Hosting
يمكنك ربط دالة HTTP بـ Firebase Hosting. الطلبات على يمكن إنشاء خادم وكيل للموقع الإلكتروني Firebase Hosting لدوال HTTP محدّدة. هذا أيضًا يسمح لك باستخدام نطاقك الخاص مع دالة HTTP. مزيد من المعلومات حول جارٍ ربط "Cloud Functions" بـ "Firebase Hosting".