سياسة PythonScript

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

المزايا

تتيح لك سياسة Python البرمجية إضافة وظائف Python مخصصة إلى مسار الخادم الوكيل لواجهة برمجة التطبيقات، وخاصةً عندما تكون الوظائف التي تحتاج إليها تفوق ما تتّبعه سياسات Edge غير التقليدية التي تقدمها.

يتوفر الدعم للغة بايثون من خلال Jython الإصدار 2.5.2. يجب أن تكون مكتبات الجهات الخارجية التي تضيفها هي pure Python. (يتم تنفيذها في بايثون فقط). لمزيد من المعلومات حول إضافة المكتبات، يُرجى الاطّلاع على ملفات الموارد.

لا تحتوي سياسة Python على أي رمز. بدلاً من ذلك، تشير سياسة بايثون إلى لغة بايثون ويحدد الخطوة في تدفق واجهة برمجة التطبيقات حيث يتم تنفيذ نص بايثون. يمكنك تحميل النص البرمجي من خلال محرر الخادم الوكيل لواجهة مستخدم الإدارة، أو يمكنك تضمينه في دليل /resources/py في الخوادم الوكيلة لواجهة برمجة التطبيقات التي تطوّرها محليًا

نماذج

Python Policy & نص الفيديو

سياسة النصوص البرمجية في 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 البرمجي ذي الصلة المصدر.

نص بايثون

وهذا يوضح ما يمكنك تضمينه في نص بايثون نفسه.

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 للسياسة على النحو التالي: استخدام البيانات المختلفة.

التواجد في المنزل اختياري
النوع سلسلة

&lt;ResourceURL&gt; عنصر

يحدّد هذا العنصر ملف Python الرئيسي الذي سيتم تنفيذه في مسار واجهة برمجة التطبيقات. يمكنك تخزين هذا الملف في نطاق الخادم الوكيل لواجهة برمجة التطبيقات (ضمن /apiproxy/resources/py في الخادم الوكيل لواجهة برمجة التطبيقات في قسم "النصوص البرمجية" ضمن جزء المستكشف في محرر واجهة برمجة التطبيقات الوكيلة) أو في القسم على مستوى المؤسسة أو البيئة لإعادة استخدامها عبر الخوادم الوكيلة المتعددة لواجهة برمجة التطبيقات، كما هو موضح في ملفات الموارد: يمكن أن تستخدم التعليمات البرمجية الكائنات والطرق وخصائص نموذج كائن JavaScript.

<ResourceURL>py://myscript.py</ResourceURL>
الإعداد التلقائي: لا ينطبق
الحضور: مطلوب
النوع: سلسلة

&lt;IncludeURL&gt; عنصر

لتحديد ملف بايثون لتحميله كتبعية لملف بايثون الرئيسي المحدد باستخدام العنصر <ResourceURL>. سيتم تقييم النصوص بالترتيب الذي أن يتم إدراجها في السياسة

قم بتضمين أكثر من مورد تبعية في Python مع <IncludeURL>.

<IncludeURL>py://myscript_dependency.py</IncludeURL>
الإعداد التلقائي: لا ينطبق
الحضور: اختياري
النوع: سلسلة

رموز الخطأ

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.script.ScriptEvaluationFailed 500 The PythonScript policy can throw several different types of ScriptExecutionFailed errors. Commonly seen types of errors include NameError and ZeroDivisionError.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidResourceUrlFormat If the format of the resource URL specified within the <ResourceURL> or the <IncludeURL> element of the PythonScript policy is invalid, then the deployment of the API proxy fails.
InvalidResourceUrlReference If the <ResourceURL> or the <IncludeURL> elements refer to a PythonScript file that does not exist, then the deployment of the API proxy fails. The referenced source file must exist either the API proxy, environment, or organization level.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "ScriptExecutionFailed"
pythonscript.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. pythonscript.PythonScript-1.failed = true

Example error response

{
  "fault": {
    "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"",
    "detail": {
      "errorcode": "steps.script.ScriptExecutionFailed"
    }
  }
}

Example fault rule

<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>

مواضيع ذات صلة