אנטי-דפוס: הפעלת קריאות ל-API לניהול משרת proxy של API

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

Edge מציע כלי עזר רב-עוצמה שנקרא "ממשקי API לניהול", שמציע שירותים כמו:

  • פריסה או ביטול פריסה של שרתי proxy של API
  • הגדרת מארחים וירטואליים, מאגרי מפתחות, Truststores וכו'
  • יצירה, מחיקה או עדכון של ישויות כמו KeyValueMaps, מוצרי API, אפליקציות למפתחים, מפתחים, מפתחות צרכן וכו'.
  • מתבצע אחזור מידע על הישויות האלה

אפשר לגשת לשירותים האלה באמצעות רכיב שנקרא Management Server בפלטפורמת Apigee Edge. אפשר להפעיל את השירותים האלה בקלות בעזרת קריאות פשוטות ל-API לניהול.

לפעמים נצטרך להשתמש באחד או יותר מהשירותים האלה בשרתי proxy של API בזמן ריצה. הסיבה לכך היא שהישויות כמו KeyValueMaps, אסימוני גישה ל-OAuth, מוצרי API, אפליקציות למפתחים, מפתחים, מפתחות צרכן וכו' מכילות מידע שימושי, כמו צמדי מפתח-ערך, מאפיינים מותאמים אישית או חלק מהפרופיל של המפתח.

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

  • כתובות URL של יעד עורפי
  • מאפייני סביבה
  • פרטי כניסה לאבטחה של מערכות קצה עורפי או מערכות של צד שלישי

באופן דומה, ייתכן שתרצו לקבל את רשימת מוצרי ה-API או את כתובת האימייל של המפתח שלכם בזמן הריצה. המידע הזה יהיה זמין כחלק מפרופיל האפליקציות למפתחים.

ניתן להשתמש בכל המידע הזה בזמן ריצה כדי להפעיל התנהגות דינמית במדיניות או קוד מותאם אישית ב-Apigee Edge.

דוגמת עיצוב

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

  • כשמשתמשים בממשקי API לניהול כדי לגשת למידע על הישויות כמו KeyValueMaps, אסימוני גישה של OAuth או לכל מטרה אחרת דרך שרתי proxy של API, התוצאה היא תלות בשרתי הניהול.
  • שרתי ניהול הם לא חלק מרכיב של זמן ריצה של Edge, ולכן יכול להיות שהם לא עם זמינות גבוהה.
  • כמו כן, ייתכן ששרתי ניהול לא יוקצו באותה רשת או באותה מרכז נתונים, ולכן הם עלולים ליצור זמני אחזור של הרשת בזמן הריצה.
  • הרשומות בשרתי הניהול נשמרות במטמון לפרק זמן ארוך יותר, כך שייתכן שלא נוכל לראות את הנתונים העדכניים באופן מיידי בשרתי ה-API של ה-API אם נבצע פעולות כתיבה וקריאה בתוך זמן קצר.
  • הגדלת מספר הצעדים שנעשים ברשת בזמן הריצה.

בדוגמת הקוד הבאה, הקריאה ל-API לניהול מתבצעת דרך קוד ה-JavaScript בהתאמה אישית, כדי לאחזר את המידע מ-KeyValueMap:

var response = httpClient.send('https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/keyvaluemaps/kvm_name')

אם שרת הניהול לא זמין, הקוד של JavaScript שמפעיל את הקריאה לממשק ה-API לניהול ייכשל. בעקבות זאת בקשת ה-API תיכשל.

השפעה

  • הוספת תלות בשרתי הניהול במהלך זמן ריצה. כשל בשרתי הניהול ישפיע על הקריאות ל-API.
  • צריך לאחסן את פרטי הכניסה של המשתמשים לממשקי API לניהול באופן מקומי או בחנות מאובטחת כלשהי, כמו KVM מוצפן.
  • ההשלכות על הביצועים כתוצאה מהפעלת שירות הניהול ברשת.
  • יכול להיות שהערכים המעודכנים לא יופיעו מיד בגלל תפוגת זמן ארוכה יותר של מטמון בשרתי הניהול.

שיטה מומלצת

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

  • כדי לגשת למידע מ-KeyValueMapOperations, צריך להשתמש במדיניות KeyValueMapOperations. הנה קוד לדוגמה שמראה איך לאחזר מידע מ-KeyValueMap:
    <!-- /antipatterns/examples/2-6.xml -->
    <KeyValueMapOperations mapIdentifier="urlMap" async="false"
        continueOnError="false" enabled="true" name="GetURLKVM">
      <DisplayName>GetURLKVM</DisplayName>
      <ExpiryTimeInSecs>86400</ExpiryTimeInSecs>
      <Scope>environment</Scope>
      <Get assignTo="urlHosti" index="2">
        <Key>
          <Parameter>urlHost_1</Parameter>
        </Key>
      </Get>
    </KeyValueMapOperations>
    
  • כדי לגשת למידע על מוצרי API, אפליקציות למפתחים, מפתחים, מפתחות צרכן וכו' בשרת ה-API של ה-API, אפשר לבצע אחת מהפעולות הבאות:
    • אם בתהליך של שרת ה-API יש מדיניות VerifyAPIKey, תוכלו לגשת למידע באמצעות משתני הזרימה שמולאו כחלק מהמדיניות הזו. לפניכם קוד לדוגמה שמראה איך לאחזר את השם ואת הפרטים שנוצרו על ידי אפליקציה למפתחים באמצעות JavaScript:
      <!-- /antipatterns/examples/2-7.xml -->
      print("Application Name ", context.getVariable(""verifyapikey. VerifyAPIKey.app.name"));
      print("Created by:", context.getVariable("verifyapikey. VerifyAPIKey.app.created_by"));
      
    • אם תהליך ה-API של שרת ה-API לא כולל מדיניות verificationAPIKey, תוכלו לגשת לפרופילים של מוצרי API, אפליקציות למפתחים וכו' באמצעות המדיניות 'ישות גישה' ו'חלץ משתנים':
      1. מאחזרים את הפרופיל של DeveloperApp באמצעות מדיניות AccessEntity:
        <!-- /antipatterns/examples/2-8.xml -->
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <AccessEntity async="false" continueOnError="false" enabled="true" name="GetDeveloperApp">
          <DisplayName>GetDeveloperApp</DisplayName>
          <EntityType value="app"></EntityType>
          <EntityIdentifier ref="developer.app.name" type="appname"/>
          <SecondaryIdentifier ref="developer.id" type="developerid"/>
        </AccessEntity>
        
      2. מחלצים את ה-appId מ-DeveloperApp באמצעות המדיניות extracts:
        <!-- /antipatterns/examples/2-9.xml -->
        <ExtractVariables name="Extract-Developer App-Info">
          <!--
            The source element points to the variable populated by AccessEntity policy.
            The format is <policy-type>.<policy-name>
            In this case, the variable contains the whole developer profile.
          -->
          <Source>AccessEntity.GetDeveloperApp"</Source>
          <VariablePrefix>developerapp</VariablePrefix>
          <XMLPayload>
            <Variable name="appld" type="string">
              <!-- You parse elements from the developer profile using XPath. -->
              <XPath>/App/AppId</XPath>
            </Variable>
          </XMLPayload>
        </ExtractVariables>
        

קריאה נוספת