يتم الآن عرض مستندات 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 |
الاسم الداخلي للسياسة وقد تحتوي قيمة السمة ويمكنك اختياريًا استخدام العنصر |
لا ينطبق | مطلوبة |
continueOnError |
اضبط القيمة على اضبط القيمة على |
false | إجراء اختياري |
enabled |
اضبط القيمة على اضبط القيمة على |
صحيح | إجراء اختياري |
async |
تم إيقاف هذه السمة نهائيًا. |
false | منهي العمل به |
العنصر <DisplayName>
استخدِم هذه السمة بالإضافة إلى السمة name
لتصنيف السياسة في محرِّر الخادم الوكيل لواجهة المستخدم الإدارية باستخدام اسم مختلف بلغة طبيعية.
<DisplayName>Policy Display Name</DisplayName>
تلقائي |
لا ينطبق إذا لم تستخدم هذا العنصر، سيتم استخدام قيمة السمة |
---|---|
التواجد في المنزل | إجراء اختياري |
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. | build |
أخطاء النشر
يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.
اسم الخطأ | السبب | إصلاح |
---|---|---|
InvalidResourceUrlFormat |
إذا كان تنسيق عنوان URL للمورد المحدّد في <ResourceURL> أو العنصر <IncludeURL> في سياسة PythonScript غير صالح، سيتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات. |
build |
InvalidResourceUrlReference |
وإذا كان العنصران <ResourceURL> أو <IncludeURL> يشيران
إلى ملف PythonScript غير متوفر، سيتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات.
يجب أن يكون ملف المصدر المشار إليه متوفرًا على مستوى الخادم الوكيل لواجهة برمجة التطبيقات أو البيئة أو مستوى المؤسسة. |
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>