คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
อะไร
นโยบายสคริปต์ Python ช่วยให้คุณเพิ่มฟังก์ชัน Python ที่ปรับแต่งไปยังโฟลว์พร็อกซี API ได้ โดยเฉพาะอย่างยิ่งเมื่อฟังก์ชันการทำงานที่คุณต้องการมีมากกว่าที่นโยบาย Edge แบบพร้อมใช้งานทันที
การรองรับภาษา Python มีให้บริการผ่าน Jython เวอร์ชัน 2.5.2 ไลบรารีของบุคคลที่สามที่คุณเพิ่มต้องเป็น "Python โดยสมบูรณ์" (ใช้งานใน Python เท่านั้น) โปรดดูรายละเอียดการเพิ่มไลบรารีที่หัวข้อไฟล์ทรัพยากร
นโยบาย Python จะไม่มีโค้ดจริง แต่นโยบาย Python จะอ้างอิงทรัพยากร Python และกำหนดขั้นตอนในโฟลว์ API ที่สคริปต์ Python ดำเนินการ คุณจะอัปโหลดสคริปต์ผ่านเครื่องมือแก้ไขพร็อกซี UI การจัดการ หรือรวมไว้ในไดเรกทอรี /resources/py
ในพร็อกซี API ที่คุณพัฒนาในเครื่องก็ได้
ลองฟัง
นโยบายและสคริปต์ 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 |
ตั้งค่าเป็น ตั้งค่าเป็น |
false | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
false | เลิกใช้ |
องค์ประกอบ <DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป
<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น |
ไม่มีข้อมูล หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
Type | สตริง |
องค์ประกอบ <ResourceURL>
องค์ประกอบนี้ระบุไฟล์ Python หลักที่จะดำเนินการในขั้นตอน API คุณจัดเก็บไฟล์นี้ไว้ที่ขอบเขตพร็อกซี API (ในส่วน /apiproxy/resources/py
ในกลุ่มพร็อกซี API หรือในส่วนสคริปต์ของแผงการนำทางของเครื่องมือแก้ไขพร็อกซี API) หรือที่ขอบเขตองค์กรหรือสภาพแวดล้อมเพื่อใช้ซ้ำในพร็อกซี API หลายรายการ ตามที่อธิบายไว้ในไฟล์ทรัพยากร โค้ดใช้ออบเจ็กต์ เมธอด และพร็อพเพอร์ตี้ของโมเดลออบเจ็กต์ JavaScript ได้
<ResourceURL>py://myscript.py</ResourceURL>
ค่าเริ่มต้น: | ไม่มี |
สถานที่ตั้ง: | จำเป็น |
ประเภท: | สตริง |
เอลิเมนต์ <IncludeURL>
ระบุให้โหลดไฟล์ Python เป็นทรัพยากร Dependency ของไฟล์ Python หลักที่ระบุไว้ด้วยองค์ประกอบ <ResourceURL>
สคริปต์จะได้รับการประเมินตามลำดับที่ระบุไว้ในนโยบาย
รวมทรัพยากรทรัพยากร Dependency ของ Python มากกว่า 1 รายการพร้อมด้วยองค์ประกอบ <IncludeURL>
เพิ่มเติม
<IncludeURL>py://myscript_dependency.py</IncludeURL>
ค่าเริ่มต้น: | ไม่มี |
สถานที่ตั้ง: | ไม่บังคับ |
ประเภท: | สตริง |
รหัสข้อผิดพลาด
ส่วนนี้อธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ Edge กำหนดเมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 | นโยบาย PythonScript อาจทำให้เกิดข้อผิดพลาด ScriptExecutionFailed หลายประเภท ประเภทข้อผิดพลาดที่พบบ่อย ได้แก่ NameError และ ZeroDivisionError | build |
ข้อผิดพลาดในการทำให้ใช้งานได้
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้
ชื่อข้อผิดพลาด | สาเหตุ | แก้ไข |
---|---|---|
InvalidResourceUrlFormat |
หากรูปแบบของ URL ทรัพยากรที่ระบุภายใน <ResourceURL> หรือองค์ประกอบ <IncludeURL> ของนโยบาย PythonScript ไม่ถูกต้อง จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จ |
build |
InvalidResourceUrlReference |
หากองค์ประกอบ <ResourceURL> หรือ <IncludeURL> อ้างอิงถึงไฟล์ PythonScript ที่ไม่มีอยู่ จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จ
ไฟล์แหล่งที่มาที่อ้างอิงต้องมีระดับพร็อกซี API, สภาพแวดล้อม หรือองค์กร |
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>