আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
কী
পাইথন স্ক্রিপ্ট পলিসি আপনাকে আপনার এপিআই প্রক্সি ফ্লোতে কাস্টমাইজড পাইথন কার্যকারিতা যোগ করার সুযোগ দেয়, বিশেষ করে যখন আপনার প্রয়োজনীয় কার্যকারিতা এজ-এর ডিফল্ট পলিসিগুলোর আওতার বাইরে থাকে।
জাইথন সংস্করণ ২.৫.২ এর মাধ্যমে পাইথন ভাষার সমর্থন প্রদান করা হয়। আপনার যোগ করা থার্ড-পার্টি লাইব্রেরিগুলো অবশ্যই "পিওর পাইথন" (শুধুমাত্র পাইথনে বাস্তবায়িত) হতে হবে। লাইব্রেরি যোগ করার বিষয়ে আরও জানতে, রিসোর্স ফাইলস দেখুন।
একটি পাইথন পলিসিতে কোনো প্রকৃত কোড থাকে না। এর পরিবর্তে, একটি পাইথন পলিসি একটি পাইথন রিসোর্সকে রেফারেন্স করে এবং এপিআই ফ্লো-এর সেই ধাপটি নির্ধারণ করে যেখানে পাইথন স্ক্রিপ্টটি এক্সিকিউট হবে। আপনি ম্যানেজমেন্ট UI প্রক্সি এডিটরের মাধ্যমে আপনার স্ক্রিপ্ট আপলোড করতে পারেন, অথবা আপনার স্থানীয়ভাবে তৈরি করা এপিআই প্রক্সিগুলোর /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 এলিমেন্টটি প্রাসঙ্গিক পাইথন স্ক্রিপ্ট রিসোর্স নির্দিষ্ট করে।
পাইথন স্ক্রিপ্ট
এটি দেখায় যে আপনি পাইথন স্ক্রিপ্টটিতে কী কী অন্তর্ভুক্ত করতে পারেন।
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 | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
| ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
|---|---|
| উপস্থিতি | ঐচ্ছিক |
| টাইপ | স্ট্রিং |
<রিসোর্সইউআরএল> উপাদান
এই এলিমেন্টটি মূল পাইথন ফাইলটি নির্দিষ্ট করে, যা এপিআই ফ্লো-তে এক্সিকিউট হবে। আপনি এই ফাইলটি এপিআই প্রক্সি স্কোপে (এপিআই প্রক্সি বান্ডেলের মধ্যে /apiproxy/resources/py তে অথবা এপিআই প্রক্সি এডিটরের নেভিগেটর পেনের স্ক্রিপ্টস সেকশনে), অথবা রিসোর্স ফাইলস অংশে বর্ণিত পদ্ধতি অনুযায়ী একাধিক এপিআই প্রক্সির মধ্যে পুনঃব্যবহারের জন্য অর্গানাইজেশন বা এনভায়রনমেন্ট স্কোপে সংরক্ষণ করতে পারেন। আপনার কোড জাভাস্ক্রিপ্ট অবজেক্ট মডেলের অবজেক্ট, মেথড এবং প্রোপার্টি ব্যবহার করতে পারে।
<ResourceURL>py://myscript.py</ResourceURL>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | প্রয়োজনীয় |
| প্রকার: | স্ট্রিং |
<IncludeURL> উপাদান
<ResourceURL> এলিমেন্টের মাধ্যমে নির্দিষ্ট করা মূল পাইথন ফাইলের ডিপেন্ডেন্সি হিসেবে লোড করার জন্য একটি পাইথন ফাইল নির্দিষ্ট করে। স্ক্রিপ্টগুলো পলিসিতে তালিকাভুক্ত ক্রমানুসারে মূল্যায়ন করা হবে।
অতিরিক্ত <IncludeURL> এলিমেন্ট ব্যবহার করে একাধিক পাইথন ডিপেন্ডেন্সি রিসোর্স অন্তর্ভুক্ত করুন।
<IncludeURL>py://myscript_dependency.py</IncludeURL>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | ঐচ্ছিক |
| প্রকার: | স্ট্রিং |
ত্রুটি কোড
এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷
রানটাইম ত্রুটি
নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷
| ফল্ট কোড | HTTP স্থিতি | কারণ | ঠিক করুন |
|---|---|---|---|
steps.script.ScriptEvaluationFailed | 500 | PythonScript নীতি বিভিন্ন ধরনের ScriptExecutionFailed ত্রুটি নিক্ষেপ করতে পারে। সচরাচর দেখা যায় এমন ত্রুটির মধ্যে রয়েছে NameError এবং ZeroDivisionError । | build |
স্থাপনার ত্রুটি
আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷
| ত্রুটির নাম | কারণ | ঠিক করুন |
|---|---|---|
InvalidResourceUrlFormat | PythonScript নীতির <ResourceURL> বা <IncludeURL> উপাদানের মধ্যে নির্দিষ্ট করা রিসোর্স URL-এর বিন্যাস যদি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। | build |
InvalidResourceUrlReference | যদি <ResourceURL> বা <IncludeURL> উপাদানগুলি একটি PythonScript ফাইল উল্লেখ করে যা বিদ্যমান নেই, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। উল্লেখিত সোর্স ফাইলটি অবশ্যই API প্রক্সি, এনভায়রনমেন্ট বা প্রতিষ্ঠানের স্তরে বিদ্যমান থাকতে হবে। | 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>
সম্পর্কিত বিষয়
, আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
কী
পাইথন স্ক্রিপ্ট পলিসি আপনাকে আপনার এপিআই প্রক্সি ফ্লোতে কাস্টমাইজড পাইথন কার্যকারিতা যোগ করার সুযোগ দেয়, বিশেষ করে যখন আপনার প্রয়োজনীয় কার্যকারিতা এজ-এর ডিফল্ট পলিসিগুলোর আওতার বাইরে থাকে।
জাইথন সংস্করণ ২.৫.২ এর মাধ্যমে পাইথন ভাষার সমর্থন প্রদান করা হয়। আপনার যোগ করা থার্ড-পার্টি লাইব্রেরিগুলো অবশ্যই "পিওর পাইথন" (শুধুমাত্র পাইথনে বাস্তবায়িত) হতে হবে। লাইব্রেরি যোগ করার বিষয়ে আরও জানতে, রিসোর্স ফাইলস দেখুন।
একটি পাইথন পলিসিতে কোনো প্রকৃত কোড থাকে না। এর পরিবর্তে, একটি পাইথন পলিসি একটি পাইথন রিসোর্সকে রেফারেন্স করে এবং এপিআই ফ্লো-এর সেই ধাপটি নির্ধারণ করে যেখানে পাইথন স্ক্রিপ্টটি এক্সিকিউট হবে। আপনি ম্যানেজমেন্ট UI প্রক্সি এডিটরের মাধ্যমে আপনার স্ক্রিপ্ট আপলোড করতে পারেন, অথবা আপনার স্থানীয়ভাবে তৈরি করা এপিআই প্রক্সিগুলোর /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 এলিমেন্টটি প্রাসঙ্গিক পাইথন স্ক্রিপ্ট রিসোর্স নির্দিষ্ট করে।
পাইথন স্ক্রিপ্ট
এটি দেখায় যে আপনি পাইথন স্ক্রিপ্টটিতে কী কী অন্তর্ভুক্ত করতে পারেন।
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 | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
| ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
|---|---|
| উপস্থিতি | ঐচ্ছিক |
| টাইপ | স্ট্রিং |
<রিসোর্সইউআরএল> উপাদান
এই এলিমেন্টটি মূল পাইথন ফাইলটি নির্দিষ্ট করে, যা এপিআই ফ্লো-তে এক্সিকিউট হবে। আপনি এই ফাইলটি এপিআই প্রক্সি স্কোপে (এপিআই প্রক্সি বান্ডেলের মধ্যে /apiproxy/resources/py তে অথবা এপিআই প্রক্সি এডিটরের নেভিগেটর পেনের স্ক্রিপ্টস সেকশনে), অথবা রিসোর্স ফাইলস অংশে বর্ণিত পদ্ধতি অনুযায়ী একাধিক এপিআই প্রক্সির মধ্যে পুনঃব্যবহারের জন্য অর্গানাইজেশন বা এনভায়রনমেন্ট স্কোপে সংরক্ষণ করতে পারেন। আপনার কোড জাভাস্ক্রিপ্ট অবজেক্ট মডেলের অবজেক্ট, মেথড এবং প্রোপার্টি ব্যবহার করতে পারে।
<ResourceURL>py://myscript.py</ResourceURL>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | প্রয়োজনীয় |
| প্রকার: | স্ট্রিং |
<IncludeURL> উপাদান
<ResourceURL> এলিমেন্টের মাধ্যমে নির্দিষ্ট করা মূল পাইথন ফাইলের ডিপেন্ডেন্সি হিসেবে লোড করার জন্য একটি পাইথন ফাইল নির্দিষ্ট করে। স্ক্রিপ্টগুলো পলিসিতে তালিকাভুক্ত ক্রমানুসারে মূল্যায়ন করা হবে।
অতিরিক্ত <IncludeURL> এলিমেন্ট ব্যবহার করে একাধিক পাইথন ডিপেন্ডেন্সি রিসোর্স অন্তর্ভুক্ত করুন।
<IncludeURL>py://myscript_dependency.py</IncludeURL>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | ঐচ্ছিক |
| প্রকার: | স্ট্রিং |
ত্রুটি কোড
এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷
রানটাইম ত্রুটি
নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷
| ফল্ট কোড | HTTP স্থিতি | কারণ | ঠিক করুন |
|---|---|---|---|
steps.script.ScriptEvaluationFailed | 500 | PythonScript নীতি বিভিন্ন ধরনের ScriptExecutionFailed ত্রুটি নিক্ষেপ করতে পারে। সচরাচর দেখা যায় এমন ত্রুটির মধ্যে রয়েছে NameError এবং ZeroDivisionError । | build |
স্থাপনার ত্রুটি
আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷
| ত্রুটির নাম | কারণ | ঠিক করুন |
|---|---|---|
InvalidResourceUrlFormat | PythonScript নীতির <ResourceURL> বা <IncludeURL> উপাদানের মধ্যে নির্দিষ্ট করা রিসোর্স URL-এর বিন্যাস যদি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। | build |
InvalidResourceUrlReference | যদি <ResourceURL> বা <IncludeURL> উপাদানগুলি একটি PythonScript ফাইল উল্লেখ করে যা বিদ্যমান নেই, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। উল্লেখিত সোর্স ফাইলটি অবশ্যই API প্রক্সি, এনভায়রনমেন্ট বা প্রতিষ্ঠানের স্তরে বিদ্যমান থাকতে হবে। | 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>