המדיניות של GrowFault

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

מה

הפונקציה יוצרת הודעה מותאמת אישית בתגובה לתנאי שגיאה. אפשר להשתמש ב-RaiseFault כדי להגדיר תגובת כשל שתוחזר לאפליקציה המבקשת כשמצב ספציפי מתרחש.

למידע כללי על טיפול בתקלות, ניתן לעיין במאמר טיפול בפגמים.

טעימות

תגובה במקרה של החזרה

בשימוש הנפוץ ביותר, נעשה שימוש ב-RaiseFault כדי להחזיר תגובת שגיאה מותאמת אישית לאפליקציה שמבקשת. לדוגמה, המדיניות הזו תחזיר את קוד הסטטוס 404 ללא מטען ייעודי (payload):

<RaiseFault name="404">
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
 <FaultResponse>
   <Set>
     <StatusCode>404</StatusCode>
     <ReasonPhrase>The resource requested was not found</ReasonPhrase>
   </Set>
 </FaultResponse>
</RaiseFault>

החזרת מטען ייעודי (payload) של FaultResponse

דוגמה מורכבת יותר כוללת החזרת מטען ייעודי (payload) מותאם אישית של תגובת טעות, עם כותרות HTTP וקוד סטטוס HTTP. בדוגמה הבאה תגובת התקלה מאוכלסת בהודעת XML שמכילה את קוד מצב ה-HTTP שהתקבל משירות הקצה העורפי, ובכותרת שמכילה את סוג התקלה שהתרחשה:

<RaiseFault name="ExceptionHandler">
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
 <FaultResponse>
   <Set>
     <Payload contentType="text/xml">
       <root>Please contact support@company.com</root>
     </Payload>
     <StatusCode>{response.status.code}</StatusCode>
     <ReasonPhrase>Server error</ReasonPhrase>
   </Set>
   <Add>
     <Headers>
       <Header name="FaultHeader">{fault.name}</Header>
     </Headers>
   </Add>
 </FaultResponse>
</RaiseFault>

בחומר העזר בנושא משתנים מופיעה רשימה של כל המשתנים שזמינים לאכלוס דינמי של הודעות FaultResponse

טיפול בשגיאות יתרונות מרכזיים של השירות


מידע על מדיניות RaiseFault

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

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

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

אפשר להשתמש ב-RaiseFault ב-ProxyEndpoint או ב-TargetEndpoint. בדרך כלל מצרפים Condition למדיניות RaiseFault. אחרי ש-RaiseFault יתבצע, המערכת של Apigee תבצע עיבוד תקלות רגיל, תבצע הערכה של Fault Rules, או אם לא הוגדרו כללי תקלה, היא תסיים את עיבוד הבקשה.

הפניה לרכיב

ההפניה לרכיב מתארת את הרכיבים והתכונות של מדיניות RaiseFault.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1">
    <DisplayName>RaiseFault 1</DisplayName>
    <FaultResponse>
        <AssignVariable>
          <Name/>
          <Value/>
        </AssignVariable>
        <Add>
            <Headers/>
        </Add>
        <Copy source="request">
            <Headers/>
            <StatusCode/>
            <ReasonPhrase/>
        </Copy>
        <Remove>
            <Headers/>
        </Remove>
        <Set>
            <Headers/>
            <Payload/>
            <ReasonPhrase/>
            <StatusCode/>
        </Set>
    </FaultResponse>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</RaiseFault>

מאפייני <RaiseFault>

<RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1">

בטבלה הבאה מפורטים המאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:

מאפיין התיאור ברירת המחדל נוכחות
name

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

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

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

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

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

false אופציונלי
enabled

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

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

true אופציונלי
async

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

false הוצא משימוש

רכיב <DisplayName>

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

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

לא רלוונטי

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

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

הרכיב <ignoreUnresolvedVariables>>

(אופציונלי) מתעלם מכל שגיאה של משתנה לא פתור בתהליך. ערכים חוקיים: true/false. ברירת המחדל היא true.

רכיב <FaultResponse>

(אופציונלי) מגדיר את הודעת התגובה שתוחזר ללקוח המבקש. ב-FaultResponse נעשה שימוש באותן הגדרות כמו במדיניות הקצאה של הודעה (לא זמינה ב-Apigee Edge לענן פרטי).

האלמנט <FaultResponse><הקצאהVariable>

מקצה ערך למשתנה זרימה של יעד. אם משתנה הזרימה לא קיים, AssignVariable יוצר אותו.

לדוגמה, תוכלו להשתמש בקוד הבא כדי להגדיר את המשתנה בשם myFaultVar במדיניות RaiseFault:

<FaultResponse>
  <AssignVariable>
    <Name>myFaultVar</Name>
    <Value>42</Value>
  </AssignVariable>
  ...
</FaultResponse>

לאחר מכן אפשר להתייחס למשתנה הזה בתבניות של הודעות בשלב מאוחר יותר במדיניות RaiseFault. בנוסף, מדיניות שמצורפת ל-FaultRule יכולה לגשת למשתנה. לדוגמה, במדיניות assignMessage הבאה משתמשים במשתנה שהוגדר ב-RaiseFault כדי להגדיר כותרת עליונה בתגובת השגיאה:

<AssignMessage enabled="true" name="Assign-Message-1">
  <Add>
    <Headers>
      <Header name="newvar">{myFaultVar}</Header>
    </Headers>
  </Add>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

התחביר של <AssignVariable> במדיניות RaiseFault זהה לתחביר של הרכיב <AssignVariable> במדיניות להקצאת הודעה. שימו לב שהפונקציונליות הזו לא זמינה כרגע ב-Apigee Edge לענן פרטי.

האלמנט <FaultResponse><Add>/<Headers>

הוספת כותרות HTTP להודעת השגיאה. שימו לב שהכותרת הריקה <Add><Headers/></Add> לא מוסיפה כותרת. הדוגמה הזו מעתיקה את הערך של משתנה הזרימה request.user.agent לכותרת.

<Add>
    <Headers>
        <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
</Add>

ברירת מחדל:

לא רלוונטי

נוכחות:

אופציונלי

סוג:

מחרוזת

רכיב <FaultResponse><Copy>

מעתיק את המידע מתוך ההודעה שצוינה במאפיין source ל בהודעת השגיאה.

    <Copy source="request">
        <Headers/>
        <StatusCode/>
        <ReasonPhrase/>
    </Copy>

ברירת מחדל:

לא רלוונטי

נוכחות:

אופציונלי

סוג:

מחרוזת

מאפיינים

 <Copy source="response">
מאפיין התיאור נוכחות תיאור
source

מציין את אובייקט המקור של העותק.

  • אם לא מציינים את source, המערכת מתייחסת אליו כאל הודעה פשוטה. לדוגמה, אם המדיניות נמצאת בתהליך הבקשה, המקור מוגדר כברירת מחדל לאובייקט request. אם המדיניות כלולה בתהליך התגובה, ברירת המחדל היא האובייקט response. אם לא משמיטים את source, אפשר להשתמש בהפניה מוחלטת למשתנה זרימה כמקור העותק. לדוגמה, אפשר לציין את הערך כך: {request.header.user-agent}.
  • אם לא ניתן לפענח את משתנה המקור, או שהוא מפוענח לסוג שאינו הודעה, <Copy> לא יגיב.
אופציונלי מחרוזת

הרכיב <FaultResponse><Copy>/<Headers>

מעתיק את כותרת ה-HTTP שצוינה מהמקור להודעת השגיאה. כדי להעתיק את כל הכותרות, צריך לציין <Copy><Headers/></Copy>.

<Copy source='request'>
    <Headers>      
        <Header name="headerName"/>
    </Headers> 
</Copy>

אם יש כמה כותרות עם אותו שם, צריך להשתמש בתחביר הבא:

<Copy source='request'>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
</Copy>

הדוגמה הזו מעתיקה את 'h1', 'h2' ואת הערך השני של 'h3'. אם ל-h3 יש רק ערך אחד, הוא לא מועתק.

ברירת מחדל:

לא רלוונטי

נוכחות:

אופציונלי

סוג:

מחרוזת

הרכיב <FaultResponse><Copy>/<StatusCode>

קוד מצב ה-HTTP להעתקה מהאובייקט שצוין במאפיין source אל הודעת השגיאה.

<Copy source='response'>
    <StatusCode>404</StatusCode>      
</Copy>

ברירת מחדל:

false

נוכחות:

אופציונלי

סוג:

מחרוזת

הרכיב <FaultResponse><Copy>/<ReasonPhrase>

תיאור הסיבה להעתקה מהאובייקט שצוין במאפיין המקור להודעת השגיאה.

<Copy source='response'>     
    <ReasonPhrase>The resource requested was not found.</ReasonPhrase>     
</Copy>

ברירת מחדל:

false

נוכחות:

אופציונלי

סוג:

מחרוזת

הרכיב <FaultResponse><Remove>/<Headers>

מסיר מהודעת השגיאה את כותרות ה-HTTP שצוינו. כדי להסיר את כל הכותרות, צריך לציין <Remove><Headers/></Remove>. הדוגמה הזו מסירה את הכותרת user-agent מההודעה.

<Remove>     
    <Headers>      
        <Header name="user-agent"/>     
    </Headers> 
</Remove>

אם יש כמה כותרות עם אותו שם, צריך להשתמש בתחביר הבא:

<Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
</Remove>

דוגמה זו מסירה את "h1" , "h2" ואת הערך השני של "h3". אם ל-h3 יש רק ערך אחד, הוא לא יוסר.

ברירת מחדל:

לא רלוונטי

נוכחות:

אופציונלי

סוג:

מחרוזת

רכיב <FaultResponse><Set>

מגדיר מידע בהודעת השגיאה.

    <Set>
        <Headers/>
        <Payload> </Payload>
        <StatusCode/>
        <ReasonPhrase/>
    </Set>

ברירת מחדל:

לא רלוונטי

נוכחות:

אופציונלי

סוג:

לא רלוונטי

רכיב <FaultResponse>/<Set>/<Headers>

מגדירה או מחליפה כותרות HTTP בהודעת השגיאה. שימו לב שהכותרת הריקה <Set><Headers/></Set> לא מגדירה אף כותרת. בדוגמה הזו, הכותרת user-agent מוגדרת למשתנה ההודעה שצוין באמצעות הרכיב <AssignTo>.

<Set>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>     
    </Headers>
</Set>

ברירת מחדל:

לא רלוונטי

נוכחות:

אופציונלי

סוג:

מחרוזת

רכיב <FaultResponse>/<Set>/<Payload>

מגדיר את המטען הייעודי (payload) של הודעת השגיאה.

<Set>
    <Payload contentType="text/plain">test1234</Payload>
</Set>

צריך להגדיר מטען ייעודי (payload) של JSON:

<Set>
    <Payload contentType="application/json">
        {"name":"foo", "type":"bar"}
    </Payload>
</Set>

במטען ייעודי של JSON, אפשר להוסיף משתנים באמצעות המאפיינים variablePrefix ו-variableSuffix עם תווי מפריד כמו בדוגמה הבאה.

<Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
        {"name":"foo", "type":"@variable_name#"}
    </Payload>
</Set>

או, החל מגרסה 16.08.17 בענן, ניתן גם להשתמש בסוגריים מסולסלים כדי להוסיף משתנים:

<Set>
    <Payload contentType="application/json">
        {"name":"foo", "type":"{variable_name}"}
    </Payload>
</Set>

מגדירים מטען ייעודי (payload) מעורב ב-XML:

<Set>
    <Payload contentType="text/xml">
        <root>
          <e1>sunday</e1>
          <e2>funday</e2>
          <e3>{var1}</e3>
    </Payload>
</Set>

ברירת מחדל:

נוכחות:

אופציונלי

סוג:

מחרוזת

מאפיינים

 
<Payload contentType="content_type" variablePrefix="char" variableSuffix="char">
מאפיין התיאור נוכחות תיאור
contentType

אם צוין contentType, הערך שלו מוקצה לכותרת Content-Type.

אופציונלי מחרוזת
variablePrefix אפשר לציין את התו המפריד הראשון במשתנה זרימה, כי מטענים ייעודיים (payloads) של JSON לא יכולים להשתמש בתו "{" שמוגדר כברירת מחדל. אופציונלי צ'אר
variableSuffix אפשר לציין את התו המפריד האחרון במשתנה זרימה, כי מטענים ייעודיים (payloads) של JSON לא יכולים להשתמש בתו '}' המוגדר כברירת מחדל. אופציונלי צ'אר

אלמנט <FaultResponse>/<Set>/<StatusCode>

הגדרת קוד הסטטוס של התשובה.

<Set source='request'>
    <StatusCode>404</StatusCode>
</Set>

ברירת מחדל:

false

נוכחות:

אופציונלי

סוג:

בוליאני

אלמנט <FaultResponse>/<Set>/<ReasonPhrase>

הגדרת הביטוי של הסיבה לתשובה.

<Set source='request'>     
    <ReasonPhrase>The resource requested was not found.</ReasonPhrase>
</Set>

ברירת מחדל:

false

נוכחות:

אופציונלי

סוג:

בוליאני

הרכיב <ShortFaultReason>

מציינת סיבה קצרה לתקלה בתגובה:

<ShortFaultReason>true|false</ShortFaultReason>

כברירת מחדל, סיבת התקלה בתגובה של המדיניות היא:

"fault":{"faultstring":"Raising fault. Fault name : Raise-Fault-1","detail":{"errorcode":"errorCode"}}}

כדי שההודעה תהיה קריאה יותר, אפשר להגדיר את הרכיב <ShortFaultReason> כ-true, וכך לקצר את ה-faultstring כך שיכלול רק את שם המדיניות:

"fault":{"faultstring":"Raise-Fault-1","detail":{"errorcode":"errorCode"}}}

ערכים חוקיים: true/false(ברירת מחדל).

ברירת מחדל:

false

נוכחות:

אופציונלי

סוג:

בוליאני

משתני זרימה

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

משתנה תיאור הרשאה התיאור
fault.name מחרוזת קריאה בלבד כשמדיניות RaiseFault מופעלת, המשתנה הזה תמיד מוגדר למחרוזת RaiseFault.
fault.type מחרוזת קריאה בלבד מחזירה את סוג הטעות בשגיאה, ואם הוא לא זמין, היא מחזירה מחרוזת ריקה.
fault.category מחרוזת קריאה בלבד מחזירה את קטגוריית התקלה בשגיאה, ואם היא לא זמינה, היא מחזירה מחרוזת ריקה.

שימוש לדוגמה ב-RaiseFault

בדוגמה הבאה נעשה שימוש בתנאי כדי לאכוף את הנוכחות של queryparam עם השם zipcode בבקשה הנכנסת. אם השדה queryparam לא קיים, התהליך יוביל ליצירת טעות באמצעות RaiseFault:

<Flow name="flow-1">
  <Request>
    <Step>
        <Name>RF-Error-MissingQueryParam</Name>
        <Condition>request.queryparam.zipcode = null</Condition>
    </Step>
   ...
   </Request>
   ...
   <Condition>(proxy.pathsuffix MatchesPath "/locations") and (request.verb = "GET")</Condition>
</Flow>
התמונה הבאה ממחישה מה יהיה ב-RaiseFault:
<RaiseFault name='RF-Error-MissingQueryParam'>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <FaultResponse>
    <Set>
      <Payload contentType='application/json'>{
  "error" : {
    "code" : 400.02,
    "message" : "invalid request. Pass a zipcode queryparam."
  }
}
</Payload>
      <StatusCode>400</StatusCode>
      <ReasonPhrase>Bad Request</ReasonPhrase>
    </Set>
  </FaultResponse>
</RaiseFault>

הפניה לשגיאות

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

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

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

קוד שגיאה סטטוס HTTP סיבה
steps.raisefault.RaiseFault 500 הצגת מחרוזת השגיאה.

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

ללא.

משתני שבר

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

משתנים מיקום דוגמה
fault.name="fault_name" fault_name הוא שם התקלה, כפי שמפורט בטבלה שגיאות זמן ריצה שלמעלה. שם הכשל הוא החלק האחרון של קוד השגיאה. fault.name = "RaiseFault"
raisefault.policy_name.failed policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לתקלה. raisefault.RF-ThrowError.failed = true

דוגמה לשגיאה

{
   "fault":{
      "detail":{
         "errorcode":"steps.raisefault.RaiseFault"
      },
      "faultstring":"Raising fault. Fault name: [name]"
   }
}

סכימה

כל סוג מדיניות מוגדר על ידי סכימת XML (.xsd). לידיעתך, סכימות המדיניות זמינות ב-GitHub.

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

כדאי לעיין בטיפול בשגיאות