كيفية نشر دوال سحابية ديناميكية في React وReact Native باستخدام Easybase

دقائق القراءة: 6

مقدمة إلى الدوال السحابية في تطبيقات الواجهة الحديثة

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

وعلى عكس الدوال التقليدية التي تُكتب داخل المشروع وتُشحن مع الواجهة الأمامية، يتم تخزين الدوال السحابية داخل بنية سحابية يديرها مزود الخدمة. وهذا يمنحك مزايا مهمة مثل:

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

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

توضيح لمفهوم الدوال السحابية الديناميكية وربطها بتطبيقات React وReact Native

إعداد مشروع React أو React Native من البداية

سنبدأ بإنشاء مشروع جديد. أسهل طريقة هي استخدام الأداة npx، والتي تأتي عادةً مع تثبيت Node.js.

إنشاء مشروع React

npx create-react-app my-cloud-app

إنشاء مشروع React Native

npx create-react-native-app

بعد انتهاء التثبيت، انتقل إلى مجلد المشروع ثم شغّل التطبيق:

npm run start

هذا سيمنحك مشروعاً أولياً جاهزاً للبدء في التطوير.

واجهة مشروع React جديد بعد الإنشاء الأولي باستخدام create-react-app

بناء واجهة تجريبية لجلب سعر عملة رقمية

سننشئ مثالاً بسيطاً: واجهة تسمح للمستخدم بإدخال رمز عملة رقمية مثل BTC أو ETH، ثم يتم استدعاء دالة سحابية تعيد السعر الحالي بالدولار الأمريكي.

افتح الملف src/App.js واحذف المحتوى الموجود داخل العنصر الجذري المناسب، ثم أضف العناصر التالية:

  • حقل إدخال نصي.
  • نص يوجه المستخدم لإدخال رمز العملة.
  • زر لتنفيذ الطلب.
  • نص لعرض النتيجة لاحقاً.

يمكن أن تصبح الدالة App() بالشكل التالي:

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <p>Enter Cryptocurrency symbol:</p>
        <input placeholder="BTC, ETH, etc." type="text" />
        <button>Go</button>
        <p>Result:</p>
      </header>
    </div>
  );
}

بعد حفظ الملف، ستظهر لك واجهة بسيطة تحتوي على حقل الإدخال والزر.

واجهة تطبيق React بعد إضافة حقل إدخال زر وموضع عرض النتيجة

إضافة الحالة التفاعلية باستخدام React

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

في البداية، يمكن أن تكتفي هذه الدالة بطباعة القيمة المُدخلة داخل وحدة التحكم:

import { useState } from 'react';
import './App.css';

function App() {
  const [inputVal, setInputVal] = useState("");

  async function buttonCallback() {
    console.log(inputVal);
  }

  return (
    <div className="App">
      <header className="App-header">
        <p>Enter Cryptocurrency symbol:</p>
        <input
          placeholder="BTC, ETH, etc."
          type="text"
          value={inputVal}
          onChange={e => setInputVal(e.target.value)}
        />
        <button onClick={buttonCallback}>Go</button>
        <p>Result:</p>
      </header>
    </div>
  );
}

export default App;

كيفية نشر الدالة السحابية عبر Easybase

بعد تجهيز الواجهة، حان وقت إنشاء الدالة السحابية نفسها. أنشئ حساباً مجانياً في منصة Easybase، ثم اضغط على زر + في أسفل الواجهة.

واجهة منصة Easybase عند بدء إنشاء دالة سحابية جديدة

اختر قالب Hello World وأكمل الخطوات. سيؤدي ذلك إلى إنشاء دالة أولية تعيد قيمة message القادمة من جسم الطلب.

توفّر المنصة محرر أكواد مدمجاً من نوع Monaco، ما يسمح لك بتعديل الدالة مباشرة من داخل المتصفح.

إضافة مكتبة لاستدعاء واجهة برمجية خارجية

سنحتاج إلى مكتبة لإرسال طلبات HTTP إلى خدمة خارجية. افتح ملف package.json وأضف الحزمة cross-fetch بالإصدار المناسب. عند حفظ الدالة، ستقوم المنصة بتثبيت الحزمة تلقائياً.

ملف package.json داخل Easybase بعد إضافة مكتبة cross-fetch

بعد ذلك، افتح الملف handler.js وأضف السطر التالي في أعلاه:

var fetch = require('cross-fetch');

قراءة رمز العملة من جسم الطلب

عند استدعاء الدالة من الواجهة الأمامية، سنمرر كائناً يحتوي على المفتاح cryptoSymbol. داخل الدالة، يمكن الوصول إلى هذه القيمة عبر event.body:

const cryptoSymbol = event.body.cryptoSymbol;

إنشاء رابط الطلب إلى واجهة الأسعار

سنستخدم واجهة Cryptonator API للحصول على السعر الحالي. نمط الرابط يكون كالتالي:

https://api.cryptonator.com/api/ticker/PAIR_NAME

حيث يتم استبدال PAIR_NAME بالقيمة المناسبة مثل btc-usd أو eth-usd. وبما أننا نريد السعر بالدولار، سنضيف اللاحقة -usd إلى رمز العملة.

const nexchangeUrl = `https://api.cryptonator.com/api/ticker/${cryptoSymbol}-usd`;

الكود الكامل للدالة السحابية

فيما يلي قالب عملي كامل للدالة:

var fetch = require('cross-fetch');

module.exports = async (event, context) => {
  const cryptoSymbol = event.body.cryptoSymbol;
  const nexchangeUrl = `https://api.cryptonator.com/api/ticker/${cryptoSymbol}-usd`;

  const res = await fetch(nexchangeUrl);
  const resJson = await res.json();

  if (resJson.success) {
    return context.succeed(resJson.ticker.price);
  } else {
    return context.fail("Symbol does not exist");
  }
};

تجدر الإشارة إلى أن context.succeed() وcontext.fail() تقومان بإرجاع النتيجة إلى العميل الذي استدعى الدالة.

زر حفظ الدالة السحابية داخل محرر Easybase بعد كتابة الكود

اختبار الدالة السحابية قبل ربطها بالتطبيق

بعد حفظ الدالة، يمكنك فتح قسم Deploy وتجربتها مباشرة. أرسل في جسم الطلب قيمة مثل:

{
  "cryptoSymbol": "BTC"
}

اختبار دالة سحابية في Easybase بإرسال cryptoSymbol داخل جسم الطلب

إذا ظهرت النتيجة بشكل صحيح، فهذا يعني أن الدالة تعمل كما ينبغي.

قد تلاحظ أن أول استدعاء يستغرق وقتاً أطول قليلاً، وهذا طبيعي بسبب ما يُعرف باسم cold start. يحدث ذلك عندما تكون الدالة غير مستخدمة منذ فترة، فيتم تحميلها من جديد عند أول طلب.

ربط التطبيق بمكتبة Easybase في React

انتقل الآن إلى مشروع React أو React Native وثبّت مكتبة easybase-react:

cd my-cloud-app
npm install easybase-react

بعد التثبيت، افتح الملف src/App.js واستورد الدالة callFunction:

import { callFunction } from 'easybase-react';

تستقبل هذه الدالة عادةً معاملين:

  1. مسار الدالة أو route، ويمكن الحصول عليه من قسم Deploy.
  2. كائن يمثل جسم الطلب، ويمكن قراءته داخل الدالة من خلال event.body.

مكان العثور على مسار الدالة السحابية Route داخل قسم Deploy في Easybase

استدعاء الدالة السحابية من الواجهة

يمكنك استخدام callFunction() بطريقتين: إما باستخدام await أو عبر then().

const result = await callFunction('YOUR-CUSTOM-ROUTE', {
  cryptoSymbol: 'BTC'
});
console.log(result);

// OR
callFunction('YOUR-CUSTOM-ROUTE', {
  cryptoSymbol: 'BTC'
}).then(result => console.log(result));

عرض النتيجة داخل واجهة المستخدم

لعرض السعر المسترجع، سنضيف حالة جديدة عبر useState لتخزين قيمة النتيجة داخل المتغير resultVal. ثم نُحدّثه داخل الدالة buttonCallback().

async function buttonCallback() {
  const result = await callFunction('YOUR-CUSTOM-ROUTE', {
    cryptoSymbol: inputVal
  });

  setResultVal(`${inputVal} currently costs $${result}`);
}

وسيتحول عنصر العرض إلى:

<p>Result: {resultVal}</p>

تطبيق React بعد ربطه بدالة سحابية وعرض سعر العملة الرقمية للمستخدم

الكود الكامل للتطبيق بعد الربط مع الدالة السحابية

فيما يلي نسخة مكتملة من التطبيق بعد ربطه مع Easybase:

import { useState } from 'react';
import './App.css';
import { callFunction } from 'easybase-react';

function App() {
  const [inputVal, setInputVal] = useState("");
  const [resultVal, setResultVal] = useState("");

  async function buttonCallback() {
    const result = await callFunction('YOUR-CUSTOM-ROUTE', {
      cryptoSymbol: inputVal
    });

    setResultVal(`${inputVal} currently costs $${result}`);
  }

  return (
    <div className="App">
      <header className="App-header">
        <p>Enter Cryptocurrency symbol:</p>
        <input
          placeholder="BTC, ETH, etc."
          type="text"
          value={inputVal}
          onChange={e => setInputVal(e.target.value)}
        />
        <button onClick={buttonCallback}>Go</button>
        <p>Result: {resultVal}</p>
      </header>
    </div>
  );
}

export default App;

مزايا هذا الأسلوب في بناء التطبيقات

الاعتماد على الدوال السحابية في تطبيقات React وReact Native يوفر عدداً من الفوائد العملية:

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

كما أن مكتبة easybase-react لا تقتصر على استدعاء الدوال فقط، بل يمكن استخدامها أيضاً في بعض المهام الأخرى مثل المصادقة وإدارة مكونات إضافية داخل التطبيق.

أفضل ممارسات لتحسين الجودة والاعتمادية

التحقق من صحة المدخلات

قبل إرسال رمز العملة إلى الدالة السحابية، يُفضّل تنظيف المدخلات والتأكد من أنها تتكون من أحرف متوقعة فقط، مثل تحويلها إلى أحرف كبيرة باستخدام toUpperCase().

إضافة معالجة للأخطاء

من الأفضل إحاطة استدعاء callFunction() بكتلة try...catch حتى يتم عرض رسالة واضحة للمستخدم إذا تعذر الوصول إلى الخدمة أو إذا كان الرمز غير صحيح.

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

يمكن إضافة حالة تحميل مثل loading لتعطيل الزر مؤقتاً أثناء تنفيذ الطلب، مع عرض رسالة مثل: جارٍ جلب السعر الآن.

مراعاة تغيّر الواجهات البرمجية

عند بناء تطبيق فعلي، تأكد من أن مزود الأسعار الذي تعتمد عليه مستقر وموثوق، لأن بعض الواجهات العامة قد تتغير أو تتوقف بمرور الوقت.

الخلاصة التقنية

يوضح هذا النهج كيف يمكن دمج React أو React Native مع الدوال السحابية لإنشاء تطبيقات أخف وأكثر مرونة، مع إبقاء المنطق البرمجي الحساس بعيداً عن الواجهة الأمامية. استخدام Easybase يسهّل عملية النشر والاختبار والاستدعاء، خاصة للمشاريع الصغيرة والمتوسطة أو النماذج الأولية السريعة. ومن الناحية التقنية، يُعد هذا الأسلوب خياراً عملياً لكل مطور يريد الاستفادة من بنية serverless دون تعقيد إداري كبير.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *