خط‌مشی RaiseFault

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

چه

پیام سفارشی در پاسخ به وضعیت خطا تولید می‌کند. از RaiseFault برای تعریف پاسخ خطایی که وقتی شرایط خاصی پیش می‌آید به برنامه درخواست‌کننده برگردانده می‌شود استفاده کنید.

برای اطلاعات کلی درباره مدیریت خطاها، به مدیریت خطاها مراجعه کنید.

نمونه‌ها

برگرداندن FaultResponse

در رایج‌ترین کاربرد، از «افزایش خطا» برای برگرداندن پاسخ خطای سفارشی به برنامه درخواست‌کننده استفاده می‌شود. برای مثال، این خط‌مشی کد وضعیت 404 را بدون بار برمی‌گرداند:

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

برگرداندن پایه‌بار FaultResponse

مثال پیچیده‌تر شامل برگرداندن بار پاسخ خطای سفارشی، همراه با سراینده‌های HTTP و کد وضعیت HTTP است. در مثال زیر، پاسخ خطا با پیام XML حاوی کد وضعیت HTTP دریافتی توسط Edge از سرویس زیرینه و سرایندی حاوی نوع خطای رخ‌داده تکمیل می‌شود:

<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، مدیریت استثنای سفارشی انجام دهید. خط‌مشی «افزایش خطا» که شبیه به خط‌مشی «تخصیص پیام» است، به شما امکان می‌دهد در پاسخ به وضعیت خطا، پاسخ خطای سفارشی تولید کنید.

از خط‌مشی «افزایش خطا» برای تعریف پاسخ خطایی که به برنامه درخواست‌کننده برگردانده می‌شود وقتی شرایط خطای خاصی پیش می‌آید استفاده کنید. پاسخ خطا می‌تواند شامل سرصفحه‌های HTTP، پارامترهای پُرسمان، و بار پیام باشد. پاسخ خطای سفارشی می‌تواند برای توسعه‌دهندگان برنامه و کاربران نهایی برنامه مفیدتر از پیام‌های خطای عمومی یا کدهای پاسخ HTTP باشد.

وقتی اجرا می‌شود، خط‌مشی «ایجاد خطا» کنترل را از جاری به جریان «خطا» منتقل می‌کند، که سپس پاسخ خطای تعیین‌شده را به برنامه مشتری درخواست‌کننده برمی‌گرداند. وقتی جریان پیام به جریان «خطا» تغییر می‌کند، پردازش خط‌مشی دیگری انجام نمی‌شود. همه «مراحل» پردازش باقی‌مانده دور زده می‌شود و پاسخ خطا مستقیماً به برنامه درخواست‌کننده برگردانده می‌شود.

می‌توانید از RaiseFault در ProxyEndpoint یا TargetEndpoint استفاده کنید. معمولاً، یک شرط را به خط‌مشی RaiseFault پیوست می‌کنید. پس‌از اجرای RaiseFault،‏ Apigee پردازش خطای عادی را انجام می‌دهد، FaultRules را ارزیابی می‌کند، یا اگر قانون خطایی تعریف نشده باشد، پردازش درخواست را خاتمه می‌دهد.

مرجع عنصر

مرجع عنصر عناصر و مشخصه‌های خط‌مشی 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> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <IgnoreUnresolvedVariables>

(اختیاری) خطاهای متغیر حل‌نشده در «جریان» را نادیده می‌گیرد. مقادیر معتبر: درست/غلط. پیش‌فرض true.

عنصر <FaultResponse>

(اختیاری) پیام پاسخی را که به مشتری درخواست‌کننده برگردانده می‌شود تعریف می‌کند. ‫FaultResponse از همان تنظیمات خط‌مشی AssignMessage استفاده می‌کند (در Apigee Edge for Private Cloud دردسترس نیست).

عنصر <FaultResponse><AssignVariable>

مقدار را به متغیر جریان مقصد اختصاص می‌دهد. اگر متغیر جاری‌سازی وجود نداشته باشد، 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> در خط‌مشی AssignMessage استفاده می‌کند. توجه داشته باشید که این قابلیت درحال‌حاضر در 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">
مشخصه شرح حضور نوع
منبع

شیء منبع کپی را مشخص می‌کند.

  • اگر منبع مشخص نشده باشد، به‌عنوان پیام ساده درنظر گرفته می‌شود. برای مثال، اگر خط‌مشی در جریان درخواست باشد، منبع به‌طور پیش‌فرض به شیء درخواست تبدیل می‌شود. اگر خط‌مشی در جریان پاسخ باشد، به‌طور پیش‌فرض به شیء پاسخ اختصاص می‌یابد. اگر منبع را حذف کنید، می‌توانید از مرجع مطلق متغیر جاری به‌عنوان منبع کپی استفاده کنید. برای مثال، مقدار را به‌عنوان {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 برای کپی کردن از شیء مشخص‌شده توسط مشخصه منبع به پیام خطا.

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

پیش‌فرض:

نادرست

حضور:

اختیاری

نوع:

رشته

<FaultResponse><Copy>/<ReasonPhrase> عنصر

شرح دلیل برای کپی کردن از شیء مشخص‌شده توسط مشخصه منبع به پیام خطا.

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

پیش‌فرض:

نادرست

حضور:

اختیاری

نوع:

رشته

عنصر <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>

بار پیام خطا را تنظیم می‌کند.

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

پایه‌بار 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>

یا، از نسخه ابری ۱۶.۰۸.۱۷، می‌توانید از آکولاد نیز برای درج متغیرها استفاده کنید:

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

تنظیم کردن محتوای ترکیبی در 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 به‌صورت اختیاری جداکننده پیشرو را در متغیر جاری مشخص می‌کند زیرا بارهای JSON نمی‌توانند از نویسه پیش‌فرض «{» استفاده کنند. اختیاری Char
variableSuffix به‌صورت اختیاری جداکننده انتهایی را در متغیر جاری‌سازی مشخص می‌کند زیرا بارهای JSON نمی‌توانند از نویسه پیش‌فرض «}» استفاده کنند. اختیاری Char

عنصر <FaultResponse>/<Set>/<StatusCode>

کد وضعیت پاسخ را تنظیم می‌کند.

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

پیش‌فرض:

نادرست

حضور:

اختیاری

نوع:

بولی

عنصر <FaultResponse>/<Set>/<ReasonPhrase>

عبارت دلیل پاسخ را تنظیم می‌کند.

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

پیش‌فرض:

نادرست

حضور:

اختیاری

نوع:

بولی

عنصر <ShortFaultReason>

مشخص می‌کند که دلیل کوتاهی برای خطا در پاسخ نمایش داده شود:

<ShortFaultReason>true|false</ShortFaultReason>

به‌طور پیش‌فرض، دلیل خطا در پاسخ خط‌مشی این است:

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

برای خواناتر کردن پیام، می‌توانید عنصر <ShortFaultReason> را روی درست تنظیم کنید تا faultstring به نام خط‌مشی کوتاه شود:

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

مقادیر معتبر: درست/غلط(پیش‌فرض).

پیش‌فرض:

نادرست

حضور:

اختیاری

نوع:

بولی

متغیرهای جریان

متغیرهای Flow رفتار پویای خط‌مشی‌ها و «جریان‌ها» را در زمان اجرا براساس سرایندهای HTTP، محتوای پیام، یا زمینه «جریان» فعال می‌کنند. متغیرهای Flow ازپیش‌تعریف‌شده زیر پس‌از اجرای خط‌مشی RaiseFault دردسترس هستند. برای اطلاعات بیشتر درباره متغیرهای «جریان»، مرجع متغیرها را ببینید.

متغیر نوع اجازه شرح
fault.name رشته فقط خواندنی وقتی خط‌مشی RaiseFault اجرا می‌شود، این متغیر همیشه روی رشته RaiseFault تنظیم می‌شود.
fault.type رشته فقط خواندنی نوع خطا را در خطا برمی‌گرداند و اگر دردسترس نباشد، رشته‌ای خالی برمی‌گرداند.
fault.category رشته فقط خواندنی دسته خطا را در خطا برمی‌گرداند و اگر دردسترس نباشد، رشته‌ای خالی برمی‌گرداند.

مثال استفاده از RaiseFault

مثال زیر از «شرط» برای اعمال حضور queryparam با نام zipcode در درخواست ورودی استفاده می‌کند. اگر آن queryparam وجود نداشته باشد، جریان ازطریق «ایجاد خطا» خطا ایجاد می‌کند:

<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 ۵۰۰ رشته خطا را ببینید.

خطاهای استقرار

هیچ‌کدام.

متغیرهای خطا

این متغیرها زمانی تنظیم می‌شوند که خطای زمان اجرا رخ دهد. برای اطلاعات بیشتر، آنچه باید درباره خطاهای خط‌مشی بدانیدرا ببینید.

متغیر مکان مثال
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 دردسترس است.

موضوعات مرتبط

دیدن رسیدگی به خطاها