سياسة PythonScript

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

الموضوع

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

تتوفر لغات البرمجة Python من خلال الإصدار 2.5.2 من Jithon. يجب أن تكون مكتبات الجهات الخارجية التي تضيفها "Python خالصة" (يتم تنفيذها في Python فقط). لمزيد من المعلومات عن إضافة المكتبات، راجع ملفات الموارد.

لا تحتوي سياسة Python على أي رمز فعلي. بدلاً من ذلك، تشير سياسة Python إلى مورد Python وتحدّد الخطوة في مسار واجهة برمجة التطبيقات حيث يتم تنفيذ النص البرمجي Python. يمكنك تحميل النص البرمجي من خلال محرِّر الخادم الوكيل لواجهة المستخدم الإدارية أو يمكنك تضمينه في دليل /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 البرمجي ذي الصلة.

النص البرمجي في بايثون

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

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 لمواصلة تنفيذ التدفق حتى بعد تعذُّر تنفيذ السياسة.

false إجراء اختياري
enabled

اضبط القيمة على true لفرض السياسة.

اضبط القيمة على false من أجل إيقاف السياسة. ولن يتم فرض السياسة حتى إذا ظلت مرتبطة بمسار.

صحيح إجراء اختياري
async

تم إيقاف هذه السمة نهائيًا.

false منهي العمل به

العنصر <DisplayName>

استخدِم هذه السمة بالإضافة إلى السمة name لتصنيف السياسة في محرِّر الخادم الوكيل لواجهة المستخدم الإدارية باستخدام اسم مختلف بلغة طبيعية.

<DisplayName>Policy Display Name</DisplayName>
تلقائي

لا ينطبق

إذا لم تستخدم هذا العنصر، سيتم استخدام قيمة السمة name الخاصة بالسياسة.

التواجد في المنزل إجراء اختياري
Type سلسلة

عنصر<ResourceURL>

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

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

عنصر<InsertURL>

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

يمكنك تضمين أكثر من مورد تبعية واحد للغة بايثون مع عناصر <IncludeURL> إضافية.

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

رموز الخطأ

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

أخطاء في وقت التشغيل

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

رمز الخطأ رموز حالة HTTP السبب إصلاح
steps.script.ScriptEvaluationFailed 500 قد تؤدي سياسة PythonScript إلى عرض عدة أنواع مختلفة من أخطاء ScriptExecutionإخفاق. وتشمل أنواع الأخطاء الشائعة 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>

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