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

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

ב-Edge אפשר להפעיל Proxy של API אחד מתוך Proxy אחר של API. התכונה הזו שימושית במיוחד אם יש לכם API Proxy שמכיל קוד לשימוש חוזר שאפשר להשתמש בו ב-API Proxies אחרים.

תבנית אנטי

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

הפעלת Proxy 2 מ-Proxy 1 באמצעות HTTPTargetConnection

בדוגמת הקוד הבאה מוצגת הפעלה של Proxy 2 מ-Proxy 1 באמצעות HTTPTargetConnection:

<!-- /antipatterns/examples/2-1.xml -->
<HTTPTargetConnection>
  <URL>http://myorg-test.apigee.net/proxy2</URL>
</HTTPTargetConnection>

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

בדוגמת הקוד הבאה מופעל Proxy 2 מ-Proxy 1 באמצעות JavaScript:

<!-- /antipatterns/examples/2-2.xml -->
var response = httpClient.send('http://myorg-test.apigee.net/proxy2);
response.waitForComplete();

תהליך קוד

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

איור 1: זרימת קוד

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

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

השפעה

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

שיטה מומלצת

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

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

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

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

    איור 2: זרימת קוד עם שרשור של שרתי proxy

קריאה נוספת