אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
משתמשים במדיניות FlowCallout כדי לבצע קריאה ל-shared flow מ-proxy ל-API או מ-shared flow אחר.
בתהליך משותף, יוצרים רצף של שלבים שאפשר לעשות בהם שימוש חוזר בזמן הריצה מכמה מקומות. השלבים האלה מוטמעים כמדיניות, כמו ב-proxy ל-API. מדיניות FlowCallout מאפשרת להפעיל את התהליך המשותף מ-proxy ל-API ומתהליכים משותפים אחרים. היא פועלת כמו קריאה לפונקציה בשפת תכנות מסורתית.
- לדוגמה, נניח שיצרתם זרימת נתונים משותפת עם תכונות אבטחה כמו אימות מפתח API, אימות טוקן OAuth והגנה באמצעות ביטוי רגולרי. התהליך המשותף הזה מייצג את המוסכמה שלכם לבדיקת בקשות נכנסות. באמצעות מדיניות FlowCallout, אפשר להפעיל את התהליך המשותף הזה מכמה שרתי proxy של API.
- אפשר להתקשר לזרימה משותפת אחת מזרימה משותפת אחרת באמצעות הטמעה של מדיניות FlowCallout מתוך זרימה משותפת.
דוגמאות
אימות מפתח API בתהליך משותף
בדוגמה הזו, נעשה שימוש בתהליך משותף כדי לבצע משימות נפוצות שקשורות לאבטחה. בדוגמה הזו, תהליך העבודה המשותף מאמת מפתח API. פרוקסי של API וזרימות משותפות אחרות יכולים להשתמש במדיניות FlowCallout כדי לבצע קריאות לזרימה המשותפת הזו.
ההגדרה הבאה של תהליך משותף כוללת מדיניות Verify-API-Key שמופעלת כשקוראים לתהליך המשותף ממדיניות FlowCallout ב-proxy ל-API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SharedFlow name="default">
<Step>
<Name>Verify-API-Key</Name>
</Step>
</SharedFlow>המדיניות VerifyAPIKey בתהליך המשותף הקודם מאחזרת את ערך המפתח ומאמתת אותו.
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key">
<DisplayName>Verify API Key</DisplayName>
<APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey>מדיניות FlowCallout הבאה, שמשמשת ב-proxy ל-API, קוראת ל-תהליך משותף הקודם כדי לאמת את מפתח ה-API. חבילת ה-shared flow verify-apikey-shared (לא מוצגת כאן)
מגדירה את ה-shared flow באופן שבו חבילת APIProxy מגדירה proxy.
<FlowCallout async="false" continueOnError="false" enabled="true" name="Auth-Flow-Callout">
<DisplayName>Auth Flow Callout</DisplayName>
<SharedFlowBundle>verify-apikey-shared</SharedFlowBundle>
</FlowCallout>העברת פרמטרים לתהליך משותף
בדוגמה הזו מוסבר איך להעביר פרמטרים ממדיניות FlowCallout לזרימת נתונים משותפת. כאן, מדיניות FlowCallout קוראת ל-תהליך משותף שנועד לבצע פונקציות נפוצות של טיפול במחרוזות. הזרימה המשותפת כוללת JavaScript שמשרשר את הקלט שלה, ממיר את הקלט שלה לאותיות קטנות, או גם וגם. המדיניות FlowCallout מגדירה פרמטרים שמציינים את קלט המחרוזת, את הפלט ומה לעשות עם הקלט.
String-HandlerFlowCallout policy קוראת ל-shared flow, ומעבירה פרמטרים שמציינים את המשתנה לאחסון הפלט של ה-shared flow, את הפעולה של ה-shared flow שבה רוצים להשתמש ואת הקלט שבו רוצים להשתמש (כאן, מחרוזת מילולית, אבל יכול להיות גם משתנה של flow). רכיביParameterמציינים את השמות והערכים של משתנים ליצירה בזמן ריצה. התהליך המשותף יכול לאחזר את המשתנים האלה כדי להשתמש בהם בקוד שלו.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler"> <DisplayName>String Handler</DisplayName> <Parameters> <Parameter name="input">Gladys Kravitz</Parameter> <Parameter name="operations">concatenate tolowercase</Parameter> <Parameter name="outputVariable">string.handler.output</Parameter> </Parameters> <SharedFlowBundle>StringHandler</SharedFlowBundle> </FlowCallout>הזרימה המשותפת
defaultהבאה כוללת מדיניות JavaScriptSharedStringFunctionsשמופעלת כשהזרימה המשותפת נקראת ממדיניות FlowCallout.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SharedFlow name="default"> <Step> <Name>SharedStringFunctions</Name> </Step> </SharedFlow>בזרימת הנתונים המשותפת, מדיניות ה-JavaScript
SharedStringFunctionsהבאה מציינת את קובץ ה-JavaScript SharedStringFunctions.js עם הקוד להרצה.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="SharedStringFunctions"> <DisplayName>SharedStringFunctions</DisplayName> <Properties/> <ResourceURL>jsc://SharedStringFunctions.js</ResourceURL> </Javascript>
קוד ה-JavaScript הבא, SharedStringFunctions.js, מופעל מתוך
SharedStringFunctionsמדיניות JavaScript. הסקריפט הזה מאחזר ערכים ממשתנים שנוצרו מרכיבי המדיניות FlowCalloutParameter.// Input value from the calling API proxy. var handledString = context.getVariable("input"); // Variable to use for output from this script. var outputVariable = context.getVariable("outputVariable"); // A space-separated list of things to do to the input string. // Convert to lower case to handle unintentional capitals in configuration. var operation = context.getVariable("operations").toLowerCase(); // If "lowercase" was given as an operation, convert the input to lowercase. if (operation.includes("tolowercase")) { handledString = handledString.toLowerCase(); } // If "concatenate" was given as an operation, concatenate the input. if (operation.includes("concatenate")) { handledString = handledString.replace(/\s+/g, ''); } // Assign the resulting string to the output variable specified by // the calling API proxy. context.setVariable(outputVariable, handledString);
- ההרצה חוזרת ממדיניות JavaScript, אל התהליך המשותף, ואז אל מדיניות FlowCallout ב-proxy ל-API המקורי.
הפניה לרכיב
אלה הרכיבים והמאפיינים שאפשר להגדיר במדיניות הזו:
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
<DisplayName>Custom label used in UI</DisplayName>
<SharedFlowBundle>thereferencedsharedflowbundle</SharedFlowBundle>
</FlowCallout>מאפיינים של <FlowCallout>
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:
| מאפיין | תיאור | ברירת מחדל | נוכחות |
|---|---|---|---|
name |
השם הפנימי של המדיניות. הערך של המאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך יש להגדיר ל- |
false | אופציונלי |
enabled |
צריך להגדיר את הערך צריך להגדיר את הערך |
true | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
false | הוצא משימוש |
<DisplayName> רכיב
צריך להשתמש בנוסף למאפיין name כדי להוסיף תווית למדיניות
עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.
<DisplayName>Policy Display Name</DisplayName>
| ברירת מחדל |
לא רלוונטי אם משמיטים את הרכיב הזה, הערך של המאפיין |
|---|---|
| נוכחות | אופציונלי |
| סוג | מחרוזת |
אלמנט <SharedFlowBundle>
מציין את השם של התהליך המשותף שרוצים להפעיל. הערך של האלמנט הזה צריך להיות זהה לערך של מאפיין השם של אלמנט target SharedFlowBundle.
<SharedFlowBundle/>
בדוגמה הפשוטה ביותר, מציינים את השם של התהליך המשותף שמופעל כערך של הרכיב הזה. כלומר, הערך של האלמנט הזה צריך להיות זהה לערך המאפיין name
של הרכיב SharedFlow.
<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
| ברירת מחדל | לא רלוונטי |
| נוכחות |
חובה. |
| סוג | לא רלוונטי |
מאפיינים
ללא.
אלמנט <Parameter>
מציין פרמטר וערך (או מקור ערך) להעברה כמשתנה לזרימה המשותפת שאליה מתבצעת קריאה על ידי המדיניות הזו.
באמצעות פרמטר, אפשר לציין ערך (או משתנה שמכיל ערך) שצריך להעביר אותו ל-Shared Flow שהמדיניות קוראת לו. זה דומה מבחינה רעיונית להגדרת פרמטר בקריאה לפונקציה. בדומה לפרמטר של פונקציה, הערך של פרמטר FlowCallout יכול להשתנות בהתאם להקשר של הקריאה לזרימה המשותפת.
הפרמטרים של FlowCallout גלויים רק במהלך ההפעלה של התהליך המשותף.
תחביר
אפשר להשתמש באלמנט הזה עם כל אחת מצורות התחביר הבאות. שימו לב: כשמשתמשים בערך מילולי, הפורמט של הערך שאתם מציינים תלוי בקוד שמשתמש בו.
<!- A literal value in an attribute. --/> <Parameter name="parameter-name" value='parameter-value' /> <!- A reference to a variable in an attribute. --/> <Parameter name="parameter-name" ref='source-variable-name' /> <!- A literal value in the element content. --/> <Parameter name="parameter-name">parameter-value</Parameter> <!- An reference to an attribute in the element content. --/> <Parameter name="parameter-name">{source-variable-name}</Parameter>
דוגמה
המדיניות String-Handler FlowCallout מעבירה פרמטרים שמציינים איפה לאחסן את הפלט של התהליך המשותף ואיזה קלט להשתמש. רכיבי Parameter מציינים את השמות והערכים של משתנים שייווצרו בזמן הריצה. התהליך המשותף יכול לאחזר את המשתנים האלה כדי להשתמש בהם בקוד שלו.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler">
<DisplayName>String Handler</DisplayName>
<Parameters>
<Parameter name="input">Gladys Kravitz</Parameter>
<Parameter name="outputVariable">string.handler.output</Parameter>
</Parameters>
<SharedFlowBundle>StringHandler</SharedFlowBundle>
</FlowCallout>| ברירת מחדל | לא רלוונטי |
| נוכחות |
חובה. |
| סוג | לא רלוונטי |
מאפיינים
| מאפיין | תיאור | ברירת מחדל | נוכחות | סוג |
|---|---|---|---|---|
| שם | השם של משתנה זמן הריצה שייווצר באמצעות הפרמטר הזה. | ללא. | חובה. | מחרוזת |
| ref |
המשתנה שמכיל את הערך לשימוש בזמן הריצה. אם מציינים ערך מילולי לשימוש, צריך להשמיט את המאפיין הזה. |
ללא. | אופציונלי. | מחרוזת |
| ערך | הערך שבו יש להשתמש במשתנה של זמן הריצה שנוצר באמצעות הפרמטר הזה. לא מציינים את המאפיין הזה אם מציינים את שם המשתנה שצריך להיות מקור הערך. | ללא. | אופציונלי. | מחרוזת |
אלמנט <Parameters>
מציין את קבוצת הרכיבים <Parameter> שיועברו כמשתנים אל התהליך המשותף שנקרא על ידי המדיניות הזו.
תחביר
<Parameters> <Parameter name="parameter-name" value='parameter-value' /> </Parameters>
| ברירת מחדל | לא רלוונטי |
| נוכחות |
אופציונלי. |
| סוג | לא רלוונטי |
מאפיינים
ללא.
סכימות
משתני זרימה
משתני Flow מאפשרים התנהגות דינמית של מדיניות ושל תהליכים בזמן ריצה, על סמך כותרות HTTP, תוכן ההודעה או הקשר של Flow. מידע נוסף על משתני Flow זמין במאמר חומר עזר בנושא משתנים.
| משתנה | תיאור |
|---|---|
|
|
היקף: במהלך הביצוע של התהליך המשותף הערך של מאפיין השם של התהליך המשותף. |
|
|
היקף: במהלך הביצוע של התהליך המשותף שמצורף לנקודת ההתחברות של התהליך. השם של ה-hook של התהליך. |
הפניה לשגיאה
בקטע הזה מתוארים קודי התקלות והודעות השגיאה שמוחזרים, ומשתני השגיאה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת אם מפתחים כללים לתיקון תקלות. מידע נוסף זמין במאמר מה צריך לדעת על שגיאות מדיניות ועל טיפול בפגמים.
שגיאות בזמן ריצה
השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.
| קוד שגיאה | סטטוס HTTP | סיבה | תיקון |
|---|---|---|---|
flow.SharedFlowNotFound |
500 | התהליך המשותף לא קיים או שהתהליך המשותף קיים אבל לא נפרס. | build |
שגיאות בפריסה
לא רלוונטי
נושאים קשורים
- יצירת תהליכי עבודה משותפים: תהליכי עבודה משותפים לשימוש חוזר
- הפעלת תהליכים משותפים בכמה שרתי proxy: צירוף תהליך משותף באמצעות וו של תהליך