خط‌مشی PythonScript

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

چه

خط‌مشی «نوشتار Python» به شما امکان می‌دهد عملکرد سفارشی‌سازی‌شده Python را به جریان پراکسی API خود اضافه کنید، به‌ویژه زمانی که عملکرد موردنیاز شما فراتر از آن چیزی است که خط‌مشی‌های آماده Edge ارائه می‌دهند.

پشتیبانی از زبان Python ازطریق Jython نسخه ۲.۵.۲ ارائه می‌شود. کتابخانه‌های طرف سومی که اضافه می‌کنید باید «Python خالص» باشند (فقط در Python پیاده‌سازی شده باشند). برای اطلاعات بیشتر درباره افزودن کتابخانه‌ها، فایل‌های منبع را ببینید.

خط‌مشی Python حاوی کد واقعی نیست. درعوض، خط‌مشی Python به منبع Python ارجاع می‌دهد و «مرحله» را در جریان میانای برنامه‌سازی کاربردی که در آن دستورگان Python اجرا می‌شود تعریف می‌کند. می‌توانید برنامه خود را ازطریق ویرایشگر پراکسی «واسط کاربر مدیریت» بارگذاری کنید، یا می‌توانید آن را در /resources/py دایرکتوری در پراکسی‌های API که به‌صورت محلی توسعه می‌دهید اضافه کنید.

نمونه‌ها

خط‌مشی و دستورگان 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> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر<ResourceURL>

این عنصر فایل اصلی Python را که در جریان API اجرا خواهد شد مشخص می‌کند. می‌توانید این فایل را در محدوده پراکسی API (در زیر /apiproxy/resources/py در بسته پراکسی API یا در بخش «دستورگان» در قاب «پیمایشگر» ویرایشگر پراکسی API)، یا در محدوده‌های سازمان یا محیط برای استفاده مجدد در چندین پراکسی API ذخیره کنید، همان‌طور که در فایل‌های منبع توضیح داده شده است. کد شما می‌تواند از اشیا، روش‌ها، و دارایی‌های مدل شیء جاوا اسکریپت استفاده کند.

<ResourceURL>py://myscript.py</ResourceURL>
پیش‌فرض: خالی
حضور: الزامی
نوع: رشته

عنصر<IncludeURL>

فایل Python را مشخص می‌کند تا به‌عنوان وابستگی در فایل Python اصلی که با عنصر <ResourceURL> مشخص شده است بار شود. متن‌های دستور براساس ترتیبی که در خط‌مشی فهرست شده‌اند ارزیابی می‌شوند.

بیش‌از یک منبع وابستگی Python با عناصر <IncludeURL> اضافی اضافه کنید.

<IncludeURL>py://myscript_dependency.py</IncludeURL>
پیش‌فرض: خالی
حضور: اختیاری
نوع: رشته

کدهای خطا

این بخش کدهای خطا و پیام‌های خطایی را که برگردانده می‌شوند و متغیرهای خطایی را که Edge هنگام راه‌اندازی خطا در این خط‌مشی تنظیم می‌کند شرح می‌دهد. این اطلاعات برای دانستن اینکه آیا قوانین خطایی را برای مدیریت خطاها توسعه می‌دهید یا نه مهم است. برای کسب اطلاعات بیشتر، آنچه باید درباره خطاهای خط‌مشی بدانیدو رسیدگی به اشکالات را ببینید.

خطاهای زمان اجرا

این خطاها ممکن است هنگام اجرای خط‌مشی رخ دهند.

کد خطا وضعیت HTTP علت رفع اشکال
steps.script.ScriptEvaluationFailed ۵۰۰ خط‌مشی PythonScript می‌تواند چندین نوع مختلف از خطاهای ScriptExecutionFailed را ایجاد کند. انواع خطاهای رایج شامل NameError و ZeroDivisionError می‌شود.

خطاهای استقرار

این خطاها ممکن است زمانی رخ دهند که یک پراکسی حاوی این خط‌مشی را مستقر می‌کنید.

نام خطا علت رفع اشکال
InvalidResourceUrlFormat اگر قالب نشانی وب منبع مشخص‌شده در <ResourceURL> یا عنصر <IncludeURL> خط‌مشی PythonScript نامعتبر باشد، استقرار پراکسی 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>

موضوعات مرتبط