إنشاء المشغلات وعمليات الربط

مكتمل

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

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

يمكنك خلط ومطابقة الارتباطات المختلفة لتناسب احتياجاتك. تُعد الروابط أمراً اختيارياً وقد تحتوي الدالة على رابط إدخال/إخراج واحد أو عدة روابط.

وتساعدك المشغلات والارتباطات على تجنب وصول التشفير الثابت إلى خدمات أخرى. تتلقى الوظيفة البيانات (على سبيل المثال، محتوى رسالة قائمة انتظار) في مقاييس الوظيفة. إرسال البيانات (على سبيل المثال، لإنشاء رسالة قائمة انتظار) باستخدام قيمة الإرجاع للوظيفة.

تعريفات المشغل والربط

التعرف على المشغلات والروابط بشكل مختلف اعتمادًا على لغة التطوير.

اللغة تُكون المشغلات والروابط بواسطة...
C#‎ مكتبة الفئات تزيين الأساليب والمعلمات مع سمات C#‎
Java تزيين الأساليب والمعلمات مع التعليقات التوضيحية Java
JavaScript/PowerShell/Python/TypeScript تحديث مخطط function.json

يوفر المدخل اللغات التي تعتمد على function.json واجهة مستخدم لإضافة روابط في علامة التبويب تكامل. يمكنك أيضا تحرير الملف مباشرة في المدخل في علامة التبويب تعليمة برمجية + اختبار الوظيفة الخاصة بك.

يعرف نوع المعلمة في .NET و Java نوع بيانات الإدخال. على سبيل المثال، استخدم string لربط نص مشغل قائمة انتظار وصف بايت للقراءة كثنائي ونوع مخصص لإلغاء التسلسل إلى موضوع. نظرًا لأن وظائف مكتبة فئات .NET ودوال Java لا تعتمد على function.json لتعريفات الربط فلا يمكن إنشاؤها وتحريرها في المدخل. يعتمد تحرير المدخل C# على برنامج نصي C# يستخدم function.js بدلًا من السمات.

بالنسبة للغات التي تكتب ديناميكيا مثل JavaScript، استخدم dataType الخاصية في ملف function.js. على سبيل المثال، لقراءة محتوى طلب HTTP بتنسيق ثنائي عين dataTypeإلىbinary:

{
    "dataType": "binary",
    "type": "httpTrigger",
    "name": "req",
    "direction": "in"
}

خيارات أخرى dataType يكون stream و string.

اتجاه الربط

لدى كافة المشغلات والروابط خاصية الاتجاه في ملف function.json:

  • بالنسبة للمشغلات، يكون الاتجاه دائما in
  • تستخدم روابط الإدخال والإخراج in و out
  • تدعم بعض الارتباطات اتجاه خاص inout. إذا كنت تستخدم inout فإن المحرر المتقدم فقط هو المتوفر عبر علامة التبويب دمج في المدخل.

عند استخدام سمات في مكتبة الفئات لتكوين المشغلات والروابط يتم توفير الاتجاه في منشئ سمة أو استدلال من نوع المعلمة.

مشغل Azure Functions ومثال الربط

لنفترض أنك تريد كتابة صف جديد لموقع تخزين Azure Table كلما ظهرت رسالة جديدة في Azure Queue Storage. يمكن تنفيذ هذا السيناريو باستخدام مشغّل موقع تخزين Azure Queue Storage وربط إخراج موقع تخزين Azure Table.

هنا ملف function.json لهذا السيناريو.

{
  "bindings": [
    {
      "type": "queueTrigger",
      "direction": "in",
      "name": "order",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "type": "table",
      "direction": "out",
      "name": "$return",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

العنصر الأول في bindings الصفيف هو مشغل قائمة انتظار موقع التخزين. تعرف خصائص type و direction المشغل. تعرف الخاصية name معلمة الوظيفة التي تتلقى محتوى رسالة قائمة الانتظار. اسم قائمة الانتظار لمراقبة في queueName وسلسلة الاتصال في إعداد التطبيق الذي عرف من قبل connection.

العنصر الثاني في صفيف bindings هو ربط إخراج موقع تخزين Azure. تعرف خصائص type و direction الربط. تحدد الخاصية name كيف توفر الدالة صف الجدول الجديد في هذه الحالة باستخدام قيمة إرجاع الدالة. اسم الجدول في tableName وسلسلة الاتصال في إعداد التطبيق المعرف من قبل connection.

مثال البرنامج النصي C#‎

هنا التعليمة البرمجية للبرنامج النصي C# الذي يعمل مع هذا المشغل والربط. لاحظ أن اسم المعلمة التي توفر محتوى رسالة قائمة الانتظار order؛ هذا الاسم مطلوب لأن name قيمة الخاصية في function.json هي order.

#r "Newtonsoft.Json"

using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;

// From an incoming queue message that is a JSON object, add fields and write to Table storage
// The method return value creates a new row in Table Storage
public static Person Run(JObject order, ILogger log)
{
    return new Person() { 
            PartitionKey = "Orders", 
            RowKey = Guid.NewGuid().ToString(),  
            Name = order["Name"].ToString(),
            MobileNumber = order["MobileNumber"].ToString() };  
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

مثال JavaScript

يمكن استخدام نفس ملف function.json مع وظيفة JavaScript :

// From an incoming queue message that is a JSON object, add fields and write to Table Storage
module.exports = async function (context, order) {
    order.PartitionKey = "Orders";
    order.RowKey = generateRandomId(); 

    context.bindings.order = order;
};

function generateRandomId() {
    return Math.random().toString(36).substring(2, 15) +
        Math.random().toString(36).substring(2, 15);
}

مثال مكتبة الفئات

توفر نفس المعلومات في مكتبة الفئات للمشغل والربط — أسماء قوائم الانتظار والجداول وحسابات التخزين ومعلمات الوظائف للإدخال والإخراج — بواسطة السمات بدلًا من ملف function.json. إليك مثال:

public static class QueueTriggerTableOutput
{
    [FunctionName("QueueTriggerTableOutput")]
    [return: Table("outTable", Connection = "MY_TABLE_STORAGE_ACCT_APP_SETTING")]
    public static Person Run(
        [QueueTrigger("myqueue-items", Connection = "MY_STORAGE_ACCT_APP_SETTING")]JObject order,
        ILogger log)
    {
        return new Person() {
                PartitionKey = "Orders",
                RowKey = Guid.NewGuid().ToString(),
                Name = order["Name"].ToString(),
                MobileNumber = order["MobileNumber"].ToString() };
    }
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

الموارد الإضافية

للحصول على أمثلة أكثر تفصيلًا عن المشغلات والروابط يرجى زيارة: