הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
מדיניות Python Script מאפשרת להוסיף פונקציונליות מותאמת אישית של Python לזרימת ה-proxy ל-API, במיוחד אם הפונקציונליות שאתם צריכים חורגת מהפונקציונליות שמספקות מדיניות Apigee מוכנה מראש.
המדיניות הזו היא מדיניות שניתנת להרחבה, והשימוש בה עשוי להשפיע על העלויות או על הניצול, בהתאם לרישיון שלכם ל-Apigee. למידע על סוגי מדיניות והשלכות השימוש, אפשר לעיין במאמר בנושא סוגי מדיניות.
התמיכה בשפת Python ניתנת דרך Jython בגרסה 2.5.2. ספריות של צד שלישי שמוסיפים צריכות להיות 'Python טהור' (כלומר, מיושמות רק ב-Python). מידע נוסף על הוספת ספריות זמין במאמר קבצי משאבים.
מדיניות Python לא מכילה קוד בפועל. במקום זאת, מדיניות Python מפנה למשאב Python ומגדירה את השלב בתהליך העבודה של ה-API שבו מופעל סקריפט Python. אפשר להעלות את הסקריפט דרך כלי העריכה של ה-proxy בממשק המשתמש של Apigee, או לכלול אותו בספרייה /resources/py ב-API proxies שאתם מפתחים באופן מקומי.
דוגמאות
מדיניות וסקריפט של Python
מדיניות בנושא סקריפט Python
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Script name="Python-1"> <DisplayName>Python-1</DisplayName> <ResourceURL>py://myscript.py</ResourceURL> </Script>
בדוגמה הזו, הרכיב ResourceURL מציין את משאב סקריפט Python הרלוונטי.
סקריפט Python
כאן מפורט מה אפשר לכלול בסקריפט Python עצמו.
import base64 username = flow.getVariable("request.formparam.client_id") password = flow.getVariable("request.formparam.client_secret") base64string = base64.encodestring('%s:%s' % (username, password))[:-1] authorization = "Basic "+base64string flow.setVariable("authorizationParam",authorization)
הפניה לרכיב
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Script name="Python-1"> <DisplayName>Python-1</DisplayName> <ResourceURL>py://myscript.py</ResourceURL> <IncludeURL>py://myscript_dependency.py</IncludeURL> </Script>
בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:
| מאפיין | תיאור | ברירת מחדל | נוכחות |
|---|---|---|---|
name |
השם הפנימי של המדיניות. הערך של מאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
מגדירים את הערך הגדרה ל- |
FALSE | אופציונלי |
enabled |
מגדירים את המדיניות למצב מגדירים את הערך |
TRUE | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
FALSE | הוצא משימוש |
אלמנט <DisplayName>
משתמשים בו בנוסף למאפיין name כדי לתת למדיניות שם אחר בשפה טבעית, לסימון המדיניות בכלי לעריכת פרוקסי בממשק המשתמש לניהול.
<DisplayName>Policy Display Name</DisplayName>
| ברירת מחדל |
לא רלוונטי אם לא מציינים את הרכיב הזה, המערכת משתמשת בערך של המאפיין |
|---|---|
| נוכחות | אופציונלי |
| סוג | String |
רכיב<ResourceURL>
האלמנט הזה מציין את קובץ ה-Python הראשי שיפעל בתהליך של ה-API. אפשר לאחסן את הקובץ הזה בהיקף של שרת ה-proxy ל-API (בקטע /apiproxy/resources/py בחבילת שרת ה-proxy ל-API או בקטע Scripts בחלונית Navigator של כלי העריכה של שרת ה-proxy ל-API), או בהיקף של הארגון או הסביבה לשימוש חוזר בכמה שרתי proxy ל-API, כמו שמתואר בקובצי משאבים. הקוד יכול להשתמש באובייקטים, בשיטות ובמאפיינים של מודל האובייקטים של JavaScript.
<ResourceURL>py://myscript.py</ResourceURL>
| ברירת מחדל: | ללא |
| נוכחות: | חובה |
| סוג: | String |
רכיב<IncludeURL>
מציין קובץ Python שייטען כתלות בקובץ ה-Python הראשי שצוין באמצעות הרכיב <ResourceURL>. הסקריפטים ייבדקו לפי הסדר שבו הם מופיעים במדיניות.
כוללים יותר ממקור תלות אחד של Python עם רכיבי <IncludeURL> נוספים.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
| ברירת מחדל: | ללא |
| נוכחות: | אופציונלי |
| סוג: | String |
קודי שגיאה
בקטע הזה מתוארים קודי התקלות והודעות השגיאה שמוחזרים, ומשתני התקלות שמוגדרים על ידי Apigee כשמדיניות כזו מפעילה שגיאה. חשוב לדעת את המידע הזה אם מפתחים כללי תקלות לטיפול בתקלות. מידע נוסף על שגיאות שקשורות למדיניות ועל טיפול בשגיאות
שגיאות זמן ריצה
השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.
| קוד תקלה | סטטוס HTTP | מטרה | תיקון |
|---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 |
מדיניות PythonScript יכולה להחזיר כמה סוגים שונים של שגיאות ScriptExecutionFailed. סוגי השגיאות הנפוצים ביותר הם NameError ו-ZeroDivisionError. | build |
שגיאות בהטמעה
השגיאות האלה יכולות להתרחש כשפורסים שרת proxy שמכיל את המדיניות הזו.
| שם השגיאה | מטרה | תיקון |
|---|---|---|
InvalidResourceUrlFormat |
אם הפורמט של כתובת ה-URL של המשאב שצוין ברכיב <ResourceURL> או ברכיב <IncludeURL> של מדיניות PythonScript לא תקין, פריסת ה-proxy ל-API תיכשל. |
build |
InvalidResourceUrlReference |
אם הרכיבים <ResourceURL> או <IncludeURL> מפנים לקובץ PythonScript שלא קיים, פריסת ה-proxy ל-API תיכשל. קובץ המקור שאליו יש הפניה חייב להיות קיים ברמת ה-proxy ל-API, הסביבה או הארגון. |
build |
משתני תקלות
המשתנים האלה מוגדרים כשהמדיניות הזו מפעילה שגיאה בזמן הריצה. מידע נוסף על שגיאות שקשורות למדיניות
| משתנים | כאשר: | דוגמה |
|---|---|---|
fault.name="fault_name" |
fault_name הוא שם התקלה, כפי שמופיע בטבלה שגיאות בזמן ריצה שלמעלה. שם התקלה הוא החלק האחרון של קוד התקלה. | fault.name Matches "ScriptExecutionFailed" |
pythonscript.policy_name.failed |
policy_name הוא השם שהמשתמש הגדיר למדיניות שגרמה לשגיאה. | pythonscript.PythonScript-1.failed = true |
דוגמה לתגובת שגיאה
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"", "detail": { "errorcode": "steps.script.ScriptExecutionFailed" } } }
דוגמה לכלל שגיאה
<FaultRule name="PythonScript Policy Faults"> <Step> <Name>AM-CustomErrorResponse</Name> <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition> </Step> <Condition>(pythonscript.PythonScript-1.failed = true) </Condition> </FaultRule>