אנטי-תבנית: הפעלת Proxy בתוך Proxy באמצעות קוד מותאם אישית או כיעד

אתם צופים במסמכי התיעוד של Apigee ושל Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge.

ב-Apigee אפשר להפעיל proxy ל-API אחד מתוך proxy אחר ל-API. התכונה הזו שימושית במיוחד אם יש לכם proxy ל-API שמכיל קוד לשימוש חוזר, שאפשר להשתמש בו ב-proxy ל-API אחרים.

תבנית אנטי

הפעלת proxy ל-API אחד מתוך proxy ל-API אחר באמצעות HTTPTargetConnection בנקודת הקצה של היעד או באמצעות קוד JavaScript מותאם אישית מובילה לניתוב נוסף ברשת.

הפעלת שרת proxy 2 משרת proxy 1 באמצעות HTTPTargetConnection

בדוגמת הקוד הבאה, מתבצעת קריאה ל-Proxy 2 מ-Proxy 1 באמצעות HTTPTargetConnection:

<!-- /antipatterns/examples/2-1.xml -->
<HTTPTargetConnection>
  <URL>https://api-test.example.com/proxy2</URL>
</HTTPTargetConnection>

הפעלת proxy 2 מ-proxy 1 מקוד JavaScript

בדוגמת הקוד הבאה מופעל פרוקסי 2 מפרוקסי 1 באמצעות JavaScript:

<!-- /antipatterns/examples/2-2.xml -->
var response = httpClient.send('https://api-test.example.com/proxy2);
response.waitForComplete();

זרימת קוד

כדי להבין למה יש לזה חיסרון מובנה, צריך להבין את המסלול שבו עוברת בקשה, כפי שמודגם בתרשים הבא:

‫1) הלקוח שולח בקשה לשרת Proxy 1, ‏ 2) הבקשה משרת Proxy 1 לשרת Proxy 2 גורמת לניתוב ברשת,
            ‫3) הבקשה משרת Proxy 2 ליעד.
איור 1: זרימת קוד

כפי שמוצג בדיאגרמה, בקשה עוברת דרך כמה רכיבים מבוזרים, כולל הנתב ומעבד בקשות.

בדוגמאות הקוד שלמעלה, הפעלת proxy 2 מ-proxy 1 פירושה שהבקשה צריכה להיות מנותבת דרך המסלול המסורתי (Router > MP) בזמן הריצה. זה דומה להפעלת API מלקוח, וכך מתבצעות כמה קפיצות ברשת שמוסיפות לזמן האחזור. הניתובים האלה מיותרים, כי הבקשה של proxy 1 כבר הגיעה ל-MP.

השפעה

הפעלת proxy ל-API אחד מ-proxy ל-API אחר גורמת להוספת קפיצות מיותרות ברשת, כלומר הבקשה צריכה לעבור ממעבד בקשות אחד למעבד בקשות אחר.

שיטה מומלצת

  • משתמשים בתכונה proxy chaining כדי להפעיל שרת proxy של API אחד מתוך שרת proxy אחר. שרשור פרוקסי יעיל יותר כי הוא משתמש בחיבור מקומי כדי להפנות לנקודת הקצה של היעד (פרוקסי API אחר).

    בדוגמת הקוד הבאה מוצג שרשור של שרתי proxy באמצעות LocalTargetConnection בהגדרת נקודת הקצה:

    <!-- /antipatterns/examples/2-3.xml -->
    <LocalTargetConnection>
      <APIProxy>proxy2</APIProxy>
      <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>

    שרת ה-Proxy של ה-API שהופעל מורץ באותו מעבד הודעות, ולכן הוא לא עובר דרך הרשת, כמו שמוצג באיור הבא:

    ‫1) הלקוח שולח בקשה ל-Proxy 1, ‏ 2) נשלחת בקשה מ-Proxy 1 ל-Proxy 2 באמצעות קריאה פסאודו-מקומית, ‏ 3) נשלחת בקשה מ-Proxy 2 ליעד.
    איור 2: זרימת קוד עם שרשור של שרתי proxy

קריאה נוספת