Antipattern: استخدام سياسة وسيلة شرح الخدمة لاستدعاء خدمة خلفية في خادم وكيل غير مستهدف لواجهة برمجة التطبيقات

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

خادم وكيل واجهة برمجة التطبيقات هو واجهة مُدارة لخدمات الخلفية. تتألف عملية الإعداد الأساسية للخادم الوكيل لواجهة برمجة التطبيقات من ProxyEndpoint (يحدّد عنوان URL للخادم الوكيل لواجهة برمجة التطبيقات) وTargetEndpoint (لتحديد عنوان URL لخدمة الخلفية).

توفّر Apigee Edge الكثير من المرونة لإنشاء سلوك متطوّر بالإضافة إلى هذا النمط. على سبيل المثال، يمكنك إضافة سياسات للتحكُّم في الطريقة التي تعالج بها واجهة برمجة التطبيقات طلب العميل قبل إرساله إلى خدمة الخلفية أو التلاعب بالاستجابة التي تم تلقّيها من الخدمة الخلفية قبل إعادة توجيهه إلى العميل. ويمكنك استدعاء خدمات أخرى باستخدام سياسات وسائل شرح الخدمة، وإضافة سلوك مخصّص من خلال إضافة رمز JavaScript، وإنشاء خادم وكيل لواجهة برمجة التطبيقات لا يستدعي خدمة خلفية.

مضادة للأنماط

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

يمكن أن يكون الخادم الوكيل لواجهة برمجة التطبيقات الذي لا يحتوي على مسارات الهدف مفيدًا في الحالات التي لا تحتاج فيها إلى إعادة توجيه رسالة الطلب إلى TargetEndpoint. بدلاً من ذلك، يُجري ProxyEndpoint جميع عمليات المعالجة اللازمة. على سبيل المثال، يمكن لـ ProxyEndpoint استرداد البيانات من عملية بحث في مخزن المفتاح/القيمة لخدمة واجهة برمجة التطبيقات وعرض الاستجابة بدون استدعاء خدمة خلفية.

يمكنك تحديد مسار فارغ في خادم وكيل لواجهة برمجة التطبيقات، كما هو موضّح هنا:

<RouteRule name="noroute"/>

الوكيل الذي يستخدم مسارًا فارغًا هو خادم وكيل "بدون هدف"، لأنّه لا يستدعي خدمة خلفية هدف.

من الممكن من الناحية الفنية إضافة وسيلة شرح للخدمة إلى خادم وكيل مستهدَف لاستدعاء خدمة خارجية، كما هو موضّح في المثال أدناه:

<!-- /antipatterns/examples/service-callout-no-target-1.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request>
            <Step>
                <Name>ServiceCallout-InvokeBackend</Name>
            </Step>
        </Request>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/no-target-proxy</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="noroute"/>
</ProxyEndpoint>

ومع ذلك، لا يمكن للخادم الوكيل تقديم معلومات تحليلية حول سلوك الخدمة الخارجية (مثل وقت المعالجة أو معدلات الخطأ)، ما يجعل من الصعب تقييم أداء الخدمة الخارجية.

التأثير

  • لا تتوفر معلومات "إحصاءات Google" المتعلقة بالتفاعل مع الخدمة الخارجية ( رموز الخطأ ووقت الاستجابة والأداء المستهدف وغير ذلك).
  • ويتم تضمين أي منطق محدّد مطلوب قبل استدعاء وسيلة الشرح للخدمة أو بعده كجزء من منطق الخادم الوكيل العام، ما يجعل من الصعب فهمه وإعادة استخدامه.

أفضل الممارسات

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

ينفِّذ إعداد الخادم الوكيل التالي السلوك نفسه الموضّح في المثال أعلاه، ولكنّه يتّبع أفضل الممارسات:

<!-- /antipatterns/examples/service-callout-no-target-2.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/simple-proxy-with-route-to-backend</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
    </RouteRule>
</ProxyEndpoint>

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

محتوى إضافي للقراءة