الخلفيات في API Management

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

الخلفية (أو خلفية API)في API Management هي خدمة HTTP التي تنفذ واجهة برمجة التطبيقات الأمامية وعملياتها.

عند استيراد واجهات برمجة تطبيقات معينة، تعمل إدارة واجهة برمجة التطبيقات على تهيئة الواجهة الخلفية لواجهة برمجة التطبيقات تلقائيًا. على سبيل المثال، تقوم APIM بتكوين خدمة الويب الخلفية عند الاستيراد:

تدعم API Management أيضًا استخدام موارد Azure الأخرى كواجهة خلفية لواجهة برمجة التطبيقات، مثل:

فوائد الواجهات الخلفية

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

استخدم الواجهات الخلفية لواحد أو أكثر مما يلي:

  • تخويل بيانات اعتماد الطلبات إلى خدمة الواجهة الخلفية
  • استفد من وظيفة APIM للحفاظ على الأسرار في Azure Key Vault إذا تم تكوين القيم المسماة لمصادقة معلمة العنوان أو الاستعلام.
  • تحديد قواعد قاطع الدوائر لحماية الواجهة الخلفية من عدد كبير جدا من الطلبات
  • توجيه طلبات موازنة التحميل أو توجيهها إلى واجهات خلفية متعددة

تكوين وإدارة الكيانات الخلفية في مدخل Microsoft Azure، أو باستخدام واجهات برمجة تطبيقات Azure أو الأدوات.

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

بعد إنشاء الخلفية، يمكنك الرجوع إلى عنوان URL الخلفي في واجهات برمجة التطبيقات الخاصة بك. استخدم النهج set-backend-service لتوجيه طلب واجهة برمجة تطبيقات وارد إلى الخلفية. إذا قمت بالفعل بتكوين خدمة ويب خلفية لواجهة برمجة تطبيقات، يمكنك استخدام النهج set-backend-service لإعادة توجيه الطلب إلى كيان الخلفية بدلا من ذلك. على سبيل المثال:

<policies>
    <inbound>
        <base />
        <set-backend-service backend-id="myBackend" />
    </inbound>
    [...]
<policies/>

يمكنك استخدام المنطق الشرطي مع set-backend-service النهج لتغيير الخلفية الفعالة استنادا إلى الموقع أو البوابة التي تم استدعاؤها أو تعبيرات أخرى.

على سبيل المثال، فيما يلي نهج لتوجيه نسبة استخدام الشبكة إلى خلفية أخرى استنادا إلى البوابة التي تم استدعاؤها:

<policies>
    <inbound>
        <base />
        <choose>
            <when condition="@(context.Deployment.Gateway.Id == "factory-gateway")">
                <set-backend-service backend-id="backend-on-prem" />
            </when>
            <when condition="@(context.Deployment.Gateway.IsManaged == false)">
                <set-backend-service backend-id="self-hosted-backend" />
            </when>
            <otherwise />
        </choose>
    </inbound>
    [...]
<policies/>

قاطع الدائرة

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

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

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

إشعار

  • حاليا، قاطع الدائرة الخلفية غير مدعوم في مستوى الاستهلاك لإدارة واجهة برمجة التطبيقات.
  • نظرا للطبيعة الموزعة لبنية API Management، فإن قواعد تعثر قاطع الدوائر تقريبية. لا تتم مزامنة مثيلات مختلفة من البوابة وستطبق قواعد قاطع الدائرة استنادا إلى المعلومات الموجودة في نفس المثيل.

مثال

استخدم API Management REST API أو قالب Bicep أو ARM لتكوين قاطع دائرة في خلفية. في المثال التالي، يقوم قاطع الدائرة في myBackend في مثيل API Management برحلات myAPIM عند وجود ثلاثة رموز حالة أو أكثر 5xx تشير إلى أخطاء الخادم في ساعة واحدة.

يتم إعادة تعيين قاطع الدائرة بعد ساعة واحدة. Retry-After إذا كان الرأس موجودا في الاستجابة، يقبل قاطع الدائرة القيمة وينتظر الوقت المحدد قبل إرسال الطلبات إلى الخلفية مرة أخرى.

قم بتضمين قصاصة برمجية مشابهة لما يلي في قالب Bicep لمورد خلفية مع قاطع دائرة:

resource symbolicname 'Microsoft.ApiManagement/service/backends@2023-09-01-preview' = {
  name: 'myAPIM/myBackend'
  properties: {
    url: 'https://mybackend.com'
    protocol: 'https'
    circuitBreaker: {
      rules: [
        {
          failureCondition: {
            count: 3
            errorReasons: [
              'Server errors'
            ]
            interval: 'PT1H' 
            statusCodeRanges: [
              {
                min: 500
                max: 599
              }
            ]
          }
          name: 'myBreakerRule'
          tripDuration: 'PT1H'  
          acceptRetryAfter: true
        }
      ]
    }
   }
 }

تجمع متوازن التحميل

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

استخدم تجمع الواجهة الخلفية لسيناريوهات مثل ما يلي:

  • انشر الحمل إلى واجهات خلفية متعددة، والتي قد تحتوي على قاطعات دوائر خلفية فردية.
  • قم بتحويل الحمل من مجموعة من الخلفيات إلى أخرى للترقية (النشر الأزرق والأخضر).

لإنشاء تجمع خلفية، قم بتعيين type خاصية الواجهة الخلفية إلى pool وحدد قائمة بالخلفيات التي تشكل التجمع.

إشعار

  • حاليا، يمكنك تضمين الواجهات الخلفية الفردية فقط في تجمع الخلفية. لا يمكنك إضافة خلفية من النوع pool إلى تجمع خلفية آخر. يمكنك تضمين ما يصل إلى 30 خلفية في تجمع.
  • نظرا للطبيعة الموزعة لبنية APIM، فإن موازنة تحميل الخلفية تقريبية. لا تتم مزامنة مثيلات مختلفة من البوابة وستقوم بتحميل الرصيد استنادا إلى المعلومات الموجودة في نفس المثيل.

خيارات موازن التحميل

تدعم APIM خيارات موازنة التحميل التالية لتجمعات الواجهة الخلفية:

  • الترتيب الدوري: بشكل افتراضي، يتم توزيع الطلبات بالتساوي عبر الخلفيات في التجمع.
  • المرجح: يتم تعيين الأوزان إلى الخلفيات في التجمع، ويتم توزيع الطلبات عبر الخلفيات استنادا إلى الوزن النسبي المعين لكل خلفية. استخدم هذا الخيار لسيناريوهات مثل إجراء توزيع أزرق أخضر.
  • مستندة إلى الأولوية: يتم تنظيم الخلفيات في مجموعات الأولوية، ويتم إرسال الطلبات إلى الخلفيات بترتيب مجموعات الأولوية. ضمن مجموعة الأولوية، يتم توزيع الطلبات إما بالتساوي عبر الخلفيات، أو (إذا تم تعيينها) وفقا للوزن النسبي المعين لكل خلفية.

إشعار

سيتم استخدام الخلفيات في المجموعات ذات الأولوية المنخفضة فقط عندما تكون جميع الخلفيات في مجموعات الأولوية الأعلى غير متوفرة بسبب تعثر قواعد قاطع الدائرة.

مثال

استخدم API Management REST API أو قالب Bicep أو ARM لتكوين تجمع الخلفية. في المثال التالي، يتم تكوين myBackendPool الخلفية في مثيل إدارة واجهة برمجة التطبيقات myAPIM مع تجمع الخلفية. تسمى الواجهات الخلفية المثال في التجمع backend-1 و backend-2. كلتا الواجهة الخلفية في المجموعة ذات الأولوية القصوى؛ داخل المجموعة، الخلفية-1 لها وزن أكبر من الخلفية-2 .

قم بتضمين قصاصة برمجية مشابهة لما يلي في قالب Bicep لمورد الخلفية مع تجمع متوازن التحميل:

resource symbolicname 'Microsoft.ApiManagement/service/backends@2023-09-01-preview' = {
  name: 'myAPIM/myBackendPool'
  properties: {
    description: 'Load balancer for multiple backends'
    type: 'Pool'
    pool: {
      services: [
        {
          id: '/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ApiManagement/service/<APIManagementName>/backends/backend-1'
          priority: 1
          weight: 3
        }
        {
          id: '/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ApiManagement/service/<APIManagementName>/backends/backend-2'
          priority: 1
          weight: 1
        }
      ]
    }
  }
}

القيد

بالنسبة إلى مستويات المطورPremium، يمكن لمثيل إدارة API المنشور في شبكة ظاهرية داخلية ترك أخطاء HTTP 500 BackendConnectionFailure عندما يكون عنوان URL لنقطة النهاية للعبارة وعنوان URL الخلفي متماثلين. إذا واجهت هذا القيد اتبع الإرشادات في قيود طلب إدارة API المتسلسلة ذاتيًا في مقالة وضع الشبكة الظاهرية الداخلية في مدونة مجتمع التقنية.