استخدام ميزة "الإعداد عن بُعد" من جهة الخادم مع وظائف السحابة الإلكترونية وVertex AI

يشرح هذا الدليل كيفية بدء استخدام الجيل الثاني من وظائف Cloud مع الإعداد عن بُعد من جهة الخادم لإجراء استدعاءات من جهة الخادم لواجهة Vertex AI Gemini API.

في هذا الدليل التعليمي، عليك إضافة ميزة "الإعداد عن بُعد" إلى وظيفة تشبه روبوت الدردشة التي تستخدم نموذج Gemini للإجابة عن أسئلة المستخدمين. ستدير ميزة "الإعداد عن بُعد" إدخالات Gemini API (بما في ذلك الطلب الذي ستضيفه إلى طلبات بحث المستخدمين الواردة)، ويمكنك تعديل هذه الإدخالات عند الطلب من وحدة تحكُّم Firebase. وستستخدم أيضًا حزمة المحاكي المحلي في Firebase لاختبار الدالة وتصحيح أخطائها، وبعد التحقق من عملها، ستتمكّن من نشرها واختبارها على Google Cloud.

المتطلّبات الأساسية

يفترض هذا الدليل أنّك على دراية باستخدام JavaScript لتطوير التطبيقات.

إعداد مشروع Firebase

إذا لم يكن لديك مشروع على Firebase من قبل:

  1. سجِّل الدخول إلى وحدة تحكُّم Firebase.

  2. انقر على إنشاء مشروع، ثم استخدِم أيًا من الخيارَين التاليَين:

    • الخيار 1: يمكنك إنشاء مشروع جديد في Firebase (ومشروعه الأساسي على Google Cloud تلقائيًا) عن طريق إدخال اسم مشروع جديد في الخطوة الأولى من سير عمل "إنشاء مشروع".
    • الخيار 2: "إضافة Firebase" إلى مشروع حالي على Google Cloud من خلال اختيار اسم مشروعك على Google Cloud من القائمة المنسدلة في الخطوة الأولى من سير عمل "إنشاء مشروع".
  3. ليس عليك إعداد "إحصاءات Google" عندما يُطلب منك ذلك من أجل استخدام هذا الحلّ.

  4. تابع التعليمات الظاهرة على الشاشة لإنشاء مشروعك.

إذا كان لديك مشروع على Firebase من قبل:

انتقِل إلى إعداد بيئة التطوير.

ضبط بيئة التطوير

ستحتاج إلى بيئة Node.js لكتابة الدوال، وستحتاج إلى واجهة سطر الأوامر في Firebase لنشر الوظائف في وقت تشغيل الوظائف السحابية.

  1. ثبِّت Node.js وnpm.

    لتثبيت Node.js وnpm، ننصحك باستخدام مدير إصدارات عقدة.

  2. ثبِّت واجهة سطر الأوامر لمنصّة Firebase باستخدام طريقتك المفضّلة. على سبيل المثال، لتثبيت واجهة سطر الأوامر باستخدام npm، قم بتشغيل هذا الأمر:

    npm install -g firebase-tools@latest
    

    يثبّت هذا الأمر الأمر firebase المتاح عالميًا. إذا لم ينجح هذا الأمر، قد تحتاج إلى تغيير أذونات npm.

    للتحديث إلى آخر إصدار من firebase-tools، أعِد تشغيل الأمر نفسه.

  3. ثبِّت firebase-functions وfirebase-admin واستخدِم --save لحفظهما في package.json:

    npm install firebase-functions@latest firebase-admin@latest --save
    

أنت الآن جاهز للمتابعة إلى تنفيذ هذا الحل.

التنفيذ

اتّبِع الخطوات التالية لإنشاء الجيل الثاني من دوال Cloud واختبارها ونشرها باستخدام "الإعداد عن بُعد" وVertex AI:

  1. تفعيل واجهات برمجة التطبيقات المقترَحة من Vertex AI في Google Cloud Console
  2. إعداد مشروعك وتثبيت تبعيات العُقد
  3. اضبط أذونات "إدارة الهوية وإمكانية الوصول" لحساب خدمة "SDK للمشرف" واحفظ مفتاحك.
  4. أنشئ الدالة.
  5. إنشاء نموذج "الإعداد عن بُعد" الخاص بالخادم
  6. انشر الدالة واختبِرها في مجموعة أدوات المحاكاة المحلية من Firebase.
  7. نشر الدالة في Google Cloud.

الخطوة 1: تفعيل واجهات برمجة التطبيقات المقترَحة من Vertex AI في Google Cloud Console

  1. افتح Google Cloud Console واختَر مشروعك عندما يُطلب منك ذلك.
  2. في الحقل Search في أعلى وحدة التحكّم، أدخِل Vertex AI وانتظِر إلى أن تظهر نتيجة لذلك Vertex AI.
  3. اختَر Vertex AI. تظهر لوحة بيانات Vertex AI.
  4. انقر على تفعيل جميع واجهات برمجة التطبيقات المقترَحة.

    قد يستغرق تفعيل واجهة برمجة التطبيقات بضع لحظات. أبقِ الصفحة نشطة ومفتوحة حتى ينتهي التفعيل.

  5. إذا لم يتم تفعيل الفوترة، سيُطلب منك إضافة حساب فوترة Cloud أو ربطه. بعد تفعيل حساب الفوترة، ارجع إلى لوحة بيانات Vertex AI وتأكَّد من تفعيل جميع واجهات برمجة التطبيقات المقترَحة.

الخطوة 2: إعداد مشروعك وتثبيت تبعيات العُقد

  1. افتح نافذة طرفية على جهاز الكمبيوتر وانتقل إلى الدليل الذي تخطط لإنشاء الدالة فيه.
  2. تسجيل الدخول إلى Firebase:

    firebase login
    
  3. شغِّل الأمر التالي لإعداد دوال السحابة الإلكترونية لبرنامج Firebase:

    firebase init functions
    
  4. اختَر استخدام مشروع حالي وحدِّد رقم تعريف مشروعك.

  5. عندما يُطلب منك تحديد اللغة المراد استخدامها، اختَر JavaScript ثم اضغط على Enter.

  6. بالنسبة إلى جميع الخيارات الأخرى، حدِّد الإعدادات التلقائية.

    يتم إنشاء دليل functions في الدليل الحالي. ستجد في الداخل ملف index.js ستستخدمه لإنشاء الدوال، ودليل node_modules يحتوي على التبعيات الخاصة بدالتك، وملف package.json يحتوي على تبعيات الحزمة.

  7. أضِف حزمتَي SDK للمشرف وVertex AI من خلال تنفيذ الأوامر التالية، باستخدام --save لضمان حفظه في ملف package.json:

    cd functions
    npm install firebase-admin@latest @google-cloud/vertexai --save
    

يُفترض أن يظهر ملف functions/package.json الآن على النحو التالي، مع أحدث الإصدارات المحددة:

  {
    "name": "functions",
    "description": "Cloud Functions for Firebase",
    "scripts": {
      "serve": "firebase emulators:start --only functions",
      "shell": "firebase functions:shell",
      "start": "npm run shell",
      "deploy": "firebase deploy --only functions",
      "logs": "firebase functions:log"
    },
    "engines": {
      "node": "20"
    },
    "main": "index.js",
    "dependencies": {
      "@google-cloud/vertexai": "^1.1.0",
      "firebase-admin": "^12.1.0",
      "firebase-functions": "^5.0.0"
    },
    "devDependencies": {
      "firebase-functions-test": "^3.1.0"
    },
    "private": true
  }

لاحظ أنه في حالة استخدام ESLint، سيظهر لك رمز stanza يتضمنه. إضافةً إلى ذلك، تأكّد من أنّ إصدار محرّك العُقدة يتطابق مع الإصدار المثبَّت من Node.js والإصدار الذي يتم تشغيله في النهاية على Google Cloud. على سبيل المثال، إذا تم ضبط علامة engines في package.json على أنّها الإصدار 18 من العقدة وكنت تستخدم الإصدار 20 من Node.js، يجب تعديل الملف لاستخدام 20:

  "engines": {
    "node": "20"
  },

الخطوة 3: ضبط أذونات "إدارة الهوية وإمكانية الوصول" لحساب خدمة "SDK للمشرف" وحفظ مفتاحك

في هذا الحل، ستستخدم حساب خدمة "SDK لمشرف Firebase" لتشغيل الدالة.

  1. في Google Cloud Console، افتح صفحة إدارة الهوية وإمكانية الوصول والمشرف، وابحث عن حساب خدمة "SDK للمشرف" (المسمى firebase-adminsdk).
  2. اختَر الحساب وانقر على تعديل الحساب الرئيسي. تظهر صفحة "تعديل الوصول".
  3. انقر على إضافة دور آخر، ثم على عارِض الإعدادات عن بُعد.
  4. انقر على إضافة دور آخر، ثم على مطوِّر منصة الذكاء الاصطناعي.
  5. انقر على إضافة دور آخر، ثم اختَر مستخدم Vertex AI.
  6. انقر على إضافة دور آخر، ثم على مرسل تشغيل السحابة الإلكترونية.
  7. انقر على حفظ.

بعد ذلك، عليك تصدير بيانات الاعتماد لحساب خدمة "SDK للمشرف" وحفظها في متغيّر بيئة GOOGLE_APPLICATION_CREDENTIALS.

  1. في وحدة تحكُّم Google Cloud، افتح صفحة بيانات الاعتماد.
  2. انقر على حساب خدمة SDK للمشرف لفتح صفحة التفاصيل.
  3. انقر على المفاتيح.
  4. انقر على إضافة مفتاح > إنشاء مفتاح جديد.
  5. تأكَّد من اختيار JSON كنوع المفتاح، ثم انقر على إنشاء.
  6. نزِّل المفتاح في مكان آمن على جهاز الكمبيوتر.
  7. من الوحدة الطرفية، يمكنك تصدير المفتاح كمتغيّر بيئة:

    export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
    

الخطوة 4: إنشاء الدالة

في هذه الخطوة، ستنشئ دالة تعالج إدخالات المستخدم وتنشئ ردودًا مستندة إلى الذكاء الاصطناعي (AI). عليك دمج مقتطفات رموز متعدّدة لإنشاء وظيفة شاملة تعمل على إعداد "SDK للمشرف" وVertex AI Gemini API، وتضبط المَعلمات التلقائية باستخدام ميزة "الإعداد عن بُعد"، وتسترجع أحدث مَعلمات "الإعداد عن بُعد"، وتعالج البيانات التي أدخلها المستخدم، وتبثّ الردود التي يرسلها المستخدم.

  1. في قاعدة الرموز، افتح functions/index.js في محرِّر نصوص أو بيئة تطوير متكاملة (IDE).
  2. احذف المحتوى الحالي ثم أضِف حزمة تطوير البرامج (SDK) للمشرف وميزة "الإعداد عن بُعد" وحزمة تطوير برامج Vertex AI وإعداد التطبيق من خلال لصق الرمز التالي في الملف:

    const { onRequest } = require("firebase-functions/v2/https");
    const logger = require("firebase-functions/logger");
    
    const { initializeApp } = require("firebase-admin/app");
    const { VertexAI } = require('@google-cloud/vertexai');
    const { getRemoteConfig } = require("firebase-admin/remote-config");
    
    // Set and check environment variables.
    const project = process.env.GCLOUD_PROJECT;
    
    // Initialize Firebase.
    const app = initializeApp();
    
  3. يمكنك ضبط القيم التلقائية التي ستستخدمها وظيفتك في حال تعذّر الاتصال بخادم "الإعداد عن بُعد". يساعد هذا الحلّ على ضبط textModel وgenerationConfig وsafetySettings وtextPrompt وlocation كمَعلمات "الإعداد عن بُعد" تتوافق مع مَعلمات "الإعداد عن بُعد" التي سيتم تعديلها أكثر في هذا الدليل. لمزيد من المعلومات عن هذه المَعلمات، يمكنك الاطّلاع على عميل Vertex AI Node.js.

    يمكنك أيضًا ضبط مَعلمة للتحكّم في إمكانية وصولك إلى Vertex AI Gemini API (في هذا المثال، مَعلمة باسم vertex_enabled). يمكن أن يكون هذا الإعداد مفيدًا عند اختبار وظيفتك. في مقتطفات الرمز التالية، يتم ضبط هذه القيمة على false، وسيتم تخطّيها عند استخدام Vertex AI أثناء اختبار نشر الوظائف الأساسية. عند ضبطها على true، سيتم استدعاء Vertex AI Gemini API.

    // Define default (fallback) parameter values for Remote Config.
    const defaultConfig = {
    
      // Default values for Vertex AI.
      model_name: "gemini-1.5-flash-preview-0514",
      generation_config: [{
        "stopSequences": [], "temperature": 0.7,
        "maxOutputTokens": 64, "topP": 0.1, "topK": 20
      }],
      prompt: "I'm a developer who wants to learn about Firebase and you are a \
        helpful assistant who knows everything there is to know about Firebase!",
      safety_settings: [{
        "category":
          "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT",
        "threshold": "HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE"
      }],
      location: 'us-central1',
    
      // Disable Vertex AI Gemini API access for testing.
      vertex_enabled: false
    };
    
  4. يمكنك إنشاء الدالة وإعداد الإعداد عن بُعد من جهة الخادم:

    // Export the function.
    exports.generateWithVertex = onRequest(async (request, response) => {
    
      try {
    
        // Set up Remote Config.
        const rc = getRemoteConfig(app);
    
        // Get the Remote Config template and assign default values.
        const template = await rc.getServerTemplate({
          defaultConfig: defaultConfig
        });
    
        // Add the template evaluation to a constant.
        const config = template.evaluate();
    
        // Obtain values from Remote Config.
        const textModel = config.getString("model_name") ||
            defaultConfig.model_name;
        const textPrompt = config.getString("prompt") || defaultConfig.prompt;
        const generationConfig = config.getString("generation_config") ||
            defaultConfig.generation_config;
        const safetySettings = config.getString("safety_settings") ||
            defaultConfig.safety_settings;
        const location = config.getString("location") ||
            defaultConfig.location;
        const vertexEnabled = config.getBoolean("is_vertex_enabled") ||
            defaultConfig.vertex_enabled;
    
  5. عليك إعداد Vertex AI وإضافة منطق المحادثة والردّ:

      // Allow user input.
      const userInput = request.query.prompt || '';
    
      // Instantiate Vertex AI.
        const vertex_ai = new VertexAI({ project: project, location: location });
        const generativeModel = vertex_ai.getGenerativeModel({
          model: textModel,
          safety_settings: safetySettings,
          generation_config: generationConfig,
        });
    
        // Create the chat; append user input to Remote Config-defined prompt.
        const chat = generativeModel.startChat();
        const chatInput = textPrompt + " " + userInput;
    
        if (!chatInput) {
          return res.status(400).send('Missing text prompt');
        }
        // If vertexEnabled isn't true, do not send queries to Vertex AI.
        if (vertexEnabled !== true) {
          response.status(200).send({
            message: "Vertex AI call skipped. Vertex is not enabled."
          });
          return;
        }
    
        console.log("\nRunning with model ", textModel, ", prompt: ", textPrompt,
          ", generationConfig: ", generationConfig, ", safetySettings: ",
          safetySettings, " in ", location, "\n");
    
        const result = await chat.sendMessageStream(chatInput);
        response.writeHead(200, { 'Content-Type': 'text/plain' });
    
        for await (const item of result.stream) {
          const chunk = item.candidates[0].content.parts[0].text;
          console.log("Received chunk:", chunk);
          response.write(chunk);
        }
    
        response.end();
    
      } catch (error) {
        console.error(error);
        response.status(500).send('Internal server error');
      }
    });
    
  6. احفظ الملف وأغلقه.

الخطوة 5: إنشاء نموذج "الإعداد عن بُعد" الخاص بالخادم

بعد ذلك، يمكنك إنشاء نموذج "الإعداد عن بُعد" من جهة الخادم وضبط المعلمات والقيم لاستخدامها في الدالة. لإنشاء نموذج "الإعداد عن بُعد" خاص بالخادم:

  1. افتح "وحدة تحكُّم Firebase"، ثم وسِّع تشغيل من قائمة التنقّل وانقر على الإعداد عن بُعد.
  2. اختَر الخادم من أداة اختيار العميل/الخادم أعلى صفحة "الإعداد عن بُعد".

    • إذا كانت هذه هي المرة الأولى التي تستخدم فيها ميزة "الإعداد عن بُعد" أو نماذج الخادم، انقر على إنشاء إعدادات. سيظهر جزء إنشاء معلمة جانب الخادم الأولى.
    • إذا لم تكن هذه هي المرة الأولى التي تستخدم فيها نماذج خادم "الإعداد عن بُعد"، انقر على إضافة مَعلمة.
  3. حدِّد مَعلمات "الإعداد عن بُعد" التالية:

    اسم المَعلمة الوصف النوع القيمة التلقائية
    model_name اسم النموذج
    للحصول على أحدث القوائم لأسماء النماذج لاستخدامها في الرمز الخاص بك، راجِع إصدارات النماذج ومراحل نشاطها أو أسماء الطُرز المتاحة.
    String gemini-1.5-pro-preview-0514
    prompt طلب الإضافة إلى طلب بحث المستخدم String I'm a developer who wants to learn about Firebase and you are a helpful assistant who knows everything there is to know about Firebase!
    generation_config المعلَمات المراد إرسالها إلى النموذج. JSON [{"stopSequences": ["I hope this helps"],"temperature": 0.7,"maxOutputTokens": 512, "topP": 0.1,"topK": 20}]
    safety_settings إعدادات الأمان في Vertex AI JSON [{"category": "HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "HarmBlockThreshold.BLOCK_LOW_AND_ABOVE"}]
    location الموقع الجغرافي لتشغيل خدمة Vertex AI وطرازها String us-central1
    is_vertex_enabled مَعلمة اختيارية تتحكّم في ما إذا كان سيتم إرسال طلبات البحث إلى Vertex AI. منطقي true
  4. عند الانتهاء من إضافة المعلمات، تحقق مرة أخرى من المعلمات وأن أنواع بياناتها صحيحة، ثم انقر على نشر التغييرات.

الخطوة 6: نشر الدالة واختبارها في "مجموعة أدوات المحاكاة المحلية من Firebase"

أصبحت الآن جاهزًا لنشر الدالة واختبارها محليًا باستخدام "مجموعة أدوات المحاكاة المحلية من Firebase".

  1. تأكَّد من ضبط GOOGLE_APPLICATION_CREDENTIALS كمتغيّر بيئة كما هو موضّح في الخطوة 3: ضبط أذونات "إدارة الهوية وإمكانية الوصول" لحساب خدمة "SDK للمشرف" وحفظ المفتاح. بعد ذلك، يمكنك نشر الدالة إلى محاكي Firebase من الدليل الرئيسي لدليل functions:

    firebase emulators:start --project PROJECT_ID --only functions
    
  2. افتح صفحة سجلات المحاكي. يُفترض أن يشير هذا إلى أنه تم تحميل الدالة.

  3. يمكنك الوصول إلى الدالة من خلال تنفيذ الأمر التالي، حيث يشير PROJECT_ID إلى رقم تعريف المشروع وLOCATION هو المنطقة التي نشرت الدالة فيها (على سبيل المثال، us-central1):

    curl http://127.0.0.1:5001/PROJECT_ID/LOCATION/generateWithVertex
    
  4. انتظِر تلقّي رد، ثم ارجع إلى صفحة سجلات "محاكي Firebase" أو إلى وحدة التحكّم، وابحث عن أي أخطاء أو تحذيرات.

  5. يُرجى محاولة إرسال بعض المعلومات من المستخدم. وبما أنّه تم ضبط is_vertex_enabled في نموذج خادم "الإعداد عن بُعد"، من المفترض أن يصل ذلك إلى Gemini من خلال Vertex AI Gemini API، ما قد يؤدي إلى تحصيل رسوم:

    curl http://127.0.0.1:5001/PROJECT_ID/LOCATION/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20cats
    
  6. يمكنك إجراء تغييرات على نموذج خادم "الإعداد عن بُعد" في وحدة تحكُّم Firebase، ثم إعادة الوصول إلى الدالة لملاحظة التغييرات.

الخطوة 7: نشر الدالة في Google Cloud

بعد اختبار الدالة والتحقق منها، يمكنك النشر على Google Cloud واختبار الدالة المباشرة.

نشر الدالة

انشر الدالة باستخدام واجهة سطر الأوامر لمنصّة Firebase:

firebase deploy --only functions

حظر الوصول الذي لم تتم مصادقته إلى الدالة

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

لحظر الوصول الذي لم تتم مصادقته إلى الدالة:

  1. في وحدة تحكُّم Google Cloud، افتح تشغيل Cloud.

  2. انقر على generateWithVertex، ثم انقر على علامة التبويب الأمان.

  3. فعِّل طلب المصادقة، ثم انقر على حفظ.

اضبط حساب المستخدم لاستخدام بيانات اعتماد حساب خدمة "SDK للمشرف".

ننصحك باستخدام حساب خدمة "SDK للمشرف" لتنفيذ جميع الأدوار والأذونات اللازمة لتشغيل الوظيفة والتفاعل مع ميزة "الإعداد عن بُعد" وVertex AI Gemini API، لذا ننصحك باستخدامه لتشغيل وظائفك. للقيام بذلك، يجب أن تكون قادرًا على إنشاء رموز مميزة للحساب من حساب المستخدم الخاص بك.

توضِّح الخطوات التالية كيفية ضبط حساب المستخدِم والوظيفة للعمل باستخدام امتيازات حساب خدمة "SDK للمشرف".

  1. في Google Cloud Console، فعِّل واجهة IAM Service Account Credentials API.
  2. منح حساب المستخدم دور منشئ الرمز المميّز لحساب الخدمة: من وحدة تحكُّم Google Cloud، افتح إدارة الهوية وإمكانية الوصول والمشرف > إدارة الهوية وإمكانية الوصول واختَر حساب المستخدم، ثم انقر على تعديل المدير > إضافة دور آخر.
  3. اختَر منشئ الرمز المميّز لحساب الخدمة، ثم انقر على حفظ.

    للحصول على معلومات أكثر تفصيلاً حول انتحال هوية حساب الخدمة، راجِع مقالة انتحال هوية حساب الخدمة في مستندات Google Cloud.

  4. افتح صفحة "وظائف السحابة الإلكترونية في Google Cloud" وانقر على الدالة generateWithVertex في قائمة الدوال.

  5. اختَر مشغّل > تعديل ووسِّع وقت التشغيل والإنشاء والاتصالات وإعدادات الأمان.

  6. من علامة التبويب وقت التشغيل، غيِّر حساب خدمة وقت التشغيل إلى حساب SDK للمشرف.

  7. انقر على التالي، ثم على نشر.

إعداد واجهة سطر الأوامر في gcloud

لتشغيل الدالة واختبارها بأمان من سطر الأوامر، عليك المصادقة باستخدام خدمة Cloud Functions والحصول على رمز مميّز صالح للمصادقة.

لتفعيل إنشاء الرموز المميّزة، يجب تثبيت واجهة سطر الأوامر gcloud وإعدادها:

  1. ثبِّت gcloud CLI إذا لم يكن مثبّتًا على جهاز الكمبيوتر، كما هو موضَّح في Install the gcloud CLI.

  2. الحصول على بيانات اعتماد الوصول لحسابك على Google Cloud:

    gcloud auth login
    
  3. ضبط رقم تعريف مشروعك في gcloud:

    gcloud config set project PROJECT_ID
    

اختبار الدالة

أنت الآن جاهز لاختبار الدالة في Google Cloud. لاختبار الدالة، شغِّل الأمر التالي:

curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex \
  -H "Authorization: bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json"

يُرجى إعادة المحاولة باستخدام البيانات التي يوفّرها المستخدم:

curl -X POST https://LOCATION-PROJECT_ID.cloudfunctions.net/generateWithVertex?prompt=Tell%20me%20everything%20you%20know%20about%20dogs \
 -H "Authorization: bearer $(gcloud auth print-identity-token)" \
 -H "Content-Type: application/json"

يمكنك الآن إجراء تغييرات على نموذج خادم "الإعداد عن بُعد" ونشر هذه التغييرات واختبار خيارات مختلفة.

الخطوات اللاحقة