Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Nội dung
Chính sách Tập lệnh Python cho phép bạn thêm chức năng Python tuỳ chỉnh vào quy trình proxy API, đặc biệt là khi chức năng bạn cần vượt quá những gì các chính sách có sẵn của Edge cung cấp.
Ngôn ngữ Python được hỗ trợ thông qua Jython phiên bản 2.5.2. Các thư viện bên thứ ba mà bạn thêm phải là "Python thuần tuý" (chỉ được 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.
Một chính sách Python không chứa mã thực tế. 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 mà 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 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 và tập lệnh 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
Điều này cho thấy những gì 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)
Tài liệu tham khảo về 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 |
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 phần 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 ở 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ó |
| Trạng thái hiện diện: | Bắt buộc |
| Loại: | Chuỗi |
Phần tử<IncludeURL>
Chỉ định một tệp Python sẽ được tải dưới dạng phần phụ thuộc vào 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 liệt kê trong chính sách.
Thêm nhiều tài nguyên phụ thuộc Python bằng các phần tử <IncludeURL> bổ sung.
<IncludeURL>py://myscript_dependency.py</IncludeURL>
| Mặc định: | Không có |
| Trạng thái 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>