أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X. info
الخادم الوكيل لواجهة برمجة التطبيقات هو واجهة مُدارة لخدمات الخلفية. يتألف الإعداد الأساسي للخادم الوكيل لواجهة برمجة التطبيقات من ProxyEndpoint (التي تحدّد عنوان URL للخادم الوكيل لواجهة برمجة التطبيقات) و TargetEndpoint (التي تحدّد عنوان URL لخدمة الخلفية).
يوفّر Apigee Edge مرونة كبيرة لإنشاء سلوك متطوّر استنادًا إلى هذا النمط. على سبيل المثال، يمكنك إضافة سياسات للتحكّم في طريقة معالجة واجهة برمجة التطبيقات لطلب العميل قبل إرساله إلى خدمة الخلفية، أو تعديل الردّ الذي تتلقّاه من خدمة الخلفية قبل إعادة توجيهه إلى العميل. يمكنك استدعاء خدمات أخرى باستخدام سياسات استدعاء الخدمة، وإضافة سلوك مخصّص عن طريق إضافة رمز JavaScript، وحتى إنشاء خادم وكيل لواجهة برمجة التطبيقات لا يستدعي خدمة خلفية.
نمط غير مستحسن
إنّ استخدام استدعاءات الخدمة لاستدعاء خدمة خلفية في خادم وكيل لواجهة برمجة التطبيقات بدون مسارات إلى نقطة نهاية هدف أمر ممكن من الناحية الفنية، ولكنّه يؤدي إلى فقدان بيانات الإحصاءات حول أداء الخدمة الخارجية.
يمكن أن يكون الخادم الوكيل لواجهة برمجة التطبيقات الذي لا يحتوي على مسارات هدف مفيدًا في الحالات التي لا تحتاج فيها إلى إعادة توجيه رسالة الطلب إلى نقطة نهاية الهدف. بدلاً من ذلك، تنفّذ نقطة نهاية الخادم الوكيل جميع عمليات المعالجة اللازمة. على سبيل المثال، يمكن لنقطة نهاية الخادم الوكيل استرداد البيانات من عملية بحث في مخزن قيم المفاتيح لخدمة واجهة برمجة التطبيقات وعرض الردّ بدون استدعاء خدمة خلفية.
يمكنك تحديد مسار فارغ في خادم وكيل لواجهة برمجة التطبيقات، كما هو موضّح هنا:
<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>
ومع ذلك، لا يمكن للخادم الوكيل تقديم معلومات إحصائية حول سلوك الخدمة الخارجية (مثل وقت المعالجة أو معدّلات الخطأ)، ما يجعل من الصعب تقييم أداء الخدمة الخارجية.
التأثير
- لا تتوفّر المعلومات الإحصائية حول التفاعل مع الخدمة الخارجية ( رموز الخطأ ووقت الردّ و أداء الهدف وما إلى ذلك)
- يتم تضمين أي منطق محدّد مطلوب قبل استدعاء استدعاء الخدمة أو بعده كجزء من منطق الخادم الوكيل العام، ما يجعل من الصعب فهمه وإعادة استخدامه.
أفضل الممارسات
إذا كان الخادم الوكيل لواجهة برمجة التطبيقات يتفاعل مع خدمة خارجية واحدة فقط، يجب أن يتّبع الخادم الوكيل نمط التصميم الأساسي ، حيث يتم تحديد خدمة الخلفية كنقطة نهاية الهدف للخادم الوكيل لواجهة برمجة التطبيقات. يجب ألا يستدعي الخادم الوكيل الذي لا يحتوي على قواعد توجيه إلى نقطة نهاية هدف خدمة خلفية باستخدام سياسة 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>
استخدِم استدعاءات الخدمة لدعم سيناريوهات الدمج، حيث تريد استدعاء خدمات خارجية قبل استدعاء نقطة نهاية الهدف أو بعده. لا يُقصد باستدعاءات الخدمة أن تحلّ محلّ استدعاء نقطة نهاية الهدف.