המדיניות של PythonScript

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

מה

מדיניות הסקריפט של Python מאפשרת להוסיף פונקציונליות מותאמת אישית של Python לזרימה של שרת ה-proxy של ה-API, במיוחד כאשר הפונקציונליות שנחוצה לך מעבר למה שהמדיניות המוכנה מראש של Edge מספקת.

התמיכה בשפת Python מסופקת באמצעות גרסה 2.5.2 של Jython. ספריות של צד שלישי שמוסיפים חייבות להיות "Python טהור" (מוטמע רק ב-Python). מידע נוסף על הוספת ספריות זמין במאמר קובצי משאבים.

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

טעימות

מדיניות וסקריפט של Python

מדיניות בנושא Python Script

<?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> כדי להוסיף למדיניות בכלי לעריכת שרת ה-proxy לניהול ממשק משתמש עם שם בשפה טבעית אחרת.

לא רלוונטי נדרש
continueOnError

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

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

false אופציונלי
enabled

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

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

true אופציונלי
async

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

false הוצא משימוש

רכיב <DisplayName>

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

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

לא רלוונטי

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

נוכחות אופציונלי
תיאור מחרוזת

<ResourceURL>

הרכיב הזה מציין את קובץ Python הראשי שיופעל בתהליך ה-API. אפשר לאחסן את הקובץ הזה בהיקף של שרת ה-proxy של ה-API (בקטע /apiproxy/resources/py בחבילה של שרת ה-API של שרת ה-API, או בקטע Scripts בחלונית Navigator של עורך ה-API ), או בהיקף ההרשאות של הארגון או הסביבה לשימוש חוזר בכמה שרתי proxy של API, כפי שמתואר במאמר קובצי משאבים. הקוד שלך יכול להשתמש באובייקטים, בשיטות ובמאפיינים של מודל האובייקט של JavaScript.

<ResourceURL>py://myscript.py</ResourceURL>
ברירת מחדל: ללא
נוכחות: נדרש
סוג: מחרוזת

<IncludeURL>

המדיניות קובעת שקובץ Python ייטען כתלות בקובץ Python הראשי שצוין באמצעות האלמנט <ResourceURL>. הסקריפטים ייבדקו לפי הסדר שבו הם רשומים במדיניות.

צריך לכלול יותר ממשאב אחד של תלות ב-Python עם רכיבי <IncludeURL> נוספים.

<IncludeURL>py://myscript_dependency.py</IncludeURL>
ברירת מחדל: ללא
נוכחות: אופציונלי
סוג: מחרוזת

קודי שגיאה

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

שגיאות בזמן ריצה

השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.

קוד שגיאה סטטוס HTTP סיבה תיקון
steps.script.ScriptEvaluationFailed 500 המדיניות של PythonScript עלולה לגרום לשגיאות ScriptExecutionמניבות מספר סוגים שונים של שגיאות Script. בין סוגי השגיאות הנפוצים: NameError ו-ZeroDivisionError.

שגיאות בפריסה

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

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

נושאים קשורים