‫ServiceCallout policy

אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X.
מידע

מה

המדיניות Service Callout (קריאה לשירות) מאפשרת לכם לבצע קריאה לשירות אחר מתוך זרימת ה-proxy ל-API. אפשר לבצע קריאות לשירות חיצוני (כמו נקודת קצה של שירות RESTful חיצוני) או לשירותים פנימיים (כמו proxy ל-API באותו ארגון ובאותה סביבה).

  • בתרחיש שימוש חיצוני, אתם מבצעים קריאה ל-API של צד שלישי שהוא חיצוני לשרת ה-proxy. התגובה מ-API של צד שלישי מנותחת ומוכנסת להודעת התגובה של ה-API שלכם, וכך הנתונים מועשרים ומשולבים עבור משתמשי הקצה של האפליקציה. אפשר גם לשלוח בקשה באמצעות מדיניות Service Callout בתהליך הבקשה, ואז להעביר את המידע בתגובה אל TargetEndpoint של ה-proxy ל-API.
  • בתרחיש שימוש אחר, אתם קוראים לשרת proxy שנמצא באותו ארגון ובאותה סביבה שבה נמצא השרת שממנו אתם קוראים. לדוגמה, יכול להיות שזה יהיה שימושי אם יש לכם שרת proxy שמציע פונקציונליות נפרדת ברמה נמוכה, ששרתי proxy אחרים ישתמשו בה. לדוגמה, שרת proxy שחושף פעולות של יצירה, קריאה, עדכון ומחיקה עם מאגר נתונים בעורף יכול להיות שרת proxy היעד של כמה שרתי proxy אחרים שחושפים את הנתונים ללקוחות.

המדיניות תומכת בבקשות באמצעות HTTP ו-HTTPS.

דוגמאות

שיחה מקומית לשרת proxy פנימי

<LocalTargetConnection>
    <APIProxy>data-manager</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

בדוגמה הזו נוצרת קריאה לשרת proxy מקומי של API (כלומר, שרת proxy באותו ארגון ובאותה סביבה) שנקרא data-manager, ומצוינת נקודת הקצה של ה-proxy ששמה הוא default.

כתובת URL כמשתנה

<HTTPTargetConnection>
    <URL>http://example.com/{request.myResourcePath}</URL>
</HTTPTargetConnection>

בדוגמה הזו נעשה שימוש במשתנה בכתובת ה-URL כדי לאכלס באופן דינמי את כתובת ה-URL של היעד. אי אפשר לציין את חלק הפרוטוקול של כתובת ה-URL, ‏ http://‎, באמצעות משתנה. בנוסף, צריך להשתמש במשתנים נפרדים לחלק הדומיין של כתובת ה-URL ולשאר כתובת ה-URL.

בקשת המרת כתובות לקואורדינטות (geocoding) / הגדרה של Google

<ServiceCallout name="ServiceCallout-GeocodingRequest1">
    <DisplayName>Inline request message</DisplayName>
    <Request variable="authenticationRequest">
      <Set>
        <QueryParams>
          <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
          <QueryParam name="region">{request.queryparam.country}</QueryParam>
          <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
      </Set>
    </Request>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>
http://maps.googleapis.com/maps/api/geocode/json

במקום להשתמש במדיניות כמו Assign Message כדי ליצור את אובייקט הבקשה, אפשר להגדיר אותו ישירות במדיניות Service Callout. בדוגמה הזו, מדיניות Service Callout (קריאה לשירות) מגדירה את הערכים של שלושה פרמטרים של שאילתה שמועברים לשירות החיצוני. אפשר ליצור הודעת בקשה שלמה במדיניות Service Callout שמציינת מטען ייעודי (payload), סוג קידוד כמו application/xml, כותרות, פרמטרים של טופס וכו'.

דוגמה נוספת שבה הבקשה נוצרת לפני שהיא מגיעה למדיניות בנושא Service Callout:

<ServiceCallout name="ServiceCallout-GeocodingRequest2">
    <Request clearPayload="false" variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

תוכן הודעת הבקשה מחולץ ממשתנה שנקרא GeocodingRequest (שיכול להיות מאוכלס, למשל, על ידי מדיניות AssignMessage). הודעת התגובה מוקצית למשתנה שנקרא GeocodingResponse, שבו היא זמינה לניתוח על ידי מדיניות Extract Variables או על ידי קוד מותאם אישית שנכתב ב-JavaScript או ב-Java. המדיניות ממתינה 30 שניות לתשובה מ-Google Geocoding API לפני שהיא פוסקת.

דוגמה מלאה ל-proxy ל-API שמשתמש ב-Service Callout הזה, יחד עם כללי המדיניות Assign Message ו-Extract Variables, מופיעה במאמר שימוש בהרכבת כללי מדיניות.

התקשרות לשרתי יעד

<ServiceCallout async="false" continueOnError="false" enabled="true" name="service-callout">
    <DisplayName>service-callout</DisplayName>
    <Properties/>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </Request>
    <Response>myResponse</Response>
    <HTTPTargetConnection>
        <LoadBalancer>
            <Algorithm>RoundRobin</Algorithm>
            <Server name="httpbin"/>
            <Server name="yahoo"/>
        </LoadBalancer>
        <Path>/get</Path>
    </HTTPTargetConnection>
</ServiceCallout>

המדיניות הזו משתמשת במאפיין LoadBalancer כדי לקרוא לשרתי היעד ולבצע איזון עומסים ביניהם. בדוגמה הזו, העומס מתחלק בין שני שרתי יעד בשם httpbin ו-yahoo. מידע על הגדרת שרתי יעד לפרוקסי והגדרת איזון עומסים זמין במאמר איזון עומסים בין שרתי קצה עורפיים.


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

יש הרבה תרחישים שבהם אפשר להשתמש במדיניות Service Callout ב-proxy ל-API. לדוגמה, אפשר להגדיר proxy ל-API כדי לבצע קריאות לשירות חיצוני לצורך אספקת נתונים של מיקום גאוגרפי, ביקורות מלקוחות, פריטים מקטלוג קמעונאי של שותף וכן הלאה.

בדרך כלל משתמשים ב-Callout עם שני כללי מדיניות נוספים: Assign Message ו-Extract Variables.

  • Request: Assign Message מאכלס את הודעת הבקשה שנשלחת לשירות המרוחק.
  • תשובה: הרכיב Extract Variables מנתח את התשובה ומחלץ תוכן ספציפי.

ההרכב האופייני של מדיניות Service Callout כולל:

  1. הקצאת מדיניות להודעה: יוצרת הודעת בקשה, מאכלסת כותרות HTTP, פרמטרים של שאילתה, מגדירה את הפועל של HTTP וכו'.
  2. מדיניות Service Callout: מפנה להודעה שנוצרה על ידי מדיניות Assign Message, מגדירה כתובת URL של יעד לקריאה החיצונית ומגדירה שם לאובייקט התגובה ששירות היעד מחזיר.

    כדי לשפר את הביצועים, אפשר גם לשמור במטמון את התגובות של Service Callout, כמו שמתואר בשרשור הזה בקהילת Apigee: ‏ How can I store the results of the ServiceCallout policy in cache and later retrieve it from cache?.
  3. מדיניות Extract Variables (חילוץ משתנים): בדרך כלל מגדירה ביטוי JSONPath או XPath שמנתח את ההודעה שנוצרה על ידי Service Callout. לאחר מכן המדיניות מגדירה משתנים שמכילים את הערכים שנותחו מהתגובה של רכיב Service Callout.

במאמר שימוש בהרכבת מדיניות מופיע קוד מלא של proxy ל-API שמשתמש במדיניות Service Callout יחד עם המדיניות Assign Message ו-Extract Variables.

טיפול מותאם אישית בשגיאות

הפניה לרכיב

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

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Remove>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
         </Remove>
         <Copy>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Copy>
        <Add>
            <Headers/>
            <QueryParams/>
            <FormParams/>
        </Add>
        <Set>
            <Headers/>
            <QueryParams/>
            <FormParams/>
            <Payload/>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Set>
    </Request>
    <Response>calloutResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
        <URL>http://example.com</URL>
        <LoadBalancer/>
        <SSLInfo/>
        <Properties/>
    </HTTPTargetConnection>
    <LocalTargetConnection>
        <APIProxy/>
        <ProxyEndpoint/>
        <Path/>
    </LocalTargetConnection>
</ServiceCallout>

מאפיינים של <ServiceCallout>

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">

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

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

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

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

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

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

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

false אופציונלי
enabled

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

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

true אופציונלי
async

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

false הוצא משימוש

&lt;DisplayName&gt; רכיב

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

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

לא רלוונטי

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

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

אלמנט <Request>

מציינת את המשתנה שמכיל את הודעת הבקשה שנשלחת מ-proxy ל-API אל השירות האחר. אפשר ליצור את המשתנה באמצעות מדיניות קודמת בתהליך, או ליצור אותו בשורה במדיניות Service Callout.

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Remove>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Remove>
    <Copy>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Copy>
    <Add>
        <Headers/>
        <QueryParams/>
        <FormParams/>
    </Add>
    <Set>
        <Headers/>
        <QueryParams/>
        <FormParams/>
        <Payload/>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Set>
</Request>

התחביר של התגים <Remove>,‏ <Copy>,‏ <Add> ו-<Set> זהה לתחביר של מדיניות הקצאת הודעות.

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

בדוגמה הפשוטה ביותר, מעבירים משתנה שמכיל את הודעת הבקשה שאוכלסה קודם בתהליך של proxy ל-API:

<Request clearPayload="true" variable="myRequest"/>

אפשר גם למלא את הודעת הבקשה שנשלחת לשירות החיצוני במדיניות Service Callout עצמה:

<Request>
  <Set>
    <Headers>
      <Header name="Accept">application/json</Header>
    </Headers>
    <Verb>POST</Verb>
    <Payload contentType="application/json">{"message":"my test message"}</Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
ברירת מחדל אם משמיטים את רכיב Request או את אחד המאפיינים שלו, Edge מקצה את ערכי ברירת המחדל הבאים:

<Request clearPayload="true" variable="servicecallout.request"/>

בואו נבדוק מה המשמעות של ערכי ברירת המחדל האלה. קודם, clearPayload=true פירושו שאובייקט בקשה חדש נוצר בכל פעם שמדיניות ServiceCallout מופעלת. המשמעות היא שהבקשה ונתיב ה-URI של הבקשה לא ישמשו שוב. שנית, שם ברירת המחדל של המשתנה, servicecallout.request, הוא שם שמור שמוקצה לבקשה אם לא מציינים שם.

חשוב לדעת מהו שם ברירת המחדל הזה אם אתם משתמשים בהסתרת נתונים – אם לא מציינים את שם המשתנה, צריך להוסיף את servicecallout.request להגדרות ההסתרה. לדוגמה, אם רוצים להסתיר את כותרת ההרשאה כדי שלא תופיע בסשנים של Trace, צריך להוסיף את הקוד הבא להגדרת ההסתרה כדי לתעד את שם ברירת המחדל:

servicecallout.request.header.Authorization.

נוכחות אופציונלי.
סוג לא רלוונטי

מאפיינים

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

שם המשתנה שיכיל את הודעת הבקשה.

servicecallout.request אופציונלי
clearPayload

אם true, המשתנה שמכיל את הודעת הבקשה מנוקה אחרי שהבקשה נשלחת ליעד ה-HTTP, כדי לפנות את הזיכרון שבו נעשה שימוש בהודעת הבקשה.

מגדירים את האפשרות clearPayload לערך false רק אם נדרשת הודעת הבקשה אחרי ההפעלה של Service Callout.

true אופציונלי

אלמנט <Request>/<IgnoreUnresolvedVariables>

אם המדיניות מוגדרת כ-true, המערכת מתעלמת משגיאות של משתנים לא פתורים בבקשה.

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
ברירת מחדל false
נוכחות אופציונלי
סוג בוליאני

אלמנט <Response>

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

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

אם לא מציינים את הרכיב הזה, proxy ל-API לא מחכה לתשובה, והביצוע של זרימת ה-proxy ל-API ממשיך עם כל השלבים הבאים בזרימה. בנוסף, חשוב לציין שאם אין רכיב Response, התגובה מהיעד לא זמינה לעיבוד בשלבים הבאים, ואין דרך לזרימת ה-Proxy לזהות כשל בקריאה מרחוק. שימוש נפוץ בהשמטת הרכיב Response כשמשתמשים ב-ServiceCallout: רישום הודעות במערכת חיצונית.

 <Response>calloutResponse</Response>
ברירת מחדל לא רלוונטי
נוכחות אופציונלי
סוג מחרוזת

אלמנט <Timeout>

פרק הזמן באלפיות השנייה שבו מדיניות Service Callout תמתין לתשובה מהיעד. אי אפשר להגדיר את הערך הזה באופן דינמי בזמן הריצה. אם מתרחש פסק זמן ב-Service Callout, מוחזר HTTP 500, המדיניות נכשלת ושרת ה-proxy של ה-API עובר למצב שגיאה, כפי שמתואר במאמר טיפול בשגיאות.

<Timeout>30000</Timeout>
ברירת מחדל ‫55,000 אלפיות השנייה (55 שניות), הגדרת ברירת המחדל של הזמן הקצוב לתפוגה של HTTP ב-Apigee Edge
נוכחות אופציונלי
סוג מספר שלם

אלמנט <HTTPTargetConnection>

מספק פרטי העברה כמו כתובת URL,‏ TLS/SSL ומאפייני HTTP. לפרטים נוספים עיינו במפרט של השיטה ב-<TargetEndpoint>.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <LoadBalancer/>
    <SSLInfo/>
    <Properties/>
</HTTPTargetConnection>
ברירת מחדל לא רלוונטי
נוכחות חובה
סוג לא רלוונטי

אלמנט <HTTPTargetConnection>/<URL>

כתובת ה-URL של השירות שאליו מתבצעת הקריאה:

<HTTPTargetConnection>
    <URL>http://example.com</URL>
</HTTPTargetConnection>

אפשר לספק חלק מכתובת ה-URL באופן דינמי באמצעות משתנה. עם זאת, אי אפשר לציין משתנה לחלק של הפרוטוקול בכתובת ה-URL, http://‎ שמופיע למטה. בדוגמה הבאה, משתמשים במשתנה כדי לציין את הערך של פרמטר בשאילתה:

<URL>http://example.com/forecastrss?w=${request.header.woeid}</URL>

אפשר גם להגדיר חלק מנתיב כתובת ה-URL באמצעות משתנה:

<URL>http://example.com/{request.resourcePath}?w=${request.header.woeid}</URL>

אם רוצים להשתמש במשתנה כדי לציין את הדומיין והיציאה של כתובת ה-URL, צריך להשתמש במשתנה אחד רק לדומיין וליציאה, ובמשתנה שני לכל חלק אחר של כתובת ה-URL:

<URL>http://{request.dom_port}/{request.resourcePath}</URL>
ברירת מחדל לא רלוונטי
נוכחות חובה
סוג מחרוזת

אלמנט <HTTPTargetConnection>/<SSLInfo>

הגדרת TLS/SSL לשירות הקצה העורפי. לקבלת עזרה בהגדרת TLS/SSL, אפשר לעיין במאמר הגדרת TLS מ-Edge אל ה-Backend (Cloud ו-Private Cloud) ובמאמר בנושא 'הגדרת TargetEndpoint של TLS/SSL' בהפניה להגדרת proxy ל-API.

<HTTPTargetConnection>
    <URL>https://example.com</URL>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <KeyStore>ref://mykeystoreref</KeyStore>  ## Use of a reference is recommended
        <KeyAlias>myKey</KeyAlias>
        <TrustStore>myTruststore</TrustStore>
        <Ciphers/>
        <Protocols/>
    </SSLInfo>
</HTTPTargetConnection>
ברירת מחדל לא רלוונטי
נוכחות אופציונלי
סוג לא רלוונטי

אלמנט <HTTPTargetConnection>/<Properties>

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

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <Properties>
        <Property name="allow.http10">true</Property>
        <Property name="request.retain.headers">
          User-Agent,Referer,Accept-Language
        </Property>
    </Properties>
</HTTPTargetConnection>
ברירת מחדל לא רלוונטי
נוכחות אופציונלי
סוג לא רלוונטי

אלמנט <HTTPTargetConnection>/<LoadBalancer>

להתקשר לשרת יעד אחד או יותר ולבצע איזון עומסים בשרתים האלה. אפשר לעיין בדוגמה Call target servers בקטע הדוגמאות. מידע נוסף זמין במאמר בנושא איזון עומסים בין שרתים עורפיים. אפשר לעיין גם בפוסט הזה בקהילה שמתאר דרכים להפעלת שרתים של יעד גם ממדיניות Service Callout וגם באמצעות כללי ניתוב.

<HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="httpbin"/> <Server name="yahoo"/> </LoadBalancer> <Path>/get</Path> </HTTPTargetConnection>
ברירת מחדל לא רלוונטי
נוכחות אופציונלי
סוג לא רלוונטי

אלמנט <LocalTargetConnection>

הגדרה של proxy מקומי – כלומר, proxy באותו ארגון ובאותה סביבה – כיעד של קריאות לשירותים.

כדי לציין עוד יותר את היעד, משתמשים ברכיבים <APIProxy> ו-<ProxyEndpoint> או ברכיב <Path>.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
   <Path/>
</LocalTargetConnection>
ברירת מחדל לא רלוונטי
נוכחות חובה
סוג לא רלוונטי

אלמנט <LocalTargetConnection>/<APIProxy>

השם של שרת proxy ל-API שהוא היעד של קריאה מקומית. שרת ה-Proxy צריך להיות באותו ארגון ובאותה סביבה כמו שרת ה-Proxy שמבצע את השיחה.

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

בנוסף לרכיב <APIProxy>, צריך לכלול את הרכיב <ProxyEndpoint> כדי לציין את שם נקודת הקצה של ה-proxy שאליה צריך להפנות את הקריאה.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
</LocalTargetConnection>
ברירת מחדל לא רלוונטי
נוכחות חובה
סוג מחרוזת

אלמנט <LocalTargetConnection>/<ProxyEndpoint>

השם של נקודת הקצה של ה-proxy שאליה צריך לטרגט את השיחות. זו נקודת קצה של proxy ב-API proxy שצוין באמצעות רכיב <APIProxy>.

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>
ברירת מחדל לא רלוונטי
נוכחות אופציונלי
סוג לא רלוונטי

אלמנט <LocalTargetConnection>/<Path>

נתיב לנקודת הקצה שמכוונת. נקודת הקצה צריכה להתייחס לשרת proxy באותו ארגון ובאותה סביבה כמו השרת proxy שמבצע את הקריאה.

אפשר להשתמש בזה במקום בצמד <APIProxy>/<ProxyEndpoint> כשלא יודעים את שם ה-Proxy או כשאי אפשר להסתמך עליו. יכול להיות שהנתיב הוא יעד אמין.

<LocalTargetConnection>
   <Path>/data-manager</Path>
</LocalTargetConnection>
ברירת מחדל לא רלוונטי
נוכחות אופציונלי
סוג לא רלוונטי

סכימות

משתני זרימה

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

לרכיבי Service Callout יש בקשה ותגובה משלהם, ואפשר לגשת לנתונים האלה באמצעות משתנים. מכיוון שההודעה הראשית משתמשת בקידומות המשתנים request.* ו-response.*, צריך להשתמש בקידומות myrequest.* ו-calloutResponse.* (ברירות המחדל בהגדרות של Service Callout) כדי לקבל נתוני הודעה שספציפיים ל-Service Callout. בדוגמה הראשונה בטבלה הבאה מוצג איך מקבלים כותרות HTTP ב-Service Callout.

משתנה תיאור

הדוגמה הבאה מראה איך מקבלים כותרות של בקשות ותשובות של קריאות לשירות, בדומה לאופן שבו מקבלים כותרות מהבקשה והתשובה העיקריות.

calloutResponse.header.HeaderName

myRequest.header.HeaderName

כאשר calloutResponse הוא שם המשתנה של התגובה ב-Service Callout, ו-myRequest הוא שם המשתנה של הבקשה. לדוגמה:

calloutResponse.header.Content-Length

מחזירה את כותרת Content-Length של תגובת Service Callout.

Scope: From the Service Callout forward
Type: String
Permission: Read/Write

כותרת הודעה בבקשה או בתגובה של Service Callout. לדוגמה, אם יעד ה-API Proxy הוא http://example.com, והיעד של Service Callout הוא http://mocktarget.apigee.net, המשתנים האלה הם הכותרות של ה-callout אל http://mocktarget.apigee.net.

servicecallout.requesturi

היקף: מבקשת ההפניה לשירות ואילך
סוג: מחרוזת
הרשאה: קריאה/כתיבה

מזהה המשאבים האחיד (URI) של TargetEndpoint למדיניות ServiceCallout. ה-URI הוא כתובת ה-URL של TargetEndpoint בלי הפרוטוקול והגדרת הדומיין.

servicecallout.{policy-name}.target.url

היקף: מבקשת ההפניה לשירות ואילך
סוג: מחרוזת
הרשאה: קריאה/כתיבה

כתובת היעד של ההדגשה של השירות.

calloutResponse.content

כאשר calloutResponse הוא <Response>שם המשתנה בהגדרות של Service Callout.

Scope: מהתגובה של Service Callout ואילך
Type: String
Permission: Read/Write

גוף התגובה מה-Service Callout.

servicecallout.{policy-name}.expectedcn

היקף: מבקשת ההפניה לשירות ואילך
סוג: מחרוזת
הרשאה: קריאה/כתיבה

השם הנפוץ הצפוי של TargetEndpoint שאליו מתייחסת מדיניות ServiceCallout. ההגדרה הזו רלוונטית רק כש-TargetEndpoint מתייחס לנקודת קצה של TLS/SSL.

servicecallout.{policy-name}.failed

היקף: החל מתגובת Service Callout
סוג: בוליאני
הרשאה: קריאה/כתיבה

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

שגיאות

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

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

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

קוד תקלה סטטוס HTTP סיבה תיקון
steps.servicecallout.ExecutionFailed 500

השגיאה הזו יכולה לקרות כאשר:

  • המדיניות נדרשת לטפל בקלט שגוי או לא חוקי מסיבה אחרת.
  • שירות היעד העורפי מחזיר סטטוס שגיאה (כברירת מחדל, 4xx או 5xx).
steps.servicecallout.RequestVariableNotMessageType 500 המשתנה 'בקשה' שצוין במדיניות אינו מסוג 'הודעה'. לדוגמה, אם מדובר במחרוזת או בסוג אחר שאינו הודעה, ותופיע השגיאה הזו.
steps.servicecallout.RequestVariableNotRequestMessageType 500 המשתנה 'בקשה' שצוין במדיניות אינו מסוג 'הודעת בקשה'. עבור לדוגמה, אם מדובר בסוג תגובה, תוצג השגיאה הזו.

שגיאות פריסה

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

שם השגיאה סיבה תיקון
URLMissing הרכיב <URL> שבתוך <HTTPTargetConnection> חסרה או ריקה.
ConnectionInfoMissing שגיאה זו מתרחשת אם במדיניות אין <HTTPTargetConnection> או <LocalTargetConnection> לרכיב מסוים.
InvalidTimeoutValue השגיאה הזו מתרחשת אם הערך של <Timeout> הוא שלילי או אפס.

משתני כשל

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

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

דוגמה לתגובת שגיאה

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.servicecallout.RequestVariableNotMessageType"
      },
      "faultstring":"ServiceCallout[ServiceCalloutGetMockResponse]: 
            request variable data_str value is not of type Message"
   }
}

דוגמה לכלל שגוי

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="RequestVariableNotMessageType">
    <Step>
        <Name>AM-RequestVariableNotMessageType</Name>
    </Step>
    <Condition>(fault.name = "RequestVariableNotMessageType")</Condition>
</FaultRule>

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