Chính sách PythonScript

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 name có thể chứa chữ cái, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

(Không bắt buộc) Bạn có thể dùng phần tử <DisplayName> để gắn nhãn 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 ngôn ngữ tự nhiên khác.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi chính sách không thành công. Điều này là dự kiến đối với hầu hết các chính sách.

Đặt thành true để tiếp tục thực thi luồng ngay cả sau khi có chính sách không thành công.

false Không bắt buộc
enabled

Hãy đặt thành true để thực thi chính sách này.

Đặt thành false để tắt chính sách này. Chính sách này sẽ không được thực thi ngay cả khi luồng đó vẫn được liên kết với một luồng.

đú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

&lt;DisplayName&gt; 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 name của chính sách sẽ là đã sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

&lt;ResourceURL&gt; 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

&lt;IncludeURL&gt; 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áchXử 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 NameErrorZeroDivisionError.

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.
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.

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>

Chủ đề có liên quan