Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं. जानकारी
यह क्या है
Python Script नीति से, आपको अपने एपीआई प्रॉक्सी फ़्लो में पसंद के मुताबिक Python फ़ंक्शन जोड़ने की सुविधा मिलती है. खास तौर पर तब, जब आपकी ज़रूरत के फ़ंक्शन की सुविधा, EDGE की आउट-ऑफ़-द-बॉक्स नीतियों से अलग होती है.
Python की भाषा से जुड़ी सहायता, Jython के वर्शन 2.5.2 में उपलब्ध कराई जाती है. आपकी जोड़ी हुई तीसरे पक्ष की लाइब्रेरी "pure Python" होनी चाहिए (सिर्फ़ Python में लागू की जाती है). लाइब्रेरी जोड़ने के बारे में ज़्यादा जानकारी के लिए, संसाधन फ़ाइलें देखें.
Python नीति में कोई असल कोड नहीं होता. इसके बजाय, Python नीति में Python संसाधन का रेफ़रंस दिया जाता है और एपीआई फ़्लो में उस चरण के बारे में बताया जाता है जहां Python स्क्रिप्ट चलाई जाती है. मैनेजमेंट यूज़र इंटरफ़ेस (यूआई)
प्रॉक्सी एडिटर से अपनी स्क्रिप्ट अपलोड की जा सकती है या उसे एपीआई प्रॉक्सी प्रॉक्सी में
/resources/py
डायरेक्ट्री में शामिल किया जा सकता है, जिसे आपने स्थानीय तौर पर डेवलप किया है.
सैंपल
Python नीति और स्क्रिप्ट
Python स्क्रिप्ट की नीति
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Script name="Python-1"> <DisplayName>Python-1</DisplayName> <ResourceURL>py://myscript.py</ResourceURL> </Script>
इस उदाहरण में, ResourceURL एलिमेंट के ज़रिए काम के Python स्क्रिप्ट संसाधन के बारे में बताया गया है.
Python स्क्रिप्ट
इससे पता चलता है कि Python स्क्रिप्ट में क्या शामिल किया जा सकता है.
import base64 username = flow.getVariable("request.formparam.client_id") password = flow.getVariable("request.formparam.client_secret") base64string = base64.encodestring('%s:%s' % (username, password))[:-1] authorization = "Basic "+base64string flow.setVariable("authorizationParam",authorization)
एलिमेंट का रेफ़रंस
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Script name="Python-1"> <DisplayName>Python-1</DisplayName> <ResourceURL>py://myscript.py</ResourceURL> <IncludeURL>py://myscript_dependency.py</IncludeURL> </Script>
इस टेबल में उन एट्रिब्यूट के बारे में बताया गया है जो नीति के सभी पैरंट एलिमेंट के लिए एक जैसे होते हैं:
एट्रिब्यूट | ब्यौरा | डिफ़ॉल्ट | मौजूदगी |
---|---|---|---|
name |
नीति का अंदरूनी नाम. इसके अलावा, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में नीति को आम भाषा में अलग नाम से लेबल करने के लिए, |
लागू नहीं | ज़रूरी है |
continueOnError |
इस नीति को किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, |
false | ज़रूरी नहीं |
enabled |
नीति लागू करने के लिए, नीति को बंद करने के लिए, |
सही | ज़रूरी नहीं |
async |
यह एट्रिब्यूट अब काम नहीं करता. |
false | बहिष्कृत |
<DisplayName> एलिमेंट
मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में, आम भाषा के अलग नाम से नीति को लेबल करने के लिए, name
एट्रिब्यूट का इस्तेमाल करें.
<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट |
लागू नहीं अगर इस एलिमेंट को छोड़ दिया जाता है, तो नीति के |
---|---|
मौजूदगी | ज़रूरी नहीं |
Type | String |
<ResourceURL> एलिमेंट
यह एलिमेंट, एपीआई फ़्लो में काम करने वाली मुख्य Python फ़ाइल के बारे में बताता है. आपके पास इस फ़ाइल को एपीआई प्रॉक्सी स्कोप (एपीआई प्रॉक्सी बंडल में /apiproxy/resources/py
के तहत या एपीआई प्रॉक्सी एडिटर के नेविगेटर पैनल के स्क्रिप्ट सेक्शन में) में सेव करने का विकल्प है. इसके अलावा, संसाधन फ़ाइलों में बताए गए तरीके से,
एक से ज़्यादा एपीआई प्रॉक्सी में फिर से इस्तेमाल करने के लिए, संगठन या एनवायरमेंट स्कोप में इस फ़ाइल को सेव किया जा सकता है. आपका कोड, JavaScript ऑब्जेक्ट मॉडल के ऑब्जेक्ट, तरीके, और प्रॉपर्टी इस्तेमाल कर सकता है.
<ResourceURL>py://myscript.py</ResourceURL>
डिफ़ॉल्ट: | कभी नहीं |
मौजूदगी: | ज़रूरी है |
टाइप: | String |
<IncludeURL> एलिमेंट
इस नीति से, ऐसी Python फ़ाइल तय की जाती है जिसे
<ResourceURL>
एलिमेंट के साथ तय की गई मुख्य Python फ़ाइल पर डिपेंडेंसी के तौर पर लोड किया जाता है. स्क्रिप्ट का आकलन उसी क्रम में किया जाएगा
जिस क्रम में उन्हें नीति में शामिल किया गया है.
अतिरिक्त
<IncludeURL>
एलिमेंट के साथ एक से ज़्यादा Python डिपेंडेंसी रिसॉर्स शामिल करें.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
डिफ़ॉल्ट: | कभी नहीं |
मौजूदगी: | ज़रूरी नहीं |
टाइप: | String |
गड़बड़ी कोड
इस सेक्शन में गड़बड़ी के कोड और दिखाए गए गड़बड़ी के मैसेज के बारे में बताया गया है. साथ ही, इस नीति के ट्रिगर होने पर Edge की मदद से सेट किए गए गड़बड़ी वाले वैरिएबल के बारे में बताया गया है. यह जानकारी जानना ज़रूरी है कि क्या आप गड़बड़ियों को ठीक करने के लिए, गड़बड़ी से जुड़े नियम बना रहे हैं. ज़्यादा जानने के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी और गड़बड़ियों को ठीक करने के तरीके देखें.
रनटाइम से जुड़ी गड़बड़ियां
नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.
गड़बड़ी का कोड | एचटीटीपी कोड स्थिति | वजह | समाधान |
---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 | PythonScript की नीति में, ScriptExecरणपहल से जुड़ी कई अलग-अलग तरह की गड़बड़ियां हो सकती हैं. आम तौर पर, NameError और ZeroDivisionError में गड़बड़ियां देखने को मिलती हैं. | build |
डिप्लॉयमेंट से जुड़ी गड़बड़ियां
ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाले किसी प्रॉक्सी को डिप्लॉय किया जाता है.
गड़बड़ी का नाम | वजह | समाधान |
---|---|---|
InvalidResourceUrlFormat |
अगर PythonScript नीति के <IncludeURL> एलिमेंट या <ResourceURL> में दिए गए रिसॉर्स यूआरएल का फ़ॉर्मैट अमान्य है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकेगा. |
build |
InvalidResourceUrlReference |
अगर <ResourceURL> या <IncludeURL> एलिमेंट ऐसी PythonScript फ़ाइल को रेफ़र करते हैं जो मौजूद नहीं है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता.
रेफ़र की गई सोर्स फ़ाइल, एपीआई प्रॉक्सी, एनवायरमेंट या संगठन के लेवल पर मौजूद होनी चाहिए. |
build |
गड़बड़ी वाले वैरिएबल
ये वैरिएबल तब सेट किए जाते हैं, जब यह नीति रनटाइम के दौरान कोई गड़बड़ी ट्रिगर करती है. ज़्यादा जानकारी के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी देखें.
वैरिएबल | जगह | उदाहरण |
---|---|---|
fault.name="fault_name" |
fault_name, गड़बड़ी का नाम है, जैसा कि ऊपर रनटाइम की गड़बड़ियां टेबल में दिया गया है. गड़बड़ी का नाम, गड़बड़ी के कोड का आखिरी हिस्सा होता है. | fault.name Matches "ScriptExecutionFailed" |
pythonscript.policy_name.failed |
policy_name, उस नीति का उपयोगकर्ता तय किया गया नाम है जिसकी वजह से गड़बड़ी हुई है. | pythonscript.PythonScript-1.failed = true |
गड़बड़ी के जवाब का उदाहरण
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"", "detail": { "errorcode": "steps.script.ScriptExecutionFailed" } } }
गड़बड़ी के नियम का उदाहरण
<FaultRule name="PythonScript Policy Faults"> <Step> <Name>AM-CustomErrorResponse</Name> <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition> </Step> <Condition>(pythonscript.PythonScript-1.failed = true) </Condition> </FaultRule>