PythonScript की नीति

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

नीति का अंदरूनी नाम. name एट्रिब्यूट की वैल्यू में अक्षर, संख्याएं, स्पेस, हाइफ़न, अंडरस्कोर, और पीरियड शामिल किए जा सकते हैं. इस वैल्यू में 255 से ज़्यादा वर्ण नहीं हो सकते.

इसके अलावा, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में नीति को आम भाषा में अलग नाम से लेबल करने के लिए, <DisplayName> एलिमेंट का इस्तेमाल करें.

लागू नहीं ज़रूरी है
continueOnError

इस नीति को false पर सेट करें, ताकि नीति के काम न करने पर गड़बड़ी का मैसेज दिखे. ज़्यादातर नीतियों में, ऐसा आम तौर पर किया जाता है.

किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, true पर सेट करें.

false ज़रूरी नहीं
enabled

नीति लागू करने के लिए, true पर सेट करें.

नीति को बंद करने के लिए, false पर सेट करें. अगर यह नीति किसी फ़्लो से जुड़ी हुई है, तब भी उसे लागू नहीं किया जाएगा.

सही ज़रूरी नहीं
async

यह एट्रिब्यूट अब काम नहीं करता.

false बहिष्कृत

<DisplayName> एलिमेंट

मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर में, आम भाषा के अलग नाम से नीति को लेबल करने के लिए, name एट्रिब्यूट का इस्तेमाल करें.

<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट

लागू नहीं

अगर इस एलिमेंट को छोड़ दिया जाता है, तो नीति के name एट्रिब्यूट की वैल्यू का इस्तेमाल किया जाता है.

मौजूदगी ज़रूरी नहीं
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 में गड़बड़ियां देखने को मिलती हैं.

डिप्लॉयमेंट से जुड़ी गड़बड़ियां

ये गड़बड़ियां तब हो सकती हैं, जब इस नीति वाले किसी प्रॉक्सी को डिप्लॉय किया जाता है.

गड़बड़ी का नाम वजह समाधान
InvalidResourceUrlFormat अगर PythonScript नीति के <IncludeURL> एलिमेंट या <ResourceURL> में दिए गए रिसॉर्स यूआरएल का फ़ॉर्मैट अमान्य है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकेगा.
InvalidResourceUrlReference अगर <ResourceURL> या <IncludeURL> एलिमेंट ऐसी PythonScript फ़ाइल को रेफ़र करते हैं जो मौजूद नहीं है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता. रेफ़र की गई सोर्स फ़ाइल, एपीआई प्रॉक्सी, एनवायरमेंट या संगठन के लेवल पर मौजूद होनी चाहिए.

गड़बड़ी वाले वैरिएबल

ये वैरिएबल तब सेट किए जाते हैं, जब यह नीति रनटाइम के दौरान कोई गड़बड़ी ट्रिगर करती है. ज़्यादा जानकारी के लिए, नीति से जुड़ी गड़बड़ियों के बारे में आपके लिए ज़रूरी जानकारी देखें.

वैरिएबल जगह उदाहरण
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>

मिलते-जुलते विषय