পাইথনস্ক্রিপ্ট নীতি

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।

কি

পাইথন স্ক্রিপ্ট নীতি আপনাকে আপনার API প্রক্সি ফ্লোতে কাস্টমাইজড পাইথন কার্যকারিতা যোগ করতে দেয়, বিশেষ করে যখন আপনার প্রয়োজনীয় কার্যকারিতা এজ-অফ-দ্য-বক্স নীতিগুলি প্রদান করে তার বাইরে।

Python ভাষা সমর্থন Jython সংস্করণ 2.5.2 এর মাধ্যমে প্রদান করা হয়। আপনার যোগ করা তৃতীয় পক্ষের লাইব্রেরিগুলি অবশ্যই "বিশুদ্ধ পাইথন" হতে হবে (শুধুমাত্র পাইথনে প্রয়োগ করা হয়েছে)। লাইব্রেরি যোগ করার বিষয়ে আরও জানতে, রিসোর্স ফাইলগুলি দেখুন।

একটি পাইথন নীতিতে কোনো প্রকৃত কোড থাকে না। পরিবর্তে, একটি পাইথন নীতি একটি পাইথন সংস্থান উল্লেখ করে এবং এপিআই প্রবাহের ধাপটি সংজ্ঞায়িত করে যেখানে পাইথন স্ক্রিপ্ট চালানো হয়। আপনি ম্যানেজমেন্ট UI প্রক্সি সম্পাদকের মাধ্যমে আপনার স্ক্রিপ্ট আপলোড করতে পারেন, অথবা আপনি স্থানীয়ভাবে বিকাশ করা API প্রক্সিগুলিতে /resources/py ডিরেক্টরিতে এটি অন্তর্ভুক্ত করতে পারেন।

নমুনা

পাইথন নীতি এবং স্ক্রিপ্ট

পাইথন স্ক্রিপ্ট নীতি

<?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 স্ক্রিপ্ট সংস্থান নির্দিষ্ট করে।

পাইথন স্ক্রিপ্ট

এটি দেখায় যে আপনি পাইথন স্ক্রিপ্টে কী অন্তর্ভুক্ত করতে পারেন।

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 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<ResourceURL> উপাদান

এই উপাদানটি প্রধান পাইথন ফাইলটি নির্দিষ্ট করে যা API ফ্লোতে কার্যকর হবে। আপনি এই ফাইলটিকে API প্রক্সি স্কোপে ( /apiproxy/resources/py API প্রক্সি বান্ডেলে বা API প্রক্সি এডিটরের নেভিগেটর ফলকের স্ক্রিপ্ট বিভাগে) অথবা একাধিক API প্রক্সি জুড়ে পুনঃব্যবহারের জন্য সংস্থা বা পরিবেশের সুযোগে সংরক্ষণ করতে পারেন , যেমন রিসোর্স ফাইলে বর্ণনা করা হয়েছে। আপনার কোড জাভাস্ক্রিপ্ট অবজেক্ট মডেলের বস্তু, পদ্ধতি এবং বৈশিষ্ট্য ব্যবহার করতে পারে।

<ResourceURL>py://myscript.py</ResourceURL>
ডিফল্ট: কোনোটিই নয়
উপস্থিতি: প্রয়োজন
প্রকার: স্ট্রিং

<IncludeURL> উপাদান

<ResourceURL> উপাদানের সাথে নির্দিষ্ট করা প্রধান পাইথন ফাইলের উপর নির্ভরতা হিসাবে লোড করার জন্য একটি পাইথন ফাইল নির্দিষ্ট করে। স্ক্রিপ্টগুলি নীতিতে যে ক্রমে তালিকাভুক্ত করা হয়েছে সেই ক্রমে মূল্যায়ন করা হবে৷

অতিরিক্ত <IncludeURL> উপাদান সহ একাধিক পাইথন নির্ভরতা সংস্থান অন্তর্ভুক্ত করুন।

<IncludeURL>py://myscript_dependency.py</IncludeURL>
ডিফল্ট: কোনোটিই নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: স্ট্রিং

ত্রুটি কোড

এই বিভাগটি ফল্ট কোড এবং ত্রুটির বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷

রানটাইম ত্রুটি

নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷

ফল্ট কোড HTTP স্থিতি কারণ ঠিক করুন
steps.script.ScriptEvaluationFailed 500 PythonScript নীতি বিভিন্ন ধরনের ScriptExecutionFailed ত্রুটি নিক্ষেপ করতে পারে। সচরাচর দেখা যায় এমন ত্রুটির মধ্যে রয়েছে NameError এবং ZeroDivisionError

স্থাপনার ত্রুটি

আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷

ত্রুটির নাম কারণ ঠিক করুন
InvalidResourceUrlFormat PythonScript নীতির <ResourceURL> বা <IncludeURL> উপাদানের মধ্যে নির্দিষ্ট করা রিসোর্স URL-এর বিন্যাস যদি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
InvalidResourceUrlReference যদি <ResourceURL> বা <IncludeURL> উপাদানগুলি একটি PythonScript ফাইল উল্লেখ করে যা বিদ্যমান নেই, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। উল্লেখিত সোর্স ফাইলটি অবশ্যই API প্রক্সি, এনভায়রনমেন্ট বা প্রতিষ্ঠানের স্তরে বিদ্যমান থাকতে হবে।

ফল্ট ভেরিয়েবল

যখন এই নীতি রানটাইমে একটি ত্রুটি ট্রিগার করে তখন এই ভেরিয়েবলগুলি সেট করা হয়৷ আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।

ভেরিয়েবল কোথায় উদাহরণ
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>
,

এই বিভাগটি ফল্ট কোড এবং ত্রুটির বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷

রানটাইম ত্রুটি

নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷

ফল্ট কোড HTTP স্থিতি কারণ ঠিক করুন
steps.script.ScriptEvaluationFailed 500 PythonScript নীতি বিভিন্ন ধরনের ScriptExecutionFailed ত্রুটি নিক্ষেপ করতে পারে। সচরাচর দেখা যায় এমন ত্রুটির মধ্যে রয়েছে NameError এবং ZeroDivisionError

স্থাপনার ত্রুটি

আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷

ত্রুটির নাম কারণ ঠিক করুন
InvalidResourceUrlFormat PythonScript নীতির <ResourceURL> বা <IncludeURL> উপাদানের মধ্যে নির্দিষ্ট করা রিসোর্স URL-এর বিন্যাস যদি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
InvalidResourceUrlReference যদি <ResourceURL> বা <IncludeURL> উপাদানগুলি একটি PythonScript ফাইল উল্লেখ করে যা বিদ্যমান নেই, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। উল্লেখিত সোর্স ফাইলটি অবশ্যই API প্রক্সি, এনভায়রনমেন্ট বা প্রতিষ্ঠানের স্তরে বিদ্যমান থাকতে হবে।

ফল্ট ভেরিয়েবল

যখন এই নীতি রানটাইমে একটি ত্রুটি ট্রিগার করে তখন এই ভেরিয়েবলগুলি সেট করা হয়৷ আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।

ভেরিয়েবল কোথায় উদাহরণ
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>

সম্পর্কিত বিষয়