PythonScript নীতি

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

কী

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

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

Python নীতিতে কোনও আসল কোড থাকে না। এর পরিবর্তে, Python নীতিতে Python রিসোর্স রেফারেন্স করা হয় এবং API ফ্লোতে সেই ধাপটি নির্ধারণ করা হয় যেখানে Python স্ক্রিপ্ট এক্সিকিউট হয়। আপনি ম্যানেজমেন্ট UI প্রক্সি এডিটরের মাধ্যমে আপনার স্ক্রিপ্ট আপলোড করতে পারেন অথবা আপনি এটি API প্রক্সির /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 স্ক্রিপ্ট

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

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> এলিমেন্ট

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

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

<IncludeURL> এলিমেন্ট

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

অতিরিক্ত <IncludeURL> এলিমেন্ট সহ একাধিক Python নির্ভরতা রিসোর্স যোগ করুন।

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

সমস্যার কোড

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

রানটাইম সমস্যা

নীতি এক্সিকিউট করার সময় এই সমস্যা হতে পারে।

সমস্যার কোড 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>

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