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>

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

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