أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
الأدوات المستخدمة
تتيح لك سياسة "نص Python البرمجي" إضافة وظائف مخصّصة بلغة Python إلى مسار خادم وكيل واجهة برمجة التطبيقات، خاصةً عندما تكون الوظائف التي تحتاج إليها تتجاوز ما توفّره السياسات الجاهزة في Edge
يتم توفير دعم لغة Python من خلال Jython الإصدار 2.5.2. يجب أن تكون مكتبات الجهات الخارجية التي تضيفها "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 البرمجي ذي الصلة.
نص 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 |
الاسم الداخلي للسياسة. يمكن لقيمة السمة يمكنك، إذا أردت، استخدام العنصر |
لا ينطبق | مطلوب |
continueOnError |
اضبط القيمة على يمكنك ضبط القيمة على |
خطأ | اختياري |
enabled |
اضبط القيمة على اضبط القيمة على |
صحيح | اختياري |
async |
تم إيقاف هذه السمة نهائيًا. |
خطأ | منهي العمل به |
<DisplayName> عنصر
استخدِمه مع السمة name لتصنيف السياسة في
إدارة خادم وكيل لواجهة المستخدم باسم مختلف بلغة طبيعية.
<DisplayName>Policy Display Name</DisplayName>
| تلقائي |
لا ينطبق إذا لم تستخدم هذا العنصر، سيتم ضبط قيمة السمة |
|---|---|
| التواجد في المنزل | اختياري |
| النوع | سلسلة |
<ResourceURL> العنصر
يحدّد هذا العنصر ملف Python الرئيسي الذي سيتم تنفيذه في مسار واجهة برمجة التطبيقات. يمكنك تخزين
هذا الملف على مستوى خادم وكيل واجهة برمجة التطبيقات (ضمن /apiproxy/resources/py في حزمة خادم وكيل واجهة برمجة التطبيقات
أو في قسم "النصوص البرمجية" في لوحة "المتصفح" في محرِّر خادم وكيل واجهة برمجة التطبيقات)، أو على مستوى
المؤسسة أو البيئة لإعادة استخدامه في عدة خوادم وكيل لواجهة برمجة التطبيقات، كما هو موضّح في
ملفات الموارد. يمكن أن يستخدم الرمز البرمجي الكائنات والطرق والسمات الخاصة بنموذج كائن JavaScript.
<ResourceURL>py://myscript.py</ResourceURL>
| القيمة التلقائية: | بلا |
| الوجود: | مطلوب |
| النوع: | سلسلة |
<IncludeURL> العنصر
يحدّد ملف Python الذي سيتم تحميله كملف تابع لملف Python الرئيسي المحدّد باستخدام العنصر
<ResourceURL>. سيتم تقييم النصوص البرمجية بالترتيب الذي تظهر به في السياسة.
يمكنك تضمين أكثر من مورد واحد لملفات Python التابعة باستخدام عناصر إضافية
<IncludeURL>.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
| القيمة التلقائية: | بلا |
| الوجود: | اختياري |
| النوع: | سلسلة |
رموز الخطأ
يصف هذا القسم رموز الخطأ ورسائل الخطأ التي يتم إرجاعها ومتغيراتها. التي يتم ضبطها من خلال Edge عندما تؤدي هذه السياسة إلى ظهور خطأ. من المهم أن تعرف هذه المعلومات إذا كنت تقوم بوضع قواعد خطأ التعامل مع الأخطاء. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على ما تحتاج إلى معرفته حول أخطاء السياسة والتعامل مع المعالجة والأخطاء.
أخطاء بيئة التشغيل
يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.
| رمز الخطأ | رموز حالة HTTP | السبب | إصلاح |
|---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 | يمكن أن تؤدي سياسة PythonScript إلى ظهور عدة أنواع مختلفة من أخطاء ScriptExecutionFound. شائعة تتضمن أنواع الأخطاء التي تمت رؤيتها 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>