سياسة 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>
الإعداد التلقائي: لا ينطبق
الحضور: اختياري
النوع: سلسلة

رموز الخطأ

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

أخطاء بيئة التشغيل

يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.

رمز الخطأ رموز حالة HTTP السبب إصلاح
steps.script.ScriptEvaluationFailed 500 يمكن أن تؤدي سياسة PythonScript إلى ظهور عدة أنواع مختلفة من أخطاء ScriptExecutionFound. شائعة تتضمن أنواع الأخطاء التي تمت رؤيتها NameError ZeroDivisionError:

أخطاء النشر

يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.

اسم الخطأ السبب إصلاح
InvalidResourceUrlFormat إذا تم تحديد تنسيق عنوان URL للمورد المحدد في <ResourceURL> أو العنصر <IncludeURL> في سياسة PythonScript غير صالح، فسيفشل نشر الخادم الوكيل لواجهة برمجة التطبيقات.
InvalidResourceUrlReference إذا كانت السمة <ResourceURL> أو <IncludeURL> يشير إلى ملف PythonScript لم يتم العثور عليه، فسيفشل نشر الخادم الوكيل لواجهة برمجة التطبيقات. يجب أن يكون الملف المصدر المُشار إليه موجودًا إما على مستوى الخادم الوكيل لواجهة برمجة التطبيقات أو البيئة أو المؤسسة.

متغيّرات الأخطاء

يتم ضبط هذه المتغيّرات عندما تؤدي هذه السياسة إلى ظهور خطأ في وقت التشغيل. لمزيد من المعلومات يمكنك الاطّلاع على ما تحتاج إلى معرفتها حول أخطاء السياسة.

المتغيرات المكان مثال
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>

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