سياسة RaiseFault

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

الموضوع

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

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

عيّنات

استجابة خطأ الإرجاع

في حالات الاستخدام الأكثر شيوعًا، يتم استخدام LiftFault لعرض استجابة خطأ مخصّص للتطبيق الذي يطلب الزحف. على سبيل المثال، ستعرض هذه السياسة رمز الحالة 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>

للاطّلاع على قائمة بجميع المتغيّرات المتاحة لتعبئة رسائل FaultResponse ديناميكيًا، يُرجى الاطّلاع على مرجع المتغيّرات.

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


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

يتيح لك Apigee Edge تنفيذ معالجة الاستثناء المخصّصة باستخدام سياسة من النوع riseFault. تتيح لك سياسة ClaimFault مماثلة لسياسة AssignMessage إمكانية إنشاء استجابة مخصّصة لخطأ معيّن استجابةً لحالة خطأ.

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

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

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

مرجع العنصر

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

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

سمات <LetFault>

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

يوضِّح الجدول التالي السمات الشائعة لجميع العناصر الرئيسية للسياسة:

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

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

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

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

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

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

false إجراء اختياري
enabled

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

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

صحيح إجراء اختياري
async

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

false منهي العمل به

العنصر <DisplayName>

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

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

لا ينطبق

إذا لم تستخدم هذا العنصر، سيتم استخدام قيمة السمة name الخاصة بالسياسة.

التواجد في المنزل إجراء اختياري
Type سلسلة

عنصر <تجاهلUnresolvedVariables>

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

عنصر <FaultResponse>

(اختياري) تحدِّد رسالة الرد التي يتم عرضها للعميل الذي يقدم الطلب. تستخدم ميزة FaultResponse الإعدادات نفسها المستخدمة في سياسة تعيينMessage (غير متوفرة في Apigee Edge for Private Cloud).

العنصر <FaultResponse><AssignVariable>

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

على سبيل المثال، استخدِم الرمز التالي لضبط المتغيّر المسمى myFaultVar في سياسة ClaimFault:

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

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

<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> في سياسة riseFault بنية العنصر <AssignVariable> نفسها في سياسة AssignMessage. يُرجى العلم أنّ هذه الوظيفة غير متوفّرة حاليًا في Apigee Edge لخدمة Private Cloud.

العنصر <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">
السمة الوصف التواجد في المنزل Type
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 المطلوب نسخه من العنصر الذي تحدّده سمة المصدر إلى رسالة الخطأ.

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

الخيار التلقائي:

false

الحضور:

إجراء اختياري

النوع:

سلسلة

العنصر <FaultResponse><Copy>/<reasonResult>

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

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

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

<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">
السمة الوصف التواجد في المنزل Type
contentType

في حال تحديد contentType، يتم ضبط قيمته على العنوان Content-Type.

إجراء اختياري سلسلة
variablePrefix بشكل اختياري، يتم تحديد المحدِّد الأول في متغيّر التدفق لأنّ حمولات JSON لا يمكنها استخدام الحرف "{" التلقائي. إجراء اختياري شار
variableSuffix بشكل اختياري، يتم تحديد المحدِّد اللاحق في متغيّر التدفق لأنّ حمولات JSON لا يمكنها استخدام الحرف "}" التلقائي. إجراء اختياري شار

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

تحدِّد رمز حالة الردّ.

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

الخيار التلقائي:

false

الحضور:

إجراء اختياري

النوع:

منطقي

العنصر <FaultResponse>/<Set>/<reasonCollection>

لضبط عبارة السبب للردّ

<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> على "صحيح" لاختصار faultstring إلى اسم السياسة فقط:

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

القيم الصالحة: صحيح/خطأ(تلقائي)

الخيار التلقائي:

false

الحضور:

إجراء اختياري

النوع:

منطقي

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

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

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

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

يستخدم المثال التالي شرطًا لفرض توفُّر 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>
يوضّح ما يلي ما يمكن اعتباره في riseFault:
<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.

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

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