استدعاء التطبيقات المنطقية أو تشغيلها أو تداخلها باستخدام نقاط نهاية HTTPS في تطبيقات Azure Logic

لجعل تطبيقك المنطقي قابلا للاستدعاء من خلال عنوان URL وقادرا على تلقي الطلبات الواردة من خدمات أخرى، يمكنك في الأصل عرض نقطة نهاية HTTPS متزامنة باستخدام مشغل يستند إلى الطلب على تطبيقك المنطقي. باستخدام هذه القدرة، يمكنك استدعاء تطبيقك المنطقي من تطبيقات المنطق الأخرى وإنشاء نمط من نقاط النهاية القابلة للاستدعاء. لإعداد نقطة نهاية قابلة للاستدعاء للتعامل مع المكالمات الواردة، يمكنك استخدام أي من أنواع المشغلات التالية:

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

لمزيد من المعلومات حول الأمان والتخويل والتشفير للمكالمات الواردة إلى تطبيقك المنطقي، مثل أمان طبقة النقل (TLS)، المعروف سابقا باسم طبقة مآخذ التوصيل الآمنة (SSL)، أو مصادقة Azure Active Directory المفتوحة (Azure AD OAuth)، أو تعريض تطبيقك المنطقي باستخدام إدارة واجهة برمجة تطبيقات Azure، أو تقييد عناوين IP التي تنشأ عنها المكالمات الواردة، راجع الوصول الآمن والبيانات - الوصول للمكالمات الواردة إلى المشغلات المستندة إلى الطلب.

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

إنشاء نقطة نهاية قابلة للاستدعاء

  1. تسجيل الدخول إلى ⁧⁩مدخل Azure⁧⁩. قم بإنشاء تطبيق منطق فارغ وفتحه في مصمم تطبيق المنطق.

  2. ضمن مربع البحث، حدد مضمن. في مربع البحث، أدخل request كفلتر. من قائمة المشغلات، حدد عند استلام طلب HTTP.

    Find and select the Request trigger

  3. اختياريا، في المربع مخطط JSON لنص الطلب ، يمكنك إدخال مخطط JSON يصف الحمولة أو البيانات التي تتوقع أن يتلقاها المشغل.

    يستخدم المصمم هذا المخطط لإنشاء رموز مميزة تمثل مخرجات المشغل. يمكنك بعد ذلك الرجوع بسهولة إلى هذه المخرجات عبر سير عمل التطبيق المنطقي. تعرف على المزيد حول الرموز المميزة التي تم إنشاؤها من مخططات JSON.

    في هذا المثال، أدخل هذا المخطط:

       {
       "type": "object",
       "properties": {
          "address": {
             "type": "object",
             "properties": {
                "streetNumber": {
                   "type": "string"
                },
                "streetName": {
                   "type": "string"
                },
                "town": {
                   "type": "string"
                },
                "postalCode": {
                   "type": "string"
                }
             }
          }
       }
    }
    

    Provide JSON schema for the Request action

    أو يمكنك إنشاء مخطط JSON عن طريق توفير عينة من الحمولة:

    1. في مشغل الطلب ، حدد استخدام عينة الحمولة لإنشاء مخطط.

    2. في المربع إدخال عينة حمولة JSON أو لصقها ، أدخل حمولة العينة، على سبيل المثال:

      {
         "address": {
            "streetNumber": "00000",
            "streetName": "AnyStreet",
            "town": "AnyTown",
            "postalCode": "11111-1111"
        }
      }
      
    3. عندما تكون مستعدا، حدد تم.

      يعرض المربع مخطط JSON لنص الطلب الآن المخطط الذي تم إنشاؤه.

  4. حفظ تطبيق المنطق الخاص بك.

    يعرض مربع عنوان URL ل HTTP POST الآن عنوان URL لمعاودة الاتصال الذي تم إنشاؤه والذي يمكن للخدمات الأخرى استخدامه للاتصال بتطبيق LOGIC وتشغيله. يتضمن عنوان URL هذا معلمات الاستعلام التي تحدد مفتاح توقيع الوصول المشترك (SAS)، والذي يستخدم للمصادقة.

    Generated callback URL for endpoint

  5. لنسخ عنوان URL لمعاودة الاتصال، تتوفر لك الخيارات التالية:

    • على يسار المربع عنوان URL ل HTTP POST ، حدد نسخ عنوان URL (رمز نسخ الملفات).

    • قم بإجراء هذه المكالمة باستخدام الطريقة التي يتوقعها مشغل الطلب. يستخدم POST هذا المثال الطريقة:

      POST https://management.azure.com/{logic-app-resource-ID}/triggers/{endpoint-trigger-name}/listCallbackURL?api-version=2016-06-01

    • انسخ عنوان URL لمعاودة الاتصال من جزء " نظرة عامة" في تطبيقك المنطقي .

      1. في قائمة تطبيق المنطق، حدد نظرة عامة.

      2. في القسم ملخص ، حدد عرض محفوظات المشغلات.

        Get endpoint URL from Azure portal

      3. ضمن عنوان URL لمعاودة الاتصال [POST]، انسخ عنوان URL:

        Copy endpoint URL from Azure portal

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

بشكل افتراضي، يتوقع مشغل الطلب طلبا POST . ومع ذلك ، يمكنك تحديد طريقة مختلفة يجب على المتصل استخدامها ، ولكن طريقة واحدة فقط.

  1. في مشغل الطلب، افتح القائمة إضافة معلمات جديدة ، وحدد الأسلوب، الذي يضيف هذه الخاصية إلى المشغل.

    Add

  2. من القائمة الأسلوب ، حدد الطريقة التي يجب أن يتوقعها المشغل بدلا من ذلك. أو يمكنك تحديد طريقة مخصصة.

    على سبيل المثال، حدد طريقة GET بحيث يمكنك اختبار عنوان URL لنقطة النهاية لاحقا.

    Select request method expected by the trigger

تمرير المعلمات عبر عنوان URL لنقطة النهاية

عندما تريد قبول قيم المعلمات من خلال عنوان URL لنقطة النهاية، تتوفر لديك الخيارات التالية:

  • قبول القيم من خلال معلمات GET أو معلمات URL.

    يتم تمرير هذه القيم كأزواج من قيم الأسماء في عنوان URL لنقطة النهاية. بالنسبة لهذا الخيار، تحتاج إلى استخدام طريقة GET في مشغل الطلب. في إجراء لاحق، يمكنك الحصول على قيم المعلمات كمخرجات مشغل باستخدام الدالة triggerOutputs() في تعبير.

  • قبول القيم من خلال مسار نسبي للمعلمات في مشغل الطلب.

    يتم تمرير هذه القيم عبر مسار نسبي في عنوان URL لنقطة النهاية. تحتاج أيضا إلى تحديد الطريقة التي يتوقعها المشغل بشكل صريح. في إجراء لاحق، يمكنك الحصول على قيم المعلمات كمخرجات مشغل عن طريق الرجوع إلى تلك المخرجات مباشرة.

قبول القيم من خلال معلمات GET

  1. في مشغل الطلب، افتح القائمة إضافة معلمة جديدة، وأضف الخاصية الأسلوب إلى المشغل، وحدد الأسلوبGET .

    لمزيد من المعلومات، راجع تحديد طريقة الطلب المتوقعة.

  2. ضمن مشغل الطلب، أضف الإجراء حيث تريد استخدام قيمة المعلمة. على سبيل المثال، أضف الإجراء استجابة .

    1. ضمن مشغل الطلب، حدد خطوة>جديدةإضافة إجراء.

    2. ضمن Choose an action، في مربع البحث، أدخل response بصفته عامل تصفيتك. من قائمة الإجراءات، حدد إجراء الاستجابة .

  3. لإنشاء التعبير الذي triggerOutputs() يسترد قيمة المعلمة، اتبع الخطوات التالية:

    1. انقر داخل خاصية النص الأساسي للإجراء استجابة بحيث تظهر قائمة المحتوى الديناميكي، وحدد تعبير.

    2. في المربع تعبير ، أدخل هذا التعبير، واستبدله parameter-name باسم المعلمة، وحدد موافق.

      triggerOutputs()['queries']['parameter-name']

      Add

      في خاصية النص ، يتم حل التعبير إلى الرمز المميز triggerOutputs() .

      Resolved

      إذا قمت بحفظ تطبيق المنطق، والتنقل بعيدا عن المصمم، والعودة إلى المصمم، فسيعرض الرمز المميز اسم المعلمة الذي حددته، على سبيل المثال:

      Resolved expression for parameter name

      في طريقة عرض التعليمات البرمجية ، تظهر الخاصية النص الأساسي في تعريف إجراء الاستجابة كما يلي:

      "body": "@{triggerOutputs()['queries']['parameter-name']}",

      على سبيل المثال، افترض أنك تريد تمرير قيمة لمعلمة مسماة postalCode. تحدد خاصية النص الأساسي السلسلة، مع مسافة زائدة، Postal Code: متبوعة بالتعبير المقابل:

      Add example

  4. لاختبار نقطة النهاية القابلة للاستدعاء، انسخ عنوان URL لمعاودة الاتصال من مشغل الطلب، والصق عنوان URL في نافذة متصفح أخرى. في عنوان URL، أضف اسم المعلمة وقيمتها بعد علامة الاستفهام (?) إلى عنوان URL بالتنسيق التالي، ثم اضغط على مفتاح الإدخال Enter.

    ...?{parameter-name=parameter-value}&api-version=2016-10-01...

    https://prod-07.westus.logic.azure.com:433/workflows/{logic-app-resource-ID}/triggers/manual/paths/invoke?{parameter-name=parameter-value}&api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig={shared-access-signature}

    يقوم المستعرض بإرجاع استجابة بهذا النص: Postal Code: 123456

    Response from sending request to callback URL

  5. لوضع اسم المعلمة وقيمتها في موضع مختلف داخل عنوان URL، تأكد من استخدام علامة العطف (&) كبادئة، على سبيل المثال:

    ...?api-version=2016-10-01&{parameter-name=parameter-value}&...

    يعرض هذا المثال عنوان URL لمعاودة الاتصال مع اسم المعلمة النموذجية وقيمتها postalCode=123456 في مواضع مختلفة داخل عنوان URL:

    • المركز 1: https://prod-07.westus.logic.azure.com:433/workflows/{logic-app-resource-ID}/triggers/manual/paths/invoke?postalCode=123456&api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig={shared-access-signature}

    • المركز 2: https://prod-07.westus.logic.azure.com:433/workflows/{logic-app-resource-ID}/triggers/manual/paths/invoke?api-version=2016-10-01&postalCode=123456&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig={shared-access-signature}

ملاحظة

إذا كنت تريد تضمين رمز التجزئة أو الجنيه (#) في عنوان URI، فاستخدم هذا الإصدار المشفر بدلا من ذلك: %25%23

قبول القيم من خلال مسار نسبي

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

    Add

  2. في خاصية المسار النسبي ، حدد المسار النسبي للمعلمة في مخطط JSON الذي تريد أن يقبله عنوان URL، على سبيل المثال، /address/{postalCode}.

    Specify the relative path for the parameter

  3. ضمن مشغل الطلب، أضف الإجراء حيث تريد استخدام قيمة المعلمة. على سبيل المثال، أضف الإجراء استجابة .

    1. ضمن مشغل الطلب، حدد خطوة>جديدةإضافة إجراء.

    2. ضمن Choose an action، في مربع البحث، أدخل response بصفته عامل تصفيتك. من قائمة الإجراءات، حدد إجراء الاستجابة .

  4. في خاصية النص الأساسي للإجراء استجابة، قم بتضمين الرمز المميز الذي يمثل المعلمة التي حددتها في المسار النسبي للمشغل.

    على سبيل المثال، افترض أنك تريد إرجاع Postal Code: {postalCode}إجراء الاستجابة .

    1. في الخاصية النص ، أدخل Postal Code: بمسافة زائدة. احتفظ بالمؤشر داخل مربع التحرير بحيث تظل قائمة المحتوى الديناميكي مفتوحة.

    2. في قائمة المحتوى الديناميكي، من القسم عند استلام طلب HTTP ، حدد الرمز المميز postalCode .

      Add the specified parameter to response body

      تتضمن خاصية النص الآن المعلمة المحددة:

      Example response body with parameter

  5. حفظ تطبيق المنطق الخاص بك.

    في مشغل الطلب، يتم تحديث عنوان URL لمعاودة الاتصال ويتضمن الآن المسار النسبي، على سبيل المثال:

    https://prod-07.westus.logic.azure.com/workflows/{logic-app-resource-ID}/triggers/manual/paths/invoke/address/{postalCode}?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig={shared-access-signature}

  6. لاختبار نقطة النهاية القابلة للاستدعاء، انسخ عنوان URL المحدث لمعاودة الاتصال من مشغل الطلب، والصق عنوان URL في نافذة مستعرض أخرى، واستبدل {postalCode} عنوان URL ب 123456، واضغط على مفتاح الإدخال Enter.

    يقوم المستعرض بإرجاع استجابة بهذا النص: Postal Code: 123456

    Response from sending request to callback URL

ملاحظة

إذا كنت تريد تضمين رمز التجزئة أو الجنيه (#) في عنوان URI، فاستخدم هذا الإصدار المشفر بدلا من ذلك: %25%23

تطبيق منطق المكالمات من خلال عنوان URL لنقطة النهاية

بعد إنشاء نقطة النهاية، يمكنك تشغيل التطبيق المنطقي عن طريق إرسال طلب HTTPS إلى عنوان URL الكامل لنقطة النهاية. تحتوي التطبيقات المنطقية على دعم مضمن لنقاط نهاية الوصول المباشر.

الرموز المميزة التي تم إنشاؤها من المخطط

عند توفير مخطط JSON في مشغل الطلب، يقوم مصمم التطبيقات المنطقية بإنشاء رموز مميزة للخصائص الموجودة في هذا المخطط. يمكنك بعد ذلك استخدام هذه الرموز المميزة لتمرير البيانات عبر سير عمل التطبيق المنطقي.

على سبيل المثال، إذا أضفت المزيد من الخصائص، مثل "suite"، إلى مخطط JSON، فستتوفر الرموز المميزة لهذه الخصائص لاستخدامها في الخطوات اللاحقة لتطبيقك المنطقي. فيما يلي مخطط JSON الكامل:

   {
   "type": "object",
   "properties": {
      "address": {
         "type": "object",
         "properties": {
            "streetNumber": {
               "type": "string"
            },
            "streetName": {
               "type": "string"
            },
            "suite": {
               "type": "string"
            },
            "town": {
               "type": "string"
            },
            "postalCode": {
               "type": "string"
            }
         }
      }
   }
}

إنشاء تطبيقات منطقية متداخلة

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

  1. ضمن الخطوة التي تريد الاتصال فيها بتطبيق منطقي آخر، حدد خطوة>جديدةإضافة إجراء.

  2. ضمن اختيار إجراء، حدد مضمن. في مربع البحث، أدخل logic apps كفلتر. من قائمة الإجراءات، حدد اختيار سير عمل التطبيقات المنطقية.

    Nest logic app inside current logic app

    يعرض المصمم التطبيقات المنطقية المؤهلة لتتمكن من تحديدها.

  3. حدد تطبيق المنطق الذي تريد الاتصال به من تطبيق المنطق الحالي.

    Select logic app to call from current logic app

محتوى مرجعي من طلب وارد

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

على سبيل المثال، إذا كنت تقوم بتمرير محتوى يحتوي على application/xml كتابة، فيمكنك استخدام التعبير لإجراء استخراج XPath، أو استخدام @xpath()@json() التعبير لتحويل XML إلى JSON. تعرف على المزيد حول العمل مع أنواع المحتوى المدعومة.

للحصول على الإخراج من طلب وارد، يمكنك استخدام @triggerOutputs التعبير. على سبيل المثال، افترض أن لديك مخرجات تشبه هذا المثال:

{
   "headers": {
      "content-type" : "application/json"
   },
   "body": {
      "myProperty" : "property value"
   }
}

للوصول إلى الخاصية على body وجه التحديد، يمكنك استخدام @triggerBody() التعبير كاختصار.

الرد على الطلبات

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

لكي يحصل المتصل الأصلي على الاستجابة بنجاح، يجب أن تنتهي جميع الخطوات المطلوبة للاستجابة ضمن حد مهلة الطلب ما لم يتم استدعاء تطبيق المنطق الذي تم تشغيله كتطبيق منطق متداخل. إذا لم يتم إرجاع أي استجابة ضمن هذا الحد، تنتهي مهلة الطلب الوارد وتتلقى استجابة مهلة العميل 408 .

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

بناء الاستجابة

في نص الاستجابة، يمكنك تضمين رؤوس متعددة وأي نوع من المحتوى. على سبيل المثال، يحدد رأس هذه الاستجابة أن نوع محتوى الاستجابة هو application/json وأن النص الأساسي يحتوي على قيم للخصائص town والخصائص postalCode ، استنادا إلى مخطط JSON الموضح سابقا في هذا الموضوع لمشغلات الطلب.

Provide response content for HTTPS Response action

تحتوي الردود على هذه الخصائص:

الخاصية (عرض) خاصية (JSON) الوصف
كود الحالة statusCode رمز حالة HTTPS لاستخدامه في الاستجابة للطلب الوارد. يمكن أن يكون هذا الرمز أي رمز حالة صالح يبدأ ب 2xx أو 4xx أو 5xx. ومع ذلك، لا يسمح برموز الحالة 3xx.
الرؤوس headers رأس واحد أو أكثر لتضمينه في الاستجابة
النص الأساسي body كائن نص يمكن أن يكون سلسلة أو كائن JSON أو حتى محتوى ثنائي مشار إليه من خطوة سابقة

لعرض تعريف JSON لإجراء الاستجابة وتعريف JSON الكامل لتطبيقك المنطقي، على شريط أدوات مصمم التطبيقات المنطقية، حدد طريقة عرض التعليمات البرمجية.

"Response": {
   "type": "Response",
   "kind": "http",
   "inputs": {
      "body": {
         "postalCode": "@triggerBody()?['address']?['postalCode']",
         "town": "@triggerBody()?['address']?['town']"
      },
      "headers": {
         "content-type": "application/json"
      },
      "statusCode": 200
   },
   "runAfter": {}
}

سؤال &وجواب

س: ماذا عن أمان عنوان URL؟

ج: يقوم Azure بإنشاء عناوين URL لمعاودة الاتصال بالتطبيقات المنطقية بشكل آمن باستخدام توقيع الوصول المشترك (SAS). يمر هذا التوقيع كمعلمة استعلام ويجب التحقق من صحته قبل تشغيل التطبيق المنطقي. يقوم Azure بإنشاء التوقيع باستخدام مزيج فريد من المفتاح السري لكل تطبيق منطقي واسم المشغل والعملية التي يتم تنفيذها. لذلك ما لم يكن لدى شخص ما حق الوصول إلى مفتاح تطبيق المنطق السري ، فلن يتمكن من إنشاء توقيع صالح.

هام

بالنسبة لأنظمة الإنتاج والأمان الأعلى، ننصح بشدة بعدم الاتصال بتطبيقك المنطقي مباشرة من المتصفح للأسباب التالية:

  • يظهر مفتاح الوصول المشترك في عنوان URL.
  • لا يمكنك إدارة سياسات محتوى الأمان بسبب النطاقات المشتركة عبر عملاء Azure Logic Apps.

لمزيد من المعلومات حول الأمان والتخويل والتشفير للمكالمات الواردة إلى تطبيقك المنطقي، مثل أمان طبقة النقل (TLS)، المعروف سابقا باسم طبقة مآخذ التوصيل الآمنة (SSL)، أو مصادقة Azure Active Directory المفتوحة (Azure AD OAuth)، أو تعريض تطبيقك المنطقي باستخدام إدارة واجهة برمجة تطبيقات Azure، أو تقييد عناوين IP التي تنشأ عنها المكالمات الواردة، راجع الوصول الآمن والبيانات - الوصول للمكالمات الواردة إلى المشغلات المستندة إلى الطلب.

س: هل يمكنني تكوين نقاط النهاية القابلة للاستدعاء بشكل أكبر؟

ج: نعم، تدعم نقاط نهاية HTTPS تكوينا أكثر تقدما من خلال إدارة واجهة برمجة تطبيقات Azure. توفر لك هذه الخدمة أيضا القدرة على إدارة جميع واجهات برمجة التطبيقات الخاصة بك باستمرار، بما في ذلك التطبيقات المنطقية، وإعداد أسماء النطاقات المخصصة، واستخدام المزيد من طرق المصادقة، والمزيد، على سبيل المثال:

الخطوات التالية