מדיניות PythonScript

מדיניות ניתנת להרחבה

הדף הזה רלוונטי ל-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

השם הפנימי של המדיניות. הערך של מאפיין name יכול להכיל אותיות, מספרים, רווחים, מקפים, קווים תחתונים ונקודות. הערך הזה לא יכול לחרוג מ-255 תווים.

אפשר להשתמש ברכיב <DisplayName> כדי לתת למדיניות תווית בשם אחר בשפה טבעית בכלי לעריכת פרוקסי בממשק הניהול.

לא רלוונטי חובה
continueOnError

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

הגדרה ל-true מאפשרת להמשיך את הביצוע של התהליך גם אחרי שמדיניות נכשלת. מידע נוסף:

FALSE אופציונלי
enabled

מגדירים את המדיניות למצב true כדי לאכוף אותה.

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

TRUE אופציונלי
async

המאפיין הזה הוצא משימוש.

FALSE הוצא משימוש

אלמנט <DisplayName>

משתמשים בו בנוסף למאפיין name כדי לתת למדיניות שם אחר בשפה טבעית, לסימון המדיניות בכלי לעריכת פרוקסי בממשק המשתמש לניהול.

<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל

לא רלוונטי

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

נוכחות אופציונלי
סוג 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.

שגיאות בהטמעה

השגיאות האלה יכולות להתרחש כשפורסים שרת proxy שמכיל את המדיניות הזו.

שם השגיאה מטרה תיקון
InvalidResourceUrlFormat אם הפורמט של כתובת ה-URL של המשאב שצוין ברכיב <ResourceURL> או ברכיב <IncludeURL> של מדיניות PythonScript לא תקין, פריסת ה-proxy ל-API תיכשל.
InvalidResourceUrlReference אם הרכיבים <ResourceURL> או <IncludeURL> מפנים לקובץ PythonScript שלא קיים, פריסת ה-proxy ל-API תיכשל. קובץ המקור שאליו יש הפניה חייב להיות קיים ברמת ה-proxy ל-API, הסביבה או הארגון.

משתני תקלות

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

משתנים כאשר: דוגמה
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>