Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
Apigee X. thông tin
Nội dung
Chính sách Python Script cho phép bạn thêm chức năng Python tuỳ chỉnh vào quy trình proxy API của mình, đặc biệt là khi chức năng bạn cần vượt quá những chức năng mà các chính sách có sẵn của Edge cung cấp.
Chúng tôi hỗ trợ ngôn ngữ Python thông qua Jython phiên bản 2.5.2. Các thư viện của bên thứ ba mà bạn thêm phải là "pure Python" (chỉ triển khai được bằng Python). Để biết thêm thông tin về cách thêm thư viện, hãy xem phần Tệp tài nguyên.
Chính sách Python không chứa mã thực. Thay vào đó, chính sách Python tham chiếu đến một tài nguyên Python và xác định Bước trong quy trình API nơi tập lệnh Python thực thi. Bạn có thể tải tập lệnh lên thông qua trình chỉnh sửa proxy giao diện người dùng quản lý hoặc đưa tập lệnh này vào thư mục /resources/py
trong các proxy API mà bạn phát triển cục bộ.
Mẫu
Tập lệnh và chính sách Python
Chính sách về tập lệnh Python
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Script name="Python-1"> <DisplayName>Python-1</DisplayName> <ResourceURL>py://myscript.py</ResourceURL> </Script>
Trong ví dụ này, phần tử ResourceURL chỉ định tài nguyên tập lệnh Python có liên quan.
Tập lệnh Python
Cột này cho thấy những nội dung bạn có thể đưa vào chính tập lệnh 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)
Tham chiếu phần tử
<?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>
Bảng sau đây mô tả các thuộc tính chung cho tất cả phần tử mẹ của chính sách:
Thuộc tính | Nội dung mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
name |
Tên nội bộ của chính sách. Giá trị của thuộc tính Nếu muốn, bạn có thể sử dụng phần tử |
Không áp dụng | Bắt buộc |
continueOnError |
Đặt thành Đặt thành |
false | Không bắt buộc |
enabled |
Đặt thành Đặt thành |
đúng | Không bắt buộc |
async |
Thuộc tính này không được dùng nữa. |
false | Không được dùng nữa |
Phần tử <DisplayName>
Sử dụng cùng với thuộc tính name
để gắn nhãn cho chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên khác theo ngôn ngữ tự nhiên.
<DisplayName>Policy Display Name</DisplayName>
Mặc định |
Không áp dụng Nếu bạn bỏ qua phần tử này, thì giá trị thuộc tính |
---|---|
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
Phần tử<ResourceURL>
Phần tử này chỉ định tệp Python chính sẽ thực thi trong luồng API. Bạn có thể lưu trữ tệp này ở phạm vi proxy API (trong /apiproxy/resources/py
trong gói proxy API hoặc trong mục tập lệnh của ngăn Trình điều hướng của trình chỉnh sửa proxy API) hoặc tại phạm vi tổ chức hoặc môi trường để sử dụng lại trên nhiều proxy API, như mô tả trong phần Tệp tài nguyên. Mã của bạn có thể sử dụng các đối tượng, phương thức và thuộc tính của mô hình đối tượng JavaScript.
<ResourceURL>py://myscript.py</ResourceURL>
Mặc định: | Không có |
Sự hiện diện: | Bắt buộc |
Loại: | Chuỗi |
Phần tử<IncludeURL>
Chỉ định một tệp Python cần được tải dưới dạng phần phụ thuộc cho tệp Python chính được chỉ định bằng phần tử <ResourceURL>
. Các tập lệnh sẽ được đánh giá theo thứ tự được nêu trong chính sách.
Bao gồm nhiều tài nguyên phần phụ thuộc Python với các phần tử <IncludeURL>
bổ sung.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
Mặc định: | Không có |
Sự hiện diện: | Không bắt buộc |
Loại: | Chuỗi |
Mã lỗi
Phần này mô tả các mã lỗi và thông báo lỗi được trả về, cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Bạn cần nắm được thông tin này nếu đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem Những điều bạn cần biết về lỗi chính sách và Xử lý lỗi.
Lỗi thời gian chạy
Những lỗi này có thể xảy ra khi thực thi chính sách.
Mã lỗi | Trạng thái HTTP | Nguyên nhân | Khắc phục |
---|---|---|---|
steps.script.ScriptEvaluationFailed |
500 | Chính sách PythonScript có thể gửi một số loại lỗi ScriptExecutionFailed. Các loại lỗi thường gặp bao gồm NameError và ZeroDivisionError. | build |
Lỗi triển khai
Những lỗi này có thể xảy ra khi bạn triển khai proxy chứa chính sách này.
Tên lỗi | Nguyên nhân | Khắc phục |
---|---|---|
InvalidResourceUrlFormat |
Nếu định dạng của URL tài nguyên được chỉ định trong phần tử <ResourceURL> hoặc <IncludeURL> của chính sách PythonScript không hợp lệ, thì proxy API sẽ không triển khai được. |
build |
InvalidResourceUrlReference |
Nếu các phần tử <ResourceURL> hoặc <IncludeURL> tham chiếu đến một tệp PythonScript không tồn tại, thì nghĩa là không thể triển khai proxy API.
Tệp nguồn được tham chiếu phải tồn tại ở cấp độ proxy API, môi trường hoặc tổ chức. |
build |
Biến lỗi
Các biến này được đặt khi chính sách này kích hoạt lỗi trong thời gian chạy. Để biết thêm thông tin, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách.
Biến | Trong đó | Ví dụ: |
---|---|---|
fault.name="fault_name" |
fault_name là tên của lỗi, như liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. | fault.name Matches "ScriptExecutionFailed" |
pythonscript.policy_name.failed |
policy_name là tên của chính sách báo lỗi do người dùng chỉ định. | pythonscript.PythonScript-1.failed = true |
Ví dụ về phản hồi lỗi
{ "fault": { "faultstring": "Execution of SetResponse failed with error: Pythonscript runtime error: "ReferenceError: "status" is not defined.\"", "detail": { "errorcode": "steps.script.ScriptExecutionFailed" } } }
Ví dụ về quy tắc lỗi
<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>