אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
ל-Edge יש כלי עזר עוצמתי שנקרא 'ממשקי ניהול', שמציע שירותים כמו:
- פריסה או ביטול פריסה של שרתי proxy של API
- הגדרת מארחים וירטואליים, מאגרי מפתחות, מאגרי אישורים וכו'.
- יצירה, מחיקה או עדכון של ישויות כמו KeyValueMaps, מוצרי API, אפליקציות למפתחים, מפתחים, מפתחות צרכן וכו'.
- אחזור מידע על הישויות האלה
הגישה לשירותים האלה מתאפשרת דרך רכיב שנקרא שרת ניהול בפלטפורמת Apigee Edge. אפשר להפעיל את השירותים האלה בקלות באמצעות קריאות פשוטות ל-Management API.
לפעמים אנחנו צריכים להשתמש באחד או יותר מהשירותים האלה מ-API Proxies בזמן ריצה. הסיבה לכך היא שהישויות, כמו KeyValueMaps, OAuth Access Tokens, API Products, Developer Apps, Developers, Consumer Keys וכו', מכילות מידע שימושי בצורה של צמדי מפתח/ערך, מאפיינים מותאמים אישית או כחלק מהפרופיל שלהן.
לדוגמה, אפשר לאחסן את המידע הבא ב-KeyValueMap כדי לשפר את האבטחה שלו ולאפשר גישה אליו בזמן ריצה:
- כתובות יעד של ה-Back-end
- מאפייני הסביבה
- פרטי כניסה מאובטחים של מערכות עורפיות או של צד שלישי
באופן דומה, יכול להיות שתרצו לקבל את רשימת מוצרי ה-API או את כתובת האימייל של המפתח בזמן הריצה. המידע הזה יהיה זמין כחלק מפרופיל האפליקציות של המפתח.
אפשר להשתמש בכל המידע הזה בזמן ריצה כדי להפעיל התנהגות דינמית במדיניות או בקוד מותאם אישית ב-Apigee Edge.
תבנית אנטי
ממשקי ה-API לניהול הם מועדפים ושימושיים למשימות ניהול, ואין להשתמש בהם לביצוע לוגיקת זמן ריצה בזרימת API Proxy. הסיבות לכך הן:
- שימוש בממשקי API לניהול כדי לגשת למידע על ישויות כמו KeyValueMaps, אסימוני גישה ל-OAuth או לכל מטרה אחרת מ-API Proxies מוביל לתלות בשרתי ניהול.
- שרתי הניהול לא נכללים ברכיב זמן הריצה של Edge, ולכן יכול להיות שהם לא יהיו זמינים באופן גבוה.
- יכול להיות ששרתי הניהול לא יוקצו באותה רשת או באותו מרכז נתונים, ולכן יכול להיות שיהיו השהיות ברשת בזמן הריצה.
- הערכים בשרתי הניהול נשמרים במטמון לתקופה ארוכה יותר, ולכן יכול להיות שלא נוכל לראות את הנתונים העדכניים באופן מיידי ב-API Proxies אם נבצע פעולות כתיבה וקריאה בפרק זמן קצר.
- היא מגדילה את מספר הקפיצות ברשת בזמן הריצה.
בדוגמת הקוד שבהמשך, הקריאה ל-Management API מתבצעת באמצעות קוד JavaScript מותאם אישית כדי לאחזר את המידע מ-KeyValueMap:
var response = httpClient.send('https://api.enterprise.apigee.com/v1/o/org_name/e/env_name/keyvaluemaps/kvm_name')
אם שרת הניהול לא זמין, קוד ה-JavaScript שמפעיל את הקריאה ל-Management API ייכשל. כתוצאה מכך, בקשת ה-API נכשלת.
השפעה
- מוסיף תלות בשרתי ניהול במהלך זמן הריצה. כל כשל בשרתי הניהול ישפיע על קריאות ה-API.
- צריך לאחסן את פרטי הכניסה של המשתמש לממשקי ניהול API באופן מקומי או במאגר מאובטח כלשהו, כמו Encrypted KVM.
- השלכות על הביצועים כתוצאה מהפעלת שירות הניהול ברשת.
- יכול להיות שלא תראו את הערכים המעודכנים באופן מיידי בגלל תפוגה ארוכה יותר של מטמון בשרתי הניהול.
שיטה מומלצת
יש דרכים יעילות יותר לאחזור מידע מישויות כמו KeyValueMaps, API Products, DeveloperApps, Developers, Consumer Keys וכו' בזמן ריצה. הנה כמה דוגמאות:
- כדי לגשת למידע מ-KeyValueMaps, צריך להשתמש במדיניות 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, אפליקציות למפתחים, מפתחים, מפתחות צרכנים וכו' בשרת ה-proxy של ה-API, אפשר לבצע אחת מהפעולות הבאות:
- אם בתהליך של ה-API Proxy מוגדרת מדיניות VerifyAPIKey, אפשר לגשת למידע באמצעות משתני התהליך שאוכלסו כחלק מהמדיניות הזו. הנה קוד לדוגמה שמראה איך מאחזרים את השם ואת פרטי created_by של אפליקציית מפתח באמצעות 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 Proxy flow אין מדיניות VerifyAPIKey, אפשר לגשת לפרופילים של API Products, Developer Apps וכו' באמצעות מדיניות Access Entity ו-Extract Variables:
- שליפת הפרופיל של 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>
- מחלקים את
appIdמ-DeveloperApp באמצעות המדיניות ExtractVariables:<!-- /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>
- שליפת הפרופיל של DeveloperApp באמצעות מדיניות AccessEntity:
- אם בתהליך של ה-API Proxy מוגדרת מדיניות VerifyAPIKey, אפשר לגשת למידע באמצעות משתני התהליך שאוכלסו כחלק מהמדיניות הזו. הנה קוד לדוגמה שמראה איך מאחזרים את השם ואת פרטי created_by של אפליקציית מפתח באמצעות JavaScript: