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

Nếu muốn, bạn có thể sử dụng phần tử <DisplayName> để gắn nhãn cho chính sách này 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 một chính sách không hoạt động. Đây là hành vi dự kiến đối với hầu hết các chính sách.

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

false Không bắt buộc
enabled

Đặt thành true để thực thi chính sách.

Đặ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 chính sách vẫn được đính kèm vào một quy trì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 name của chính sách sẽ được sử dụng.

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áchXử 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 NameErrorZeroDivisionError.

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

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>

Chủ đề có liên quan