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 luồng proxy API, đặc biệt là khi chức năng bạn cần vượt quá những chính sách có sẵn của Edge cung cấp.
Dịch vụ hỗ trợ ngôn ngữ Python được cung cấp thông qua Jython phiên bản 2.5.2. Thư viện của bên thứ ba mà bạn thêm vào phải là "Py Python thuần tuý" (chỉ triển khai 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 sẽ tham chiếu đến mã 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 lên
tập lệnh của mình thông qua trình chỉnh sửa proxy giao diện người dùng quản lý hoặc bạn có thể đưa tập lệnh đó vào
Thư mục /resources/py
trong các proxy API mà bạn phát triển cục bộ.
Mẫu
Chính sách Python và tập lệnh
Chính sách Python Script
<?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 sẽ chỉ định tập lệnh Python phù hợp nguồn.
Tập lệnh Python
Thao tác này cho thấy những nội dung bạn có thể đưa vào 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ả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:
Thuộc tính | 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 (Không bắt buộc) Bạn có thể 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 |
Hãy đặ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 |
<DisplayName> phần tử
Hãy sử dụng cùng với thuộc tính name
để gắn nhãn chính sách trong phần
trình chỉnh sửa proxy giao diện người dùng quản lý có tên ngôn ngữ tự nhiên khác.
<DisplayName>Policy Display Name</DisplayName>
Mặc định |
Không áp dụng Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính |
---|---|
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
<ResourceURL> phần tử
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 proxy API
gói hoặc trong phần Tập lệnh của ngăn Đ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
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 |
<IncludeURL> phần tử
Chỉ định một tệp Python cần được tải dưới dạng phần phụ thuộc vào tệp Python chính được chỉ định bằng thuộc tính
Phần tử <ResourceURL>
. Các tập lệnh sẽ được đánh giá theo thứ tự
chúng được liệt kê trong chính sách.
Đưa vào nhiều tài nguyên phần phụ thuộc Python cùng với thông tin bổ sung
Phần tử <IncludeURL>
.
<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. Đây là thông tin quan trọng bạn cần biết nếu bạn đ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 bài viết 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 chính sách này thực thi.
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 nhiều loại lỗi ScriptExecutionFailed. Thường gặp các loại lỗi đã thấy 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 có 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 <ResourceURL> hoặc
phần tử <IncludeURL> của chính sách PythonScript không hợp lệ, thì việc triển khai proxy API sẽ không thành công. |
build |
InvalidResourceUrlReference |
Nếu phần tử <ResourceURL> hoặc <IncludeURL>
tham chiếu đến một tệp PythonScript không tồn tại thì việc triển khai proxy API không thành công.
Tệp nguồn được tham chiếu phải tồn tại proxy API, môi trường hoặc cấp 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, xem phần Bạn cần biết về các 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ư được 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 do người dùng chỉ định của chính sách gây ra lỗi. | pythonscript.PythonScript-1.failed = true |
Ví dụ về phản hồi khi gặp 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>