Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं. जानकारी
यह क्या है
किसी गड़बड़ी की स्थिति के जवाब में कस्टम मैसेज जनरेट करता है. किसी खास स्थिति में अनुरोध करने वाले ऐप्लिकेशन को गड़बड़ी के जवाब के तौर पर वापस करने के लिए riseFault का इस्तेमाल करें.
गड़बड़ियों को ठीक करने के बारे में सामान्य जानकारी पाने के लिए, गड़बड़ियां ठीक करना देखें.
सैंपल
FaultResponse दिखाएं
सबसे आम इस्तेमाल में, riseFault का इस्तेमाल करके अनुरोध करने वाले ऐप्लिकेशन पर ज़रूरत के मुताबिक गड़बड़ी मिलने का रिस्पॉन्स दिखाया जाता है. उदाहरण के लिए, यह नीति बिना पेलोड के 404
स्टेटस कोड दिखाएगी:
<RaiseFault name="404"> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <FaultResponse> <Set> <StatusCode>404</StatusCode> <ReasonPhrase>The resource requested was not found</ReasonPhrase> </Set> </FaultResponse> </RaiseFault>
रिटर्न FaultResponse पेलोड
ज़्यादा मुश्किल उदाहरण में, एचटीटीपी हेडर और एचटीटीपी स्टेटस कोड के साथ-साथ कस्टम गड़बड़ी का रिस्पॉन्स पेलोड दिखाना शामिल है. नीचे दिए गए उदाहरण में गड़बड़ी के जवाब को एक्सएमएल मैसेज से भरा गया है. इसमें बैकएंड सेवा से 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 से जुड़े मैसेज भेजने के लिए, उपलब्ध सभी वैरिएबल की सूची के लिए, वैरिएबल रेफ़रंस देखें
सेवा के कॉलआउट से जुड़ी गड़बड़ियां ठीक करना
RayFault की नीति के बारे में जानकारी
Apigee Edge की मदद से, riseFault टाइप की नीति का इस्तेमाल करके, पसंद के मुताबिक अपवाद मैनेज किए जा सकते हैं. riseFault की नीति की मदद से, assignMessage नीति की मदद से किसी गड़बड़ी का जवाब आने पर, गड़बड़ी के लिए पसंद के मुताबिक रिस्पॉन्स जनरेट किया जा सकता है.
कोई खास गड़बड़ी आने पर, अनुरोध करने वाले ऐप्लिकेशन को गड़बड़ी का रिस्पॉन्स देने के लिए, riseFault की नीति का इस्तेमाल करें. गड़बड़ी के रिस्पॉन्स में एचटीटीपी हेडर, क्वेरी पैरामीटर, और मैसेज पेलोड शामिल हो सकते हैं. कस्टम गड़बड़ी का जवाब, सामान्य गड़बड़ी के मैसेज या एचटीटीपी रिस्पॉन्स कोड के बजाय, ऐप्लिकेशन डेवलपर और ऐप्लिकेशन के असली उपयोगकर्ताओं के लिए ज़्यादा काम का हो सकता है.
लागू होने पर, riseFault की नीति के तहत, मौजूदा फ़्लो से 'गड़बड़ी' फ़्लो पर कंट्रोल ट्रांसफ़र किया जाता है. इसके बाद, गड़बड़ी के लिए तय किए गए रिस्पॉन्स, अनुरोध करने वाले क्लाइंट ऐप्लिकेशन को दिए जाते हैं. जब मैसेज फ़्लो, 'गड़बड़ी' फ़्लो पर स्विच होता है, तो आगे की कोई नीति प्रोसेसिंग नहीं होती. प्रोसेस करने के बाकी सभी चरणों को बायपास कर दिया जाता है और गड़बड़ी का जवाब सीधे अनुरोध करने वाले ऐप्लिकेशन को भेज दिया जाता है.
आपके पास ProxyEndpoint या TargetEndpoint में दर्ज करने का विकल्प होता है. आम तौर पर, आपको riseFault की नीति में शर्त अटैच करनी होगी. riseFault के लागू होने के बाद, Apigee, सामान्य गड़बड़ी की प्रोसेसिंग करेगा. साथ ही, गड़बड़ी के नियम की जांच करेगा या अगर गड़बड़ी के लिए कोई नियम तय नहीं किया गया है, तो यह अनुरोध की प्रोसेसिंग बंद कर देगा.
एलिमेंट का रेफ़रंस
एलिमेंट रेफ़रंस, riseFault की नीति के एलिमेंट और एट्रिब्यूट के बारे में बताता है.
<?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>
<riseFault> एट्रिब्यूट
<RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1">
इस टेबल में उन एट्रिब्यूट के बारे में बताया गया है जो नीति के सभी पैरंट एलिमेंट के लिए एक जैसे होते हैं:
एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
---|---|---|---|
name |
नीति का अंदरूनी नाम. इसके अलावा, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में नीति को आम भाषा में अलग नाम से लेबल करने के लिए, |
लागू नहीं | ज़रूरी है |
continueOnError |
इस नीति को किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, |
false | ज़रूरी नहीं |
enabled |
नीति लागू करने के लिए, नीति को बंद करने के लिए, |
सही | ज़रूरी नहीं |
async |
यह एट्रिब्यूट अब काम नहीं करता. |
false | बहिष्कृत |
<DisplayName> एलिमेंट
मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में, आम भाषा के अलग नाम से नीति को लेबल करने के लिए, name
एट्रिब्यूट का इस्तेमाल करें.
<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट |
लागू नहीं अगर इस एलिमेंट को छोड़ दिया जाता है, तो नीति के |
---|---|
मौजूदगी | ज़रूरी नहीं |
Type | String |
<ignoreUnresolvedVariables> एलिमेंट
(वैकल्पिक) फ़्लो में होने वाली ऐसी वैरिएबल गड़बड़ी को अनदेखा कर देता है जिसे अब तक हल नहीं किया गया है. मान्य वैल्यू: सही/गलत.
डिफ़ॉल्ट true
.
<FaultResponse> एलिमेंट
(ज़रूरी नहीं) अनुरोध करने वाले क्लाइंट को मिले रिस्पॉन्स मैसेज के बारे में बताता है. FaultResponse, वही सेटिंग इस्तेमाल करता है जो assignMessage नीति की होती है. यह सुविधा, Apigee Edge में निजी क्लाउड के लिए उपलब्ध नहीं है.
<FaultResponse><AssignVariable> एलिमेंट
डेस्टिनेशन फ़्लो वैरिएबल के लिए कोई वैल्यू असाइन करता है.
अगर फ़्लो वैरिएबल मौजूद नहीं है, तो AssignVariable
इसे बनाता है.
उदाहरण के लिए, riseFault नीति में myFaultVar
नाम वाले वैरिएबल को सेट करने के लिए, इस कोड का इस्तेमाल करें:
<FaultResponse> <AssignVariable> <Name>myFaultVar</Name> <Value>42</Value> </AssignVariable> ... </FaultResponse>
इसके बाद, GrowFault की नीति में, मैसेज टेंप्लेट में उस वैरिएबल की जानकारी दी जा सकती है. इसके अलावा, किसी गड़बड़ी नियम से जुड़ी नीति के ज़रिए वैरिएबल को ऐक्सेस किया जा सकता है. उदाहरण के लिए, नीचे दी गई assignMessage नीति, गड़बड़ी का जवाब देने में हेडर को सेट करने के लिए riseFault में सेट किए गए वैरिएबल सेट का इस्तेमाल करती है:
<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>
riseFault की नीति के <AssignVariable>
उसी सिंटैक्स का इस्तेमाल किया जाता है जो
assignMessage नीति के
<AssignVariable>
एलिमेंट में है. ध्यान दें कि यह सुविधा
फ़िलहाल प्राइवेट क्लाउड के लिए, Apigee Edge में उपलब्ध नहीं है.
<FaultResponse><Add>/<Headers> एलिमेंट
गड़बड़ी के मैसेज में एचटीटीपी हेडर जोड़ता है. ध्यान दें कि खाली हेडर
<Add><Headers/></Add>
कोई हेडर नहीं जोड़ता. यह उदाहरण
request.user.agent फ़्लो वैरिएबल की वैल्यू को
हेडर में कॉपी करता है.
<Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add>
डिफ़ॉल्ट: |
लागू नहीं |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
String |
<FaultResponse><कॉपी> एलिमेंट
गड़बड़ी के मैसेज से जानकारी कॉपी की जाती है. इस मैसेज के बारे में
source
एट्रिब्यूट से बताया गया है.
<Copy source="request"> <Headers/> <StatusCode/> <ReasonPhrase/> </Copy>
डिफ़ॉल्ट: |
लागू नहीं |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
String |
एट्रिब्यूट
<Copy source="response">
एट्रिब्यूट | ब्यौरा | मौजूदगी | Type |
---|---|---|---|
source |
कॉपी का सोर्स ऑब्जेक्ट बताता है.
|
ज़रूरी नहीं | String |
<FaultResponse><कॉपी>/<Headers> एलिमेंट
बताए गए एचटीटीपी हेडर को सोर्स से गड़बड़ी के मैसेज में कॉपी करता है. सभी हेडर कॉपी करने के लिए,
<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" में सिर्फ़ एक वैल्यू है, तो उसे कॉपी नहीं किया जाता है.
डिफ़ॉल्ट: |
लागू नहीं |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
String |
<FaultResponse><कॉपी>/<StatusCode> एलिमेंट
गड़बड़ी के मैसेज में, सोर्स एट्रिब्यूट के बताए गए ऑब्जेक्ट से कॉपी करने के लिए एचटीटीपी स्टेटस कोड.
<Copy source='response'> <StatusCode>404</StatusCode> </Copy>
डिफ़ॉल्ट: |
false |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
String |
<FaultResponse><कॉपी>/<Reasonफ़्रेज़> एलिमेंट
गड़बड़ी के मैसेज में, सोर्स एट्रिब्यूट के बताए गए ऑब्जेक्ट से कॉपी करने की वजह का ब्यौरा.
<Copy source='response'> <ReasonPhrase>The resource requested was not found.</ReasonPhrase> </Copy>
डिफ़ॉल्ट: |
false |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
String |
<FaultResponse><Remove>/<Headers> एलिमेंट
गड़बड़ी के मैसेज से बताए गए एचटीटीपी हेडर हटाता है. सभी हेडर हटाने के लिए, <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" में सिर्फ़ एक वैल्यू है, तो उसे हटाया नहीं जाता है.
डिफ़ॉल्ट: |
लागू नहीं |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
String |
<FaultResponse><Set> एलिमेंट
गड़बड़ी के मैसेज में जानकारी सेट करता है.
<Set> <Headers/> <Payload> </Payload> <StatusCode/> <ReasonPhrase/> </Set>
डिफ़ॉल्ट: |
लागू नहीं |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
लागू नहीं |
<FaultResponse>/<Set>/<Headers> एलिमेंट
गड़बड़ी के मैसेज में एचटीटीपी हेडर को सेट या ओवरराइट करता है. ध्यान दें कि खाली हेडर
<Set><Headers/></Set>
कोई हेडर सेट नहीं करता. इस उदाहरण में, user-agent
हेडर को <AssignTo>
एलिमेंट के साथ बताए गए मैसेज वैरिएबल पर सेट किया गया है.
<Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set>
डिफ़ॉल्ट: |
लागू नहीं |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
String |
<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>
एक्सएमएल में मिले-जुले पेलोड सेट करें:
<Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </Payload> </Set>
डिफ़ॉल्ट: |
|
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
String |
एट्रिब्यूट
<Payload contentType="content_type" variablePrefix="char" variableSuffix="char">
एट्रिब्यूट | ब्यौरा | मौजूदगी | Type |
---|---|---|---|
contentType |
अगर contentType बताया गया है, तो इसकी वैल्यू |
ज़रूरी नहीं | String |
variablePrefix | विकल्प के तौर पर, फ़्लो वैरिएबल पर लीडिंग डीलिमिटर डालें, क्योंकि JSON पेलोड डिफ़ॉल्ट "{" वर्ण का इस्तेमाल नहीं कर सकता. | ज़रूरी नहीं | चार |
variableSuffix | विकल्प के तौर पर, फ़्लो वैरिएबल पर ट्रेलिंग डेलिमिटर को सेट करता है, क्योंकि JSON पेलोड डिफ़ॉल्ट "}" वर्ण का इस्तेमाल नहीं कर सकता. | ज़रूरी नहीं | चार |
<FaultResponse>/<Set>/<StatusCode> एलिमेंट
जवाब का स्टेटस कोड सेट करता है.
<Set source='request'> <StatusCode>404</StatusCode> </Set>
डिफ़ॉल्ट: |
false |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
बूलियन |
<FaultResponse>/<Set>/<Reasonफ़्रेज़> एलिमेंट
जवाब के लिए वजह सेट करता है.
<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"}}}
मैसेज को पढ़ने में आसान बनाने के लिए, faultstring
को सिर्फ़ नीति के नाम तक छोटा करने के लिए, <ShortFaultReason>
एलिमेंट को सही पर सेट किया जा सकता है:
"fault":{"faultstring":"Raise-Fault-1","detail":{"errorcode":"errorCode"}}}
मान्य वैल्यू: सही/गलत(डिफ़ॉल्ट).
डिफ़ॉल्ट: |
false |
मौजूदगी: |
ज़रूरी नहीं |
टाइप: |
बूलियन |
फ़्लो वैरिएबल
फ़्लो वैरिएबल, एचटीटीपी हेडर, मैसेज के कॉन्टेंट या फ़्लो कॉन्टेक्स्ट पर आधारित रनटाइम के दौरान, नीतियों और फ़्लो के डाइनैमिक व्यवहार को चालू करते हैं. riseFault की नीति के लागू होने के बाद, पहले से तय किए गए इन फ़्लो वैरिएबल उपलब्ध होते हैं. फ़्लो वैरिएबल के बारे में ज़्यादा जानकारी के लिए, वैरिएबल रेफ़रंस देखें.
वैरिएबल | Type | अनुमति | ब्यौरा |
---|---|---|---|
fault.name | String | रीड-ओनली | RayFault की नीति के लागू होने पर, यह वैरिएबल हमेशा स्ट्रिंग
RaiseFault पर सेट होता है. |
fault.type | String | रीड-ओनली | गड़बड़ी में गड़बड़ी का टाइप दिखाता है. अगर यह उपलब्ध नहीं है, तो एक खाली स्ट्रिंग दिखाता है. |
fault.category | String | रीड-ओनली | गड़बड़ी में गड़बड़ी की कैटगरी दिखाता है. अगर यह उपलब्ध नहीं है, तो खाली स्ट्रिंग दिखाता है. |
riseFault के इस्तेमाल का उदाहरण
इस उदाहरण में, इनबाउंड अनुरोध पर zipcode
नाम के साथ queryparam
की मौजूदगी को लागू करने के लिए, शर्त का इस्तेमाल किया गया है. अगर
वह 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>यहां यह बताया गया है कि RayFault में क्या होगा:
<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 की मदद से सेट किए गए गड़बड़ी वाले वैरिएबल के बारे में बताया गया है. यह जानकारी जानना ज़रूरी है कि क्या गड़बड़ियों को ठीक करने के लिए, गड़बड़ी से जुड़े नियम बनाए जा रहे हैं. ज़्यादा जानने के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी और गड़बड़ियां ठीक करना देखें.
रनटाइम से जुड़ी गड़बड़ियां
नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.
गड़बड़ी का कोड | एचटीटीपी कोड स्थिति | वजह |
---|---|---|
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]" } }
स्कीमा
हर तरह की नीति को एक्सएमएल स्कीमा (.xsd
) से तय किया जाता है. रेफ़रंस के लिए, नीति के स्कीमा GitHub पर उपलब्ध हैं.
मिलते-जुलते विषय
गड़बड़ियां ठीक करना देखें