นโยบาย PythonScript

คุณกำลังดูเอกสารประกอบของ 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

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name มีตัวอักษร ตัวเลข ช่องว่าง ขีดกลาง ขีดล่าง และจุด ค่านี้ต้องมีอักขระไม่เกิน 255 ตัว

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป

ไม่มีข้อมูล จำเป็น
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งถือเป็นเรื่องปกติสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้การดำเนินการโฟลว์ดำเนินต่อไปได้แม้ว่านโยบายจะล้มเหลวก็ตาม

false ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย ระบบจะไม่บังคับใช้นโยบายแม้ว่าจะยังแนบอยู่กับขั้นตอนก็ตาม

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

false เลิกใช้

องค์ประกอบ <DisplayName>

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มีข้อมูล

หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ name ของนโยบาย

การมีบุคคลอยู่ ไม่บังคับ
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

ข้อผิดพลาดในการทำให้ใช้งานได้

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
InvalidResourceUrlFormat หากรูปแบบของ URL ทรัพยากรที่ระบุภายใน <ResourceURL> หรือองค์ประกอบ <IncludeURL> ของนโยบาย PythonScript ไม่ถูกต้อง จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จ
InvalidResourceUrlReference หากองค์ประกอบ <ResourceURL> หรือ <IncludeURL> อ้างอิงถึงไฟล์ PythonScript ที่ไม่มีอยู่ จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จ ไฟล์แหล่งที่มาที่อ้างอิงต้องมีระดับพร็อกซี API, สภาพแวดล้อม หรือองค์กร

ตัวแปรของข้อผิดพลาด

ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาดขณะรันไทม์ ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณจำเป็นต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบาย

ตัวแปร สถานที่ ตัวอย่าง
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>

หัวข้อที่เกี่ยวข้อง