مصدر بيانات HTTP لمحلل

ينطبق على: جميع مستويات إدارة واجهة برمجة التطبيقات

http-data-source يقوم نهج الحل بتكوين طلب HTTP واستجابة HTTP بشكل اختياري لحل البيانات لنوع عنصر وحقل في مخطط GraphQL. يجب استيراد المخطط إلى API Management كواجهة برمجة تطبيقات GraphQL.

إشعار

تعيين عناصر النهج والعناصر التابعة بالترتيب الوارد في بيان النهج. تعلم كيفية إعداد نُهج APIM أو تعديلها.

نهج السياسة

<http-data-source> 
    <http-request>
        <get-authorization-context>...get-authorization-context policy configuration...</get-authorization-context>
        <set-backend-service>...set-backend-service policy configuration...</set-backend-service>
        <set-method>...set-method policy configuration...</set-method> 
        <set-url>URL</set-url>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
        <set-header>...set-header policy configuration...</set-header>
        <set-body>...set-body policy configuration...</set-body>
        <authentication-certificate>...authentication-certificate policy configuration...</authentication-certificate>  
    </http-request> 
    <backend>
        <forward-request>...forward-request policy configuration...</forward-request>
    <http-response>
        <set-body>...set-body policy configuration...</set-body>
        <xml-to-json>...xml-to-json policy configuration...</xml-to-json>
        <find-and-replace>...find-and-replace policy configuration...</find-and-replace>
        <publish-event>...publish-event policy configuration...</publish-event>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
    </http-response>
</http-data-source> 

عناصر

Name ‏‏الوصف مطلوب
طلب http يحدد عنوان URL ونُهُج تابعة لتكوين طلب HTTP الخاص بالمحلل. ‏‏نعم‬
الخلفيه يقوم اختياريا بإعادة توجيه طلب HTTP الخاص بالمحلل إلى خدمة خلفية، إذا تم تحديده. لا
استجابة http يحدد اختيارياً النُهُج التابعة لتكوين استجابة HTTP للمحلل. إذا لم يتم تحديدها، يتم إرجاع الاستجابة كسلسلة أولية. لا

عناصر طلب http

إشعار

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

العنصر الوصف مطلوب
الحصول على سياق التخويل الحصول على سياق تخويل لطلب HTTP الخاص بالمحلل. لا
تعيين خدمة الواجهة الخلفية يعيد توجيه طلب HTTP الخاص بالمحلل إلى الخلفية المحددة. لا
تضمين-جزء إدراج جزء نهج في تعريف النهج. إذا كانت هناك أجزاء متعددة، فأضف عناصر إضافية include-fragment . لا
أسلوب التعيين تعيين أسلوب طلب HTTP الخاص بالمحلل. ‏‏نعم‬
set-url تعيين عنوان URL لطلب HTTP الخاص بالمحلل. ‏‏نعم‬
تعيين العنوان تعيين عنوان في طلب HTTP الخاص بالمحلل. إذا كانت هناك رؤوس متعددة، فأضف عناصر إضافية header . لا
تعيين النص الأساسي تعيين النص الأساسي في طلب HTTP الخاص بالمحلل. لا
شهادة المصادقة يصادق باستخدام شهادة عميل في طلب HTTP الخاص بالمحلل. لا

عنصر الواجهة الخلفية

العنصر الوصف مطلوب
طلب إعادة التوجيه إعادة توجيه طلب HTTP الخاص بالمحلل إلى خدمة خلفية مكونة. لا

عناصر استجابة http

إشعار

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

Name ‏‏الوصف مطلوب
تعيين النص الأساسي تعيين النص الأساسي في استجابة HTTP للمحلل. لا
xml إلى json تحويل استجابة HTTP للمحلل من XML إلى JSON. لا
البحث والاستبدال البحث عن سلسلة فرعية في استجابة HTTP للمحلل واستبدالها بسلاسل فرعية مختلفة. لا
نشر الحدث نشر حدث إلى اشتراك واحد أو أكثر محدد في مخطط واجهة برمجة تطبيقات GraphQL. لا
تضمين-جزء إدراج جزء نهج في تعريف النهج. إذا كانت هناك أجزاء متعددة، فأضف عناصر إضافية include-fragment . لا

الاستخدام

ملاحظات الاستخدام

  • لتكوين محلل وإدارته باستخدام هذا النهج، راجع تكوين محلل GraphQL.
  • يتم استدعاء هذا النهج فقط عند حل حقل واحد في نوع عملية GraphQL مطابق في المخطط.

الأمثلة

محلل لاستعلام GraphQL

يحل المثال التالي استعلاماً عن طريق إجراء استدعاء بروتوكول HTTP GET إلى مصدر بيانات الخلفية.

مثال لمخطط بسيط

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

مثال على النهج

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/get/users</set-url>
    </http-request>
</http-data-source>

محلل لاستعلام GraqhQL الذي يقوم بإرجاع قائمة، باستخدام قالب سائل

يستخدم المثال التالي قالباً سائلاً مدعوماً للاستخدام في النهج set-body، لإرجاع قائمة في استجابة البروتوكول HTTP إلى استعلام. كما أنه يعيد تسمية الحقل username في الاستجابة من واجهة برمجة تطبيقات REST إلى name في استجابة GraphQL.

مثال لمخطط بسيط

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

مثال على النهج

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/users</set-url>
    </http-request>
    <http-response>
        <set-body template="liquid">
            [
                {% JSONArrayFor elem in body %}
                    {
                        "name": "{{elem.username}}"
                    }
                {% endJSONArrayFor %}
            ]
        </set-body>
    </http-response>
</http-data-source>

محلل لتعديل GraphQL

يحل المثال التالي تعديلاً يدرج البيانات عن طريق تقديم POST طلب إلى مصدر بيانات HTTP. يعدل تعبير النهج في النهج set-body لطلب HTTP وسيطة name التي يتم تمريرها في الاستعلام GraphQL كنص خاص به. سيبدو النص الذي يتم إرساله مثل صيغة JSON التالية:

{
    "name": "the-provided-name"
}

مثال لمخطط بسيط

type Query {
    users: [User]
}

type Mutation {
    makeUser(name: String!): User
}

type User {
    id: String!
    name: String!
}

مثال على النهج

<http-data-source>
    <http-request>
        <set-method>POST</set-method>
        <set-url>https://data.contoso.com/user/create </set-url>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
        <set-body>@{
            var args = context.GraphQL.Arguments;  
            JObject jsonObject = new JObject();
            jsonObject.Add("name", args["name"])
            return jsonObject.ToString();
        }</set-body>
    </http-request>
</http-data-source>

محلل لنوع اتحاد GraphQL

يحل orderById المثال التالي الاستعلام عن طريق إجراء استدعاء HTTP GET إلى مصدر بيانات الواجهة الخلفية وإرجاع كائن JSON يتضمن معرف العميل ونوعه. نوع العميل هو اتحاد أنواع RegisteredCustomer و GuestCustomer .

مثال لمخطط بسيط

type Query {
  orderById(orderId: Int): Order
}

type Order {
  customerId: Int!
  orderId: Int!  
  customer: Customer
}

enum AccountType {
  Registered
  Guest
}

union Customer = RegisteredCustomer | GuestCustomer

type RegisteredCustomer {
  accountType: AccountType!
  customerId: Int!
  customerGuid: String!
  firstName: String!
  lastName: String!
  isActive: Boolean!
}

type GuestCustomer {
  accountType: AccountType!
  firstName: String!
  lastName: String!
}

مثال على النهج

على سبيل المثال، نحن نسخر نتائج العميل من مصدر خارجي، والرمز الثابت النتائج التي تم جلبها في النهج set-body . __typename يتم استخدام الحقل لتحديد نوع العميل.

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/orders/</set-url>
    </http-request>
    <http-response>
        <set-body>{"customerId": 12345, "accountType": "Registered", "__typename": "RegisteredCustomer" }
        </set-body>
    </http-response>
</http-data-source>

لمزيد من المعلومات حول العمل مع النُهج، راجع: