سياسة RaiseFault

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

المزايا

إنشاء رسالة مخصّصة استجابةً لشرط خطأ يمكن استخدام riseFault لتحديد الاستجابة للخطأ التي يتم إرجاعها إلى التطبيق صاحب الطلب عند ظهور حالة معينة.

للحصول على معلومات عامة عن التعامل مع الأخطاء، يمكنك الاطّلاع على معالجة الأخطاء.

نماذج

إرجاع الخطأ

في حالات الاستخدام الأكثر شيوعًا، يتم استخدام riseFault لعرض رد مخصص للخطأ إلى التطبيق الذي يطلب التطبيق. على سبيل المثال، ستعرض هذه السياسة رمز الحالة 404 الذي يحتوي على عدم وجود حمولة:

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

حمولة بيانات استجابة الخطأ

يتضمن المثال الأكثر تعقيدًا عرض حمولة بيانات مخصصة لاستجابة الخطأ، مع 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>

للحصول على قائمة بجميع المتغيّرات المتاحة لتعبئة استجابة الخطأ ديناميكيًا الرسائل، راجِع المتغيرات المرجع

التعامل مع أخطاء وسائل شرح الخدمة


لمحة عن سياسة AskFault

تتيح لك Apigee Edge إجراء معالجة مخصّصة للاستثناء باستخدام سياسة من النوع AskFault. تشبه سياسة riseFault سياسة assignMessage: إنشاء رد مخصّص للخطأ استجابةً لأحد حالات الخطأ.

يمكنك استخدام سياسة RestoreFault لتحديد الاستجابة الخاطئة للتطبيق الذي قدّم الطلب. عند ظهور شرط معين لخطأ. يمكن أن تتكون الاستجابة للخطأ من عناوين HTTP أو طلب بحث والمعلمات وحمولة الرسالة. قد تكون الاستجابة المخصّصة للأخطاء مفيدة أكثر لمطوِّري التطبيقات. المستخدمين النهائيين والتطبيق مقارنة برسائل الخطأ العامة أو رموز استجابة HTTP.

عند تنفيذها، تنقل سياسة AskFault عنصر التحكّم من المسار الحالي إلى علامة الخطأ الذي يُرجع بعد ذلك الاستجابة للخطأ المحددة إلى تطبيق العميل مقدِّم الطلب. عندما ينتقل تدفق الرسائل إلى مسار الخطأ، ولن يحدث أي معالجة أخرى للسياسة. كل ما تبقّى تجاوز خطوات المعالجة، ويتم إرجاع الاستجابة للخطأ مباشرةً إلى مقدم الطلب التطبيق.

يمكنك استخدام FoundFault في ProxyEndpoint أو TargetEndpoint. عادةً، ستقوم بإرفاق الحالة إلى سياسة riseFault بعد تنفيذ AskFault، سيعمل Apigee بشكل طبيعي معالجة الأخطاء، بتقييم قواعد الأخطاء أو في حال عدم تحديد قواعد للخطأ، يتم إنهاء المعالجة. بالطلب.

مرجع العنصر

يصف مرجع العنصر عناصر سياسة AskFault وسماتها.

<?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>

&lt;RaiseFault&gt; السمات

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

يصف الجدول التالي السمات المشتركة بين جميع العناصر الرئيسية للسياسة:

السمة الوصف تلقائي التواجد في المنزل
name

الاسم الداخلي للسياسة. يمكن لقيمة السمة name أن تحتوي على أحرف وأرقام ومسافات وواصلات وشرطات سفلية ونقاط. لا يمكن لهذه القيمة يتجاوز 255 حرفًا.

يمكنك، إذا أردت، استخدام العنصر <DisplayName> لتصنيف السياسة محرر الخادم الوكيل لواجهة مستخدم الإدارة باسم مختلف بلغة طبيعية.

لا ينطبق مطلوب
continueOnError

اضبط القيمة على false لعرض رسالة خطأ عند تعذُّر تنفيذ سياسة. هذا متوقّع السلوك في معظم السياسات.

يمكنك ضبط القيمة على true لمواصلة تنفيذ المسار حتى بعد تطبيق إحدى السياسات. فشل.

خطأ اختياري
enabled

اضبط القيمة على true لفرض السياسة.

اضبط القيمة على false من أجل إيقاف السياسة. لن تكون السياسة ويتم فرضها حتى لو ظلت مرتبطة بتدفق.

صحيح اختياري
async

تم إيقاف هذه السمة نهائيًا.

خطأ منهي العمل به

&lt;DisplayName&gt; عنصر

استخدِمه مع السمة name لتصنيف السياسة في إدارة خادم وكيل لواجهة المستخدم باسم مختلف بلغة طبيعية.

<DisplayName>Policy Display Name</DisplayName>
تلقائي

لا ينطبق

إذا لم تستخدم هذا العنصر، سيتم ضبط قيمة السمة name للسياسة على النحو التالي: استخدام البيانات المختلفة.

التواجد في المنزل اختياري
النوع سلسلة

&lt;IgnoreUnresolvedVariables&gt; عنصر

(اختياري) يتجاهل أي خطأ متغيّر لم يتم حله في التدفق. القيم الصالحة هي: true/false. true التلقائي.

&lt;FaultResponse&gt; عنصر

(اختياري) تحدِّد هذه السياسة رسالة الردّ التي يتم إرجاعها إلى البرنامج الذي أرسل الطلب. استخدامات استجابة الخطأ الإعدادات نفسها المُستخدَمة في سياسة AssignMessage (غير متوفّرة في Apigee Edge for Private Cloud).

&lt;FaultResponse&gt;&lt;AssignVariable&gt; عنصر

يعيّن قيمة لمتغير تدفق وجهة. في حال عدم توفّر متغيّر التدفق، سينشئه AssignVariable.

على سبيل المثال، يمكنك استخدام الرمز التالي لضبط المتغيّر المُسمّى myFaultVar. في سياسة AskFault:

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

يمكنك بعد ذلك الرجوع إلى ذلك المتغيّر في نماذج الرسائل لاحقًا في سياسة AnchorFault. ويمكن أيضًا للسياسة المرتبطة بقاعدة FaultRule الوصول إلى المتغيّر. على سبيل المثال، ما يلي تستخدم سياسة AssignMessage المتغيّر الذي تم ضبطه في RestoreFault لضبط عنوان في الاستجابة للخطأ:

<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> في سياسة AskFault البنية نفسها مثل العنصر <AssignVariable> في سياسة AssignMessage. لاحظ أن هذه الوظيفة غير متاح حاليًا في Apigee Edge for Private Cloud.

&lt;FaultResponse&gt;&lt;Add&gt;/&lt;Headers&gt; عنصر

إضافة عناوين HTTP إلى رسالة الخطأ لاحظ أن الرأس الفارغ لا يضيف <Add><Headers/></Add> أي عنوان. هذا النمط المثال ينسخ قيمة متغير التدفق request.user.agent إلى .

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

الإعداد التلقائي:

لا ينطبق

الحضور:

اختياري

النوع:

سلسلة

&lt;FaultResponse&gt;&lt;Copy&gt; عنصر

تنسخ المعلومات من الرسالة التي يحدِّدها source السمة إلى رسالة الخطأ.

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

الإعداد التلقائي:

لا ينطبق

الحضور:

اختياري

النوع:

سلسلة

السمات

 <Copy source="response">
السمة الوصف التواجد في المنزل النوع
المصدر

تحدّد الكائن المصدر في النسخة.

  • إذا لم يكن source محددة، يتم التعامل معها كرسالة بسيطة. على سبيل المثال، إذا كانت السياسة في مسار الطلب، يتم ضبط المصدر تلقائيًا على العنصر request. إذا كانت السياسة في مسار الاستجابة، فإنّه يتم ضبطه تلقائيًا على الكائن response. في حال حذف بطاقة المصدر، يمكنك استخدام مرجع مطلق لمتغير تدفق كمصدر للنسخة. على سبيل المثال، قم بتحديد القيمة كـ {request.header.user-agent}.
  • إذا تعذّر حلّ متغيّر المصدر أو إلى نوع آخر ليس رسالة، تعذّر &lt;Copy&gt; في للرد.
اختياري سلسلة

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;Headers&gt; عنصر

يتم نسخ عنوان 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" لديه واحدة فقط فلن يتم نسخها.

الإعداد التلقائي:

لا ينطبق

الحضور:

اختياري

النوع:

سلسلة

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;StatusCode&gt; عنصر

رمز حالة HTTP المطلوب نسخه من الكائن الذي حدَّدته السمة المصدر إلى الخطأ .

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

الإعداد التلقائي:

خطأ

الحضور:

اختياري

النوع:

سلسلة

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;ReasonPhrase&gt; عنصر

سبب الوصف للنسخ من العنصر الذي حددته سمة المصدر إلى الخطأ .

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

الإعداد التلقائي:

خطأ

الحضور:

اختياري

النوع:

سلسلة

&lt;FaultResponse&gt;&lt;Remove&gt;/&lt;Headers&gt; عنصر

إزالة عناوين 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" لديه واحدة فقط فلن تتم إزالتها.

الإعداد التلقائي:

لا ينطبق

الحضور:

اختياري

النوع:

سلسلة

&lt;FaultResponse&gt;&lt;Set&gt; عنصر

لضبط المعلومات في رسالة الخطأ.

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

الإعداد التلقائي:

لا ينطبق

الحضور:

اختياري

النوع:

لا ينطبق

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;Headers&gt; عنصر

لضبط عناوين HTTP أو استبدالها في رسالة الخطأ. لاحظ أن الرأس الفارغ لم يتم ضبط أي عنوان من قِبل "<Set><Headers/></Set>". يحدد هذا المثال عنوان user-agent إلى متغيّر الرسالة المحدّد العنصر <AssignTo>

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

الإعداد التلقائي:

لا ينطبق

الحضور:

اختياري

النوع:

سلسلة

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;Payload&gt; عنصر

تضبط حمولة رسالة الخطأ.

<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>

أو، اعتبارًا من الإصدار 16.08.17 من السحابة الإلكترونية، يمكنك أيضًا استخدام الأقواس المتعرجة لإدراج المتغيرات:

<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 لا يمكنها استخدام القيمة التلقائية "{" الحرف. اختياري شار
variableSuffix تحديد المحدِّد اللاحق في التدفق بشكل اختياري المتغير لأن حمولات JSON لا يمكنها استخدام القيمة الافتراضية "}" الحرف. اختياري شار

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;StatusCode&gt; عنصر

لضبط رمز حالة الردّ.

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

الإعداد التلقائي:

خطأ

الحضور:

اختياري

النوع:

منطقي

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;ReasonPhrase&gt; عنصر

تحدد عبارة السبب للرد.

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

الإعداد التلقائي:

خطأ

الحضور:

اختياري

النوع:

منطقي

&lt;ShortFaultReason&gt; عنصر

يُحدد لعرض سبب قصير للخطأ في الردّ:

<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"}}}

القيم الصالحة هي: true/false(تلقائيًا).

الإعداد التلقائي:

خطأ

الحضور:

اختياري

النوع:

منطقي

متغيّرات التدفق

تعمل متغيرات التدفق على تمكين السلوك الديناميكي للسياسات والتدفقات في وقت التشغيل، بناءً على HTTP العناوين أو محتوى الرسالة أو سياق التدفق. تتوفّر متغيّرات التدفق المحدَّدة مسبقًا التالية بعد تنفيذ سياسة FetchFault. لمزيد من المعلومات حول متغيّرات التدفق، اطّلِع على مرجع المتغيرات.

متغير النوع الإذن الوصف
fault.name سلسلة قراءة فقط عند تنفيذ سياسة AskFault، يتم ضبط هذا المتغير دائمًا على السلسلة RaiseFault
fault.type سلسلة قراءة فقط تعرض نوع الخطأ في الخطأ، وتعرض سلسلة فارغة في حال عدم توفّره.
fault.category سلسلة قراءة فقط تعرض فئة الخطأ في الخطأ، سلسلة فارغة في حال عدم توفّرها.

مثال على استخدام AskFault

يستخدم المثال التالي شرطًا لفرض وجود queryparam بالاسم zipcode في الطلب الوارد في حال حذف عدم توفّر queryparam، سيؤدي تدفّق البيانات إلى حدوث خطأ باستخدام riseFault:

<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>
يوضح ما يلي ما يمكن أن يظهر في AskFault:
<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). يمكنك الرجوع إلى مخططات السياسات المتوفرة على جيت هب.

مواضيع ذات صلة

يُرجى الاطّلاع على معالجة الأخطاء.