PythonScript की नीति

आपको Apigee Edge का दस्तावेज़ दिख रहा है.
Apigee X के दस्तावेज़ पर जाएं.
जानकारी

क्या

Python स्क्रिप्ट की नीति की मदद से, एपीआई प्रॉक्सी फ़्लो में Python की पसंद के मुताबिक सुविधा जोड़ी जा सकती है. ऐसा खास तौर पर तब किया जाता है, जब आपको ऐसी सुविधा की ज़रूरत होती है जो Edge की डिफ़ॉल्ट नीतियों में उपलब्ध नहीं होती.

Python भाषा के लिए, Jython version 2.5.2 का इस्तेमाल किया जाता है. जोड़ी गई तीसरे पक्ष की लाइब्रेरी "प्योर 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 पर सेट करें विफल होता है.

गलत वैकल्पिक
enabled

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

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

सही वैकल्पिक
async

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

गलत बहिष्कृत

&lt;DisplayName&gt; एलिमेंट

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

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

लागू नहीं

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

मौजूदगी वैकल्पिक
टाइप स्ट्रिंग

<ResourceURL> एलिमेंट

यह एलिमेंट, मुख्य Python फ़ाइल के बारे में बताता है. यह फ़ाइल, एपीआई फ़्लो में एक्ज़ीक्यूट होगी. इस फ़ाइल को एपीआई प्रॉक्सी स्कोप (एपीआई प्रॉक्सी बंडल में /apiproxy/resources/py के नीचे या एपीआई प्रॉक्सी एडिटर के नेविगेटर पैनल के स्क्रिप्ट सेक्शन में) पर सेव किया जा सकता है. इसके अलावा, इसे संगठन या एनवायरमेंट स्कोप पर भी सेव किया जा सकता है, ताकि इसका इस्तेमाल कई एपीआई प्रॉक्सी में किया जा सके. इसके बारे में संसाधन फ़ाइलें में बताया गया है. आपका कोड, JavaScript ऑब्जेक्ट मॉडल के ऑब्जेक्ट, तरीकों, और प्रॉपर्टी का इस्तेमाल कर सकता है.

<ResourceURL>py://myscript.py</ResourceURL>
डिफ़ॉल्ट: कोई नहीं
मौजूदगी: ज़रूरी है
टाइप: स्ट्रिंग

<IncludeURL> एलिमेंट

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

एक से ज़्यादा Python डिपेंडेंसी रिसॉर्स शामिल करें. साथ ही, उनमें अतिरिक्त <IncludeURL> एलिमेंट शामिल करें.

<IncludeURL>py://myscript_dependency.py</IncludeURL>
डिफ़ॉल्ट: कोई नहीं
मौजूदगी: वैकल्पिक
टाइप: स्ट्रिंग

गड़बड़ी के कोड

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

रनटाइम की गड़बड़ियां

नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.

गड़बड़ी कोड एचटीटीपी कोड स्थिति वजह ठीक करें
steps.script.ScriptEvaluationFailed 500 PythonScript नीति के उल्लंघन की वजह से, आपको अलग-अलग तरह की कई तरह की Script ScriptutionFailed गड़बड़ियां मिल सकती हैं. आम तौर पर देखी जाने वाली गड़बड़ियों में NameError और ZeroDivisionError.

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

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

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

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