كود يشتغل على السيرفر داخل موقعك: الدوال السحابية في ابني
الدالة السحابية هي ملف كود يعيش داخل موقعك ويشتغل على السيرفر، مو في متصفح الزائر. تناديها الصفحة بسطر واحد: cloud.fn.call باسم الدالة والبيانات. أي منطق ما يصح ينكشف للزائر — قواعد التسعير، التحقق من الطلب، مفتاح API مدفوع — مكانه هنا. وأنت ما تكتبها بيدك: تشرحها بالعربي في المحادثة، وابني يكتبها ويجرّبها ويشغّلها قبل ما يقول لك خلصت.
نُشر في:
ابدأ مجاناًما الدالة السحابية، ولماذا لا يكفي كود المتصفح
الدالة السحابية ملف اسمه functions/اسم-الدالة.js داخل مشروعك، يشتغل على سيرفر ابني داخل صندوق QuickJS معزول. الصفحة تناديه بسطر واحد: cloud.fn.call بالاسم والبيانات، ويرجع الرد.
الفرق مو تقني بحت، الفرق تجاري. أي كود يشتغل في متصفح الزائر يقدر الزائر يفتحه ويقرأه ويعدّله. يعني لو الخصم محسوب في المتصفح، يقدر يغيّر الرقم. ولو مفتاح API مكتوب في الصفحة، يقدر ينسخه ويستعمله على حسابك أنت.
داخل الدالة تتغيّر الصلاحيات: تقرأ وتكتب في بيانات المشروع بصلاحية المالك عبر ebnii.db، وتفتح المفاتيح المحفوظة على الخادم عبر ebnii.secrets.get، وترسل بريداً لأي عنوان عبر ebnii.email.send، وتعرف من المستخدم الحالي عبر ebnii.auth.user. وكل هذا ما ينزل للمتصفح أبداً.
وعندك جاهز داخل الدالة: ebnii.crypto للتوقيع والتجزئة والمقارنة الآمنة وتوقيع JWT والتحقق منه، وebnii.csv لقراءة وكتابة ملفات CSV بمعيار RFC 4180، وebnii.format للعملة والتاريخ، وebnii.url وebnii.base64 وebnii.basicAuth.
رحلة نداء واحد
من ضغطة الزائر إلى الرد، الطريق كله مرّ على السيرفر مرة واحدة.
متى تحتاج دالة سحابية فعلياً
مو كل شيء يحتاج سيرفر. هذي الحالات الخمس تحتاجه فعلاً، والباقي يمشي من الصفحة عادي.
قواعد التسعير والخصم
الزائر يرسل رقم الصنف والكمية والكوبون، والسعر النهائي يُحسب على السيرفر. لو حسبته في المتصفح، أي زائر يقدر يبعث قيمة معدّلة ويشتري بسعر ما تعرفه.
التحقق من الطلب قبل تثبيته
المخزون موجود؟ الكمية معقولة؟ الكوبون منتهي؟ الموعد محجوز قبل شوي؟ هذي فحوصات لازم تصير مرة وحدة على السيرفر قبل ما ينكتب الطلب، مو بعده.
نداء API خارجي بمفتاح سري
شركة شحن، مزوّد رسائل، نظام مخزون، أي خدمة مدفوعة بمفتاح. الدالة تفتح المفتاح من ebnii.secrets.get وتنادي عبر ebnii.fetch — حتى ٨ نداءات خارجية في التشغيل الواحد، ومهلة النداء محكومة بمهلة التشغيل نفسها.
رسالة لعنوان ما هو عنوانك ولا عنوان المسجّل
من كود الصفحة، البريد يوصل للمالك أو للمستخدم المسجّل على عنوانه هو فقط، وأي عنوان ثاني يُرفض ٤٠٣. رمز التحقق للزائر الجديد أو تأكيد الطلب لعميل ما سجّل: هذا شغل دالة سحابية.
التوقيع والتحقق
ebnii.crypto يعطيك hmac وhash وtimingSafeEqual وrandomHex وuuid وتوقيع JWT بخوارزميتي HS256 وRS256 والتحقق منه. مفيد مع أي مزوّد يطلب توقيع الطلب أو يرسل لك بيانات موقّعة.
كود يشتغل في متصفح الزائر مقابل دالة سحابية
| الموضوع | دالة سحابية في ابني | كود يشتغل في متصفح الزائر |
|---|---|---|
| مكان التنفيذ | سيرفر ابني، داخل صندوق QuickJS معزول | جهاز الزائر ومتصفحه |
| المفاتيح السرية | ebnii.secrets.get — القيمة محفوظة على السيرفر وحده وما تنزل للصفحة | أي مفتاح في الكود يقدر أي زائر يقرأه |
| تعديل السعر قبل الإرسال | مستحيل — الزائر يرسل رقم الصنف، والسعر يُحسب عندك | ممكن — القيمة تُبنى في جهازه |
| قراءة البيانات | صلاحية مالك على ebnii.db، تقرأ صفوف كل العملاء لو احتجت | محدودة بمستوى الوصول المضبوط على المجموعة |
| بريد لأي عنوان | مسموح — حتى ٥ رسائل في التشغيل الواحد | المالك أو المستخدم المسجّل نفسه فقط، وغيرهم ٤٠٣ |
| الاتصال بـAPI خارجي | ebnii.fetch حتى ٨ نداءات في التشغيل، ومهلة النداء تتبع مين شغّل الدالة: حتى ٢٠ ثانية للمالك وأقصر للزائر | مقيّد بسياسات المتصفح، والرد والمفتاح مكشوفان |
| الشغل بدون زائر | مهام مؤجلة ومجدولة وويبهوك وارد | ما فيه — الكود يموت مع إغلاق التبويب |
الحدود الحقيقية بالأرقام
هذي أرقام مقروءة من الكود، مو تقديرات. تختلف المهلة حسب مين شغّل الدالة.
كيف تركّب دالة سحابية بدون ما تكتب سطر
اشرح القاعدة بالعربي
مثال: «لما يطلب العميل، تأكد أن الكمية موجودة بالمخزون، واحسب الشحن من API شركة الشحن، وثبّت الطلب واطلع له رقم». تكلّم بمنطق تجارتك، مو بمصطلحات برمجية.
ابني يقرأ توثيق المزوّد ويجرّب الـAPI فعلياً
عنده أداة تقرأ توثيق الـAPI، وأداة تضرب الطلب على المزوّد الحقيقي بمفتاحك وتقرأ الرد قبل ما يُكتب أي كود. يعني الكود ينكتب على شكل الرد الفعلي، مو على تخمين.
المفتاح يدخل من بطاقة سر داخل المحادثة
لما تحتاج مفتاحاً، يطلع لك حقل إدخال آمن في المحادثة. القيمة تروح للتخزين المشفّر مباشرة وما تمر على النموذج ولا تنطبع في المحادثة.
ابني يشغّل الدالة بنفسه ويقرأ النتيجة
عنده أداة تنفّذ الدالة اللي كتبها وترجع له المخرجات والأخطاء. لو رجع رد غلط، يصلّح ويعيد قبل ما يسلّمك.
انشر الموقع
نداءات الدوال تشتغل مع الموقع المنشور. والمهام المجدولة تحديداً ما تبدأ قبل النشر — هذا مقصود، عشان مشروع تحت التجربة ما يرسل رسائل لعملاء حقيقيين.
شغل يمشي وأنت نايم: ثلاث طرق
الدالة ما لازم ينتظرها زائر. عندك ثلاث طرق تشتغل فيها بدون أحد.
| الطريقة | كيف تنطلق | الحدود | مثال عملي |
|---|---|---|---|
| مهمة مؤجلة | ebnii.jobs.enqueue بعدد ثوانٍ تأخير | ١٠ في التشغيل الواحد، ٥٠٠ في اليوم، ٢٠٠ معلّقة، حمولة ١٦ ألف بايت، إعادة محاولة ٣ مرات بتباعد | بعد تثبيت الطلب بساعة، تذكير للعميل يؤكد العنوان |
| مهمة مجدولة | تُعرَّف في ملف functions/_jobs.json: كل ١٥ أو ٣٠ دقيقة، أو كل ساعة، أو يومي، أو أسبوعي — مع ساعة محددة ويوم في الأسبوع ومنطقة زمنية | حتى ١٠ مهام مجدولة للموقع، وما تشتغل قبل النشر، وebnii.auth.user ترجع فارغة لأن ما فيه مستخدم | تقرير مبيعات أمس على بريدك ٧:٠٠ صباحاً بتوقيت الرياض |
| ويبهوك وارد | عنوان جاهز على نطاق موقعك ينتهي بـ hook واسم الدالة، والملف لازم ينتهي اسمه بـ webhook وإلا يبقى خاصاً | التحقق من التوقيع مفروض من المنصة، والدالة تستقبل الجسم الخام والترويسات وتعيد رمز الحالة والجسم | شركة الشحن تحدّث حالة الشحنة، فتتحدث حالة الطلب في موقعك تلقائياً |
أسئلة شائعة
اقرأ أيضاً
خلّ القرار يصير عندك، مو عند متصفح الزائر
اشرح القاعدة بالعربي — التسعير، التحقق، الربط بمزوّد خارجي — وابني يكتب الدالة ويجرّبها ويشغّلها قبل ما يسلّمك.
ابدأ مجاناً